Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как удалить пустые ячейки в столбцах сразу в 100 столбцах? - Мир MS Excel

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_, DrMini  
Как удалить пустые ячейки в столбцах сразу в 100 столбцах?
regnus Дата: Пятница, 14.08.2015, 20:51 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Как удалить пустые ячейки в столбцах сразу в 100 столбцах?

1. Нужно все данные (не пустые ячейки) вывести к верху листа, чтобы понимать длину не пустых ячеек каждого столбца.
2. Нужно подровнять столбцы по длине (слева-направо)
Есть и пустые столбцы.

Есть:
111 222 4
333 44 55
11 555
111 22 444
55
11 44
1
Нужно1
111 222 333 4 55
11 22 44 555
111 444 55
11 44
1

Нужно2
111 4 55 222 333
11 44 555 22
111 444 55
11 44
1

Спасибо)
См. пример в экселе, тут форматирование не то.
К сообщению приложен файл: 0593297.xlsx (29.9 Kb)
 
Ответить
СообщениеКак удалить пустые ячейки в столбцах сразу в 100 столбцах?

1. Нужно все данные (не пустые ячейки) вывести к верху листа, чтобы понимать длину не пустых ячеек каждого столбца.
2. Нужно подровнять столбцы по длине (слева-направо)
Есть и пустые столбцы.

Есть:
111 222 4
333 44 55
11 555
111 22 444
55
11 44
1
Нужно1
111 222 333 4 55
11 22 44 555
111 444 55
11 44
1

Нужно2
111 4 55 222 333
11 44 555 22
111 444 55
11 44
1

Спасибо)
См. пример в экселе, тут форматирование не то.

Автор - regnus
Дата добавления - 14.08.2015 в 20:51
Nic70y Дата: Пятница, 14.08.2015, 21:05 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9131
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
F5
Выделить
пустые ячейки
ПКМ - удалить
ячейки, со сдвигом вверх

то?


ЮMoney 41001841029809
 
Ответить
СообщениеF5
Выделить
пустые ячейки
ПКМ - удалить
ячейки, со сдвигом вверх

то?

Автор - Nic70y
Дата добавления - 14.08.2015 в 21:05
Serge_007 Дата: Пятница, 14.08.2015, 22:36 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
тут форматирование не то
А Вы его и не применяли:
1112224
3334455
1155
1144
1


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
тут форматирование не то
А Вы его и не применяли:
1112224
3334455
1155
1144
1

Автор - Serge_007
Дата добавления - 14.08.2015 в 22:36
AndreTM Дата: Суббота, 15.08.2015, 08:41 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Типа вот так?
(Код надо поместить в общий модуль, и вызывать, предварительно выделив область для обработки)

[vba]
Код
Sub testRows00()
      ' переносим ячейки, анализируя содержимое
      ' работаем с выделенной областью
      If Selection.Count = 1 Then Exit Sub
      For Each col In Selection.Columns
          Set cellTo = Nothing
          For Each cell In col.Cells
              If Not IsEmpty(cell) Then
                  If Not cellTo Is Nothing Then
                      cell.Copy cellTo
                      cell.ClearContents
                      Set cellTo = cellTo.Offset(1)
                  End If
              Else
                  If cellTo Is Nothing Then
                      Set cellTo = cell
                  End If
              End If
          Next
      Next
End Sub

Sub testColumns00()

      ' работаем с выделенной областью
      ' сначала выполняем "сжатие" по строкам
      If Selection.Count = 1 Then Exit Sub
      testRows00
        
      ' выделенная область та же
      ' ПРЕДУПРЕЖДЕНИЕ: одна строка выше выделенного диапазона будут очищена
      For Each col In Selection.Columns
          col.Offset(-1).Cells(1, 1).Value = WorksheetFunction.CountA(col)
      Next
      Set rngS = Selection.Offset(-1).Resize(Selection.Rows.Count + 1)
      With rngS.Parent.Sort
          .SortFields.Add Key:=rngS.Rows(1), _
              SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
          .SetRange rngS
          .Header = xlGuess
          .Orientation = xlLeftToRight
          .SortMethod = xlPinYin
          .Apply
      End With
      rngS.Rows(1).ClearContents
        
   End Sub
[/vba]
Смеяться не надо :) Мне было просто нечего делать
Например, предложенный Nic70y код
[vba]
Код
Sub testRows()
     ' используя встроенные средства, удаляем пустые ячейки, со сдвигом данных вверх
     ' ПРЕДУПРЕЖДЕНИЕ: сдвигаются выше данные, расположенные на листе ниже выделенной области
     ' работаем с выделенной областью
     If Selection.Count = 1 Then Exit Sub
     Selection.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
