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

Вход

Регистрация

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

 

= Мир MS Excel/Удаление пустот - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление пустот (Макросы/Sub)
Удаление пустот
DJ_Marker_MC Дата: Пятница, 23.05.2014, 15:36 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Добрый день, коллеги.
Хочу попросить поделиться советом, чем можно заменить данный код?
Организовал через For Each но на большом массиве данных медленно работает, понимаю что это правильнее через библиотеку или массив, но они мне пока что мне подвластны.
Зачем нужен Delete на пустой ячейке? - при сохранении с 1с пустые ячейки часто имеют или 1 пробел или РЕАЛЬНО ОНИ ПУСТЫЕ но в то же время проводить мат.операции с ними невозможно пока не делитнишь по каждой из этих ячеек, возвращает "ЗНАЧ", поэтому сделал себе "волшебную кнопку", но очень хочется её ускорить.

[vba]
Код
'Пробегает по каждой ячейки всего выделенного диапазона листа и нажимает делит на всех ячейках в которых пустота или 1 пробел
Sub ClearNullContents()
     For Each cell In Selection
     If Len(cell) = 0 Or cell.Value = " " Then cell.ClearContents
     Next
End Sub
[/vba]

Файлик приложил

Заранее спасибо.
К сообщению приложен файл: 4768299.xlsm (18.1 Kb)
 
Ответить
СообщениеДобрый день, коллеги.
Хочу попросить поделиться советом, чем можно заменить данный код?
Организовал через For Each но на большом массиве данных медленно работает, понимаю что это правильнее через библиотеку или массив, но они мне пока что мне подвластны.
Зачем нужен Delete на пустой ячейке? - при сохранении с 1с пустые ячейки часто имеют или 1 пробел или РЕАЛЬНО ОНИ ПУСТЫЕ но в то же время проводить мат.операции с ними невозможно пока не делитнишь по каждой из этих ячеек, возвращает "ЗНАЧ", поэтому сделал себе "волшебную кнопку", но очень хочется её ускорить.

[vba]
Код
'Пробегает по каждой ячейки всего выделенного диапазона листа и нажимает делит на всех ячейках в которых пустота или 1 пробел
Sub ClearNullContents()
     For Each cell In Selection
     If Len(cell) = 0 Or cell.Value = " " Then cell.ClearContents
     Next
End Sub
[/vba]

Файлик приложил

Заранее спасибо.

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

Excel 2016
Привет
Ну дык
[vba]
Код
Sub ClearNullContents()
       Selection.ClearContents
End Sub
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеПривет
Ну дык
[vba]
Код
Sub ClearNullContents()
       Selection.ClearContents
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 23.05.2014 в 21:31
RAN Дата: Пятница, 23.05.2014, 21:59 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Можно мявкнуть?
[vba]
Код
Sub Мяу()
     Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
     Selection.Replace What:="", Replacement:=Empty, LookAt:=xlWhole
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМожно мявкнуть?
[vba]
Код
Sub Мяу()
     Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
     Selection.Replace What:="", Replacement:=Empty, LookAt:=xlWhole
End Sub
[/vba]

Автор - RAN
Дата добавления - 23.05.2014 в 21:59
_Boroda_ Дата: Пятница, 23.05.2014, 22:37 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У меня вторая часть Мяу не отрабатывает
Предложу так
[vba]
Код
Sub ГАВ()
        Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
        Selection.TextToColumns Destination:=Selection(1)
End Sub
[/vba]
Почему ГАВ? Это не против Мяу, это мои ФИО.
Один минус - лечить придется отдельно каждый столбец. Зато можно не морочиться с Селекшном, а выделять тупо весь столбик


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня вторая часть Мяу не отрабатывает
Предложу так
[vba]
Код
Sub ГАВ()
        Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
        Selection.TextToColumns Destination:=Selection(1)
End Sub
[/vba]
Почему ГАВ? Это не против Мяу, это мои ФИО.
Один минус - лечить придется отдельно каждый столбец. Зато можно не морочиться с Селекшном, а выделять тупо весь столбик