[/vba]не подходит по причине, изложенной в комментариях...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Суббота, 15.08.2015, 08:46
 
Ответить
СообщениеТипа вот так?
(Код надо поместить в общий модуль, и вызывать, предварительно выделив область для обработки)

[vba]
Код
Sub testRows00()
      ' переносим ячейки, анализируя содержимое
      ' работаем с выделенной областью
      If Selection.Count = 1 Then Exit Sub
      For Each col In Selection.Columns
          Set cellTo = Nothing
          For Each cell In col.Cells
              If Not IsEmpty(cell) Then
                  If Not cellTo Is Nothing Then
                      cell.Copy cellTo
                      cell.ClearContents
                      Set cellTo = cellTo.Offset(1)
                  End If
              Else
                  If cellTo Is Nothing Then
                      Set cellTo = cell
                  End If
              End If
          Next
      Next
End Sub

Sub testColumns00()

      ' работаем с выделенной областью
      ' сначала выполняем "сжатие" по строкам
      If Selection.Count = 1 Then Exit Sub
      testRows00
        
      ' выделенная область та же
      ' ПРЕДУПРЕЖДЕНИЕ: одна строка выше выделенного диапазона будут очищена
      For Each col In Selection.Columns
          col.Offset(-1).Cells(1, 1).Value = WorksheetFunction.CountA(col)
      Next
      Set rngS = Selection.Offset(-1).Resize(Selection.Rows.Count + 1)
      With rngS.Parent.Sort
          .SortFields.Add Key:=rngS.Rows(1), _
              SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
          .SetRange rngS
          .Header = xlGuess
          .Orientation = xlLeftToRight
          .SortMethod = xlPinYin
          .Apply
      End With
      rngS.Rows(1).ClearContents
        
   End Sub
[/vba]
Смеяться не надо :) Мне было просто нечего делать
Например, предложенный Nic70y код
[vba]
Код
Sub testRows()
     ' используя встроенные средства, удаляем пустые ячейки, со сдвигом данных вверх
     ' ПРЕДУПРЕЖДЕНИЕ: сдвигаются выше данные, расположенные на листе ниже выделенной области
     ' работаем с выделенной областью
     If Selection.Count = 1 Then Exit Sub
     Selection.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
[/vba]не подходит по причине, изложенной в комментариях...

Автор - AndreTM
Дата добавления - 15.08.2015 в 08:41
regnus Дата: Суббота, 15.08.2015, 11:18 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Nic70y, у меня 3000 строк и под 200 столбцов. Медленно удаляет. Эксель виснет. Попробую на ночь оставить.


Сообщение отредактировал Serge_007 - Суббота, 15.08.2015, 12:00
 
Ответить
СообщениеNic70y, у меня 3000 строк и под 200 столбцов. Медленно удаляет. Эксель виснет. Попробую на ночь оставить.

Автор - regnus
Дата добавления - 15.08.2015 в 11:18
_Boroda_ Дата: Суббота, 15.08.2015, 12:30 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16895
Репутация: 6612 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не уверен, но в качестве предположения - возможно, код будет работать быстрее, если удалять пустые не сверху вниз, как по умолчанию Excel делает, а насильно прописать удаление по циклу снизу вверх.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе уверен, но в качестве предположения - возможно, код будет работать быстрее, если удалять пустые не сверху вниз, как по умолчанию Excel делает, а насильно прописать удаление по циклу снизу вверх.

Автор - _Boroda_
Дата добавления - 15.08.2015 в 12:30
Richman Дата: Суббота, 15.08.2015, 13:51 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 346
Репутация: 54 ±
Замечаний: 0% ±

Excel 2007
Формулами и доп строками нужно?

нужно1
Код
=ЕСЛИОШИБКА(ИНДЕКС(Лист2!B$1:B$9;НАИМЕНЬШИЙ(ЕСЛИ(Лист2!B$2:B$9<>"";СТРОКА(Лист2!B$2:B$9);100000);СТРОКА(1:1)));"")


потом копировать-----Правая кнопка -----специальная вставка----значения
К сообщению приложен файл: 0841009.xlsx (34.1 Kb)


С Уважением, Richman

 
Ответить
СообщениеФормулами и доп строками нужно?

нужно1
Код
=ЕСЛИОШИБКА(ИНДЕКС(Лист2!B$1:B$9;НАИМЕНЬШИЙ(ЕСЛИ(Лист2!B$2:B$9<>"";СТРОКА(Лист2!B$2:B$9);100000);СТРОКА(1:1)));"")


потом копировать-----Правая кнопка -----специальная вставка----значения

Автор - Richman
Дата добавления - 15.08.2015 в 13:51
KSV Дата: Суббота, 15.08.2015, 14:22 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
у меня 3000 строк и под 200 столбцов. Медленно удаляет. Эксель виснет

Странно...
600 тыс. ячеек для Excel это не тот объем, чтобы виснуть. (если, конечно, у вас не пентиум III :) )

Попробуйте так (должно работать оч. быстро на любом кол-ве)
К сообщению приложен файл: 0593297.xlsm (36.5 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
у меня 3000 строк и под 200 столбцов. Медленно удаляет. Эксель виснет

Странно...
600 тыс. ячеек для Excel это не тот объем, чтобы виснуть. (если, конечно, у вас не пентиум III :) )

Попробуйте так (должно работать оч. быстро на любом кол-ве)

Автор - KSV
Дата добавления - 15.08.2015 в 14:22
regnus Дата: Суббота, 15.08.2015, 15:42 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Спасибо!!!
быстро действительно.

А Нужно 2 сможете?
 
Ответить
СообщениеСпасибо!!!
быстро действительно.

А Нужно 2 сможете?

Автор - regnus
Дата добавления - 15.08.2015 в 15:42
AndreTM Дата: Суббота, 15.08.2015, 19:09 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
regnus, а "Нужно 2" в моём варианте (конечно, заменив в его вызове процедуру testRows00 на PackByRows от KSV всё равно остается медленной? Тогда единственный вариант - считать все данные в массив и провести преобразования уже с ним...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщениеregnus, а "Нужно 2" в моём варианте (конечно, заменив в его вызове процедуру testRows00 на PackByRows от KSV всё равно остается медленной? Тогда единственный вариант - считать все данные в массив и провести преобразования уже с ним...

Автор - AndreTM
Дата добавления - 15.08.2015 в 19:09
KSV Дата: Суббота, 15.08.2015, 21:05 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
regnus, я не стал делать "Нужно2", т.к. судя по коду (не проверял), процедура testColumns00() от AndreTM должна сортировать быстро.
Единственное, ее можно чуть дописать, если у вас выделенный диапазон начинается с первой строки на листе, или чтобы не затереть строку перед выделенным диапазоном.
К сообщению приложен файл: 0593297_.xlsm (40.1 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Суббота, 15.08.2015, 21:06
 
Ответить
Сообщениеregnus, я не стал делать "Нужно2", т.к. судя по коду (не проверял), процедура testColumns00() от AndreTM должна сортировать быстро.
Единственное, ее можно чуть дописать, если у вас выделенный диапазон начинается с первой строки на листе, или чтобы не затереть строку перед выделенным диапазоном.

Автор - KSV
Дата добавления - 15.08.2015 в 21:05
Udik Дата: Суббота, 15.08.2015, 21:11 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Вот попробовал сварганить с сортировкой столбцов, вышло многа букфф :)
К сообщению приложен файл: delEmCll.xlsb (60.8 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеВот попробовал сварганить с сортировкой столбцов, вышло многа букфф :)

Автор - Udik
Дата добавления - 15.08.2015 в 21:11
AndreTM Дата: Воскресенье, 16.08.2015, 12:43 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Медленно удаляет. Эксель виснет.
А если в код ещё добавить отключение/включение Application.ScreenUpdating - то тоже быстродействие поднимется.
Вотбы вам сразу спросить - "как БЫСТРО проделать данную операцию на таком-то объёме"...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Воскресенье, 16.08.2015, 12:44
 
Ответить
Сообщение
Медленно удаляет. Эксель виснет.
А если в код ещё добавить отключение/включение Application.ScreenUpdating - то тоже быстродействие поднимется.
Вотбы вам сразу спросить - "как БЫСТРО проделать данную операцию на таком-то объёме"...

Автор - AndreTM
Дата добавления - 16.08.2015 в 12:43
gling Дата: Воскресенье, 16.08.2015, 14:23 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация: 739 ±
Замечаний: 0% ±

2010
Собрал конструкцию из разных файлов, быстро ли работает не знаю. Диапазон сортировки нужно указывать в макросе, может кто переделает под выделение. Сортируются столбцы начиная с нижней строки. Результат не отличается от результата Udik.
К сообщению приложен файл: 1697778.xlsb (76.8 Kb)


ЯД-41001506838083
 
Ответить
СообщениеСобрал конструкцию из разных файлов, быстро ли работает не знаю. Диапазон сортировки нужно указывать в макросе, может кто переделает под выделение. Сортируются столбцы начиная с нижней строки. Результат не отличается от результата Udik.

Автор - gling
Дата добавления - 16.08.2015 в 14:23
regnus Дата: Понедельник, 17.08.2015, 16:34 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Собрал конструкцию из разных файлов, быстро ли работает не знаю. Диапазон сортировки нужно указывать в макросе, может кто переделает под выделение. Сортируются столбцы начиная с нижней строки. Результат не отличается от результата Udik


Ваш пример работает.
А мой нет.
Вставляет 2 столбца в один.
Не сортирует столбцы.
удалено администрацией


Сообщение отредактировал _Boroda_ - Понедельник, 17.08.2015, 16:38
 
Ответить
Сообщение
Собрал конструкцию из разных файлов, быстро ли работает не знаю. Диапазон сортировки нужно указывать в макросе, может кто переделает под выделение. Сортируются столбцы начиная с нижней строки. Результат не отличается от результата Udik


Ваш пример работает.
А мой нет.
Вставляет 2 столбца в один.
Не сортирует столбцы.
удалено администрацией

Автор - regnus
Дата добавления - 17.08.2015 в 16:34
KSV Дата: Понедельник, 17.08.2015, 19:06 | Сообщение № 16
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
regnus, что у вас не работает?
Вариант, предложенный вам AndreTM, прекрасно работает.
Вы это пробовали? Должно работать достаточно быстро (приемлимо быстро).
Можно еще на время сортировки временно отключать обновление экрана и авторасчет формул (если их у вас много)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениеregnus, что у вас не работает?
Вариант, предложенный вам AndreTM, прекрасно работает.
Вы это пробовали? Должно работать достаточно быстро (приемлимо быстро).
Можно еще на время сортировки временно отключать обновление экрана и авторасчет формул (если их у вас много)

Автор - KSV
Дата добавления - 17.08.2015 в 19:06
gling Дата: Понедельник, 17.08.2015, 19:14 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация: 739 ±
Замечаний: 0% ±

2010
Ошибка, должно быть так
Результат не отличается от результата Udik.


ЯД-41001506838083
 
Ответить
СообщениеОшибка, должно быть так
Результат не отличается от результата Udik.

Автор - gling
Дата добавления - 17.08.2015 в 19:14
regnus Дата: Понедельник, 17.08.2015, 20:48 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
regnus, я не стал делать "Нужно2", т.к. судя по коду (не проверял), процедура testColumns00() от AndreTM должна сортировать быстро.
Единственное, ее можно чуть дописать, если у вас выделенный диапазон начинается с первой строки на листе, или чтобы не затереть строку перед выделенным диапазоном.


Пробую ваш файл, т.к. вроде он делает 2 варианта.

500 строк и 100 столбцов обрабатывает за 1-3 минуты. Точно не скажу, т.к. при обработке виснет.

А 3000 строк и 100 столбцов появляется жесть.
Эксель зависает минут на 20 и более
Начинает глючить и не открывает другие файлы.
Приходится перегружать комп...как будто эксель вирус хватает.

Есть способы не вешать эксель и ускорить обработку?


Сообщение отредактировал regnus - Понедельник, 17.08.2015, 20:49
 
Ответить
Сообщение
regnus, я не стал делать "Нужно2", т.к. судя по коду (не проверял), процедура testColumns00() от AndreTM должна сортировать быстро.
Единственное, ее можно чуть дописать, если у вас выделенный диапазон начинается с первой строки на листе, или чтобы не затереть строку перед выделенным диапазоном.


Пробую ваш файл, т.к. вроде он делает 2 варианта.

500 строк и 100 столбцов обрабатывает за 1-3 минуты. Точно не скажу, т.к. при обработке виснет.

А 3000 строк и 100 столбцов появляется жесть.
Эксель зависает минут на 20 и более
Начинает глючить и не открывает другие файлы.
Приходится перегружать комп...как будто эксель вирус хватает.

Есть способы не вешать эксель и ускорить обработку?

Автор - regnus
Дата добавления - 17.08.2015 в 20:48
Serge_007 Дата: Понедельник, 17.08.2015, 20:53 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
500 строк и 100 столбцов обрабатывает за 1-3 минуты. Точно не скажу, т.к. при обработке виснет.
regnus, Вы можете выложить видео с экрана?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
500 строк и 100 столбцов обрабатывает за 1-3 минуты. Точно не скажу, т.к. при обработке виснет.
regnus, Вы можете выложить видео с экрана?

Автор - Serge_007
Дата добавления - 17.08.2015 в 20:53
Udik Дата: Понедельник, 17.08.2015, 21:01 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Я на своём попробовал 3000х200 - ок. 35с.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеЯ на своём попробовал 3000х200 - ок. 35с.

Автор - Udik
Дата добавления - 17.08.2015 в 21:01
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!