Автор - _Boroda_
Дата добавления - 23.05.2014 в 22:37
RAN Дата: Пятница, 23.05.2014, 22:53 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Мяу_Мяв()
      Selection.Replace What:="", Replacement:=" ", LookAt:=xlWhole
      Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
End Sub
[/vba]

PS Sub ГАВ() зарезервировано за Doober :D


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 23.05.2014, 22:57
 
Ответить
Сообщение[vba]
Код
Sub Мяу_Мяв()
      Selection.Replace What:="", Replacement:=" ", LookAt:=xlWhole
      Selection.Replace What:=" ", Replacement:=Empty, LookAt:=xlWhole
End Sub
[/vba]

PS Sub ГАВ() зарезервировано за Doober :D

Автор - RAN
Дата добавления - 23.05.2014 в 22:53
nilem Дата: Суббота, 24.05.2014, 20:08 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
еще можно так попробовать:
[vba]
Код
Sub ertert()
With Selection
     .Value = Application.Trim(Application.Clean(.Value))
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениееще можно так попробовать:
[vba]
Код
Sub ertert()
With Selection
     .Value = Application.Trim(Application.Clean(.Value))
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 24.05.2014 в 20:08
DJ_Marker_MC Дата: Понедельник, 26.05.2014, 18:27 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Всем добрый вечер.
Ссори что не отписался изначально, но только сейчас удалось добраться до форума.

Спасибо всем откликнувшимся, пока что на НЕОЧЕНЬ большом массиве инфо тестировал все три варианта _Boroda_, RAN, nilem - визуально по скорости быстрее всего отработал вариант Ran, скажем так - мгновенно, в варианте у nilem ощутил небольшую задержку (примерно такую как и в моём макросе). В варианте _Boroda_ - есть одно большое НО - макрос сказал "БУДУ РАБОТАТЬ ТОЛЬКО В ОДНОМ СТОЛБЦЕ" при выделении 4000 строк и 24 столбца работать не захотел.

Когда будет большой массив данных чуть позже, протестирую еще раз. Но пока что остановлюсь на варианте Ran "Sub Мяу_Мяв()"

Спасибо всем за помощь.
 
Ответить
СообщениеВсем добрый вечер.
Ссори что не отписался изначально, но только сейчас удалось добраться до форума.

Спасибо всем откликнувшимся, пока что на НЕОЧЕНЬ большом массиве инфо тестировал все три варианта _Boroda_, RAN, nilem - визуально по скорости быстрее всего отработал вариант Ran, скажем так - мгновенно, в варианте у nilem ощутил небольшую задержку (примерно такую как и в моём макросе). В варианте _Boroda_ - есть одно большое НО - макрос сказал "БУДУ РАБОТАТЬ ТОЛЬКО В ОДНОМ СТОЛБЦЕ" при выделении 4000 строк и 24 столбца работать не захотел.

Когда будет большой массив данных чуть позже, протестирую еще раз. Но пока что остановлюсь на варианте Ran "Sub Мяу_Мяв()"

Спасибо всем за помощь.

Автор - DJ_Marker_MC
Дата добавления - 26.05.2014 в 18:27
DJ_Marker_MC Дата: Понедельник, 26.05.2014, 19:01 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Отписываюсь теперь по факту теста на массиве 60 тыс строк 25 столбцов
вариант RAN - около 15-20 секунд
вариант nilem - 2 секунды - но к сожалению не подходит, поскольку он удаляет лишние пробелы и в тех ячейках где есть значения, а мне нужно только пустые ячейки чистить.

Если будут предложения как ускорить буду благодарен.
 
Ответить
СообщениеОтписываюсь теперь по факту теста на массиве 60 тыс строк 25 столбцов
вариант RAN - около 15-20 секунд
вариант nilem - 2 секунды - но к сожалению не подходит, поскольку он удаляет лишние пробелы и в тех ячейках где есть значения, а мне нужно только пустые ячейки чистить.

Если будут предложения как ускорить буду благодарен.

Автор - DJ_Marker_MC
Дата добавления - 26.05.2014 в 19:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление пустот (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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