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

Вход

Регистрация

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

 

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

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

Excel 2013
Друзья!
Требуется Ваша помощь.
Есть документ excel, в который выгружаются данные из внешней Базы Данных, и при этом между заполненными строками возникают неравномерные участки пустых строк.
Написал макрос для их удаления через цикл, но при количестве строк 1000 и более, работает ооочень медленно. Оно и понятно, так как программа постоянно обращается к данным на листе.
Возникла идея реализовать задуманное через массив. То есть, загоняю данные в массив(включая и пустые строки), а потом переношу непустые значения в другой массив, после чего - выгрузка результата на лист.
Как-то так:
[vba]
Код

Sub clr()
With Sheets("Готовый вариант")
Dim LastRow&, i&, j&, arr, FirstCel As Range
Set FirstCel = .Range("a:a").Find("*", Cells(Rows.Count, 1))
    LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
      arr = .Range("A" & FirstCel.Row, "E" & LastRow)
       ReDim myArr(1 To UBound(arr), 1 To 5)
        For i = LBound(arr) To UBound(arr)
          For j = 1 To 5
            If arr(i, j) <> Empty Or arr(i, j) <> " " Then
               myArr(i, j) = arr(i, j)
            End If
        Next
        Next
        
    End With
    End Sub
[/vba]
Но вот незадача: при переносе значений из одного массива в другой...переносятся только данные из первой непустой строки, а остальные непустые не переносятся....
Прошу подсказать, где подправить макрос?

Пример прилагаю.
К сообщению приложен файл: 3465340.xlsm (61.5 Kb)
 
Ответить
СообщениеДрузья!
Требуется Ваша помощь.
Есть документ excel, в который выгружаются данные из внешней Базы Данных, и при этом между заполненными строками возникают неравномерные участки пустых строк.
Написал макрос для их удаления через цикл, но при количестве строк 1000 и более, работает ооочень медленно. Оно и понятно, так как программа постоянно обращается к данным на листе.
Возникла идея реализовать задуманное через массив. То есть, загоняю данные в массив(включая и пустые строки), а потом переношу непустые значения в другой массив, после чего - выгрузка результата на лист.
Как-то так:
[vba]
Код

Sub clr()
With Sheets("Готовый вариант")
Dim LastRow&, i&, j&, arr, FirstCel As Range
Set FirstCel = .Range("a:a").Find("*", Cells(Rows.Count, 1))
    LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
      arr = .Range("A" & FirstCel.Row, "E" & LastRow)
       ReDim myArr(1 To UBound(arr), 1 To 5)
        For i = LBound(arr) To UBound(arr)
          For j = 1 To 5
            If arr(i, j) <> Empty Or arr(i, j) <> " " Then
               myArr(i, j) = arr(i, j)
            End If
        Next
        Next
        
    End With
    End Sub
[/vba]
Но вот незадача: при переносе значений из одного массива в другой...переносятся только данные из первой непустой строки, а остальные непустые не переносятся....
Прошу подсказать, где подправить макрос?

Пример прилагаю.

Автор - Xpert
Дата добавления - 03.03.2022 в 12:36
китин Дата: Четверг, 03.03.2022, 13:41 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Xpert, а так не проще?
[vba]
Код
Sub zERO()
Dim LastRow&
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A2:E" & LastRow).AutoFilter Field:=1, Criteria1:="="
    Rows("3:" & LastRow - 1).Delete Shift:=xlUp
    Range("A2:E2").AutoFilter
End Sub
[/vba]
К сообщению приложен файл: 6180209.xlsm (64.8 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеXpert, а так не проще?
[vba]
Код
Sub zERO()
Dim LastRow&
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A2:E" & LastRow).AutoFilter Field:=1, Criteria1:="="
    Rows("3:" & LastRow - 1).Delete Shift:=xlUp
    Range("A2:E2").AutoFilter
End Sub
[/vba]

Автор - китин
Дата добавления - 03.03.2022 в 13:41
Xpert Дата: Четверг, 03.03.2022, 13:45 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 115
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
китин, Игорь, спасибо, довольно быстро работает!
 
Ответить
Сообщениекитин, Игорь, спасибо, довольно быстро работает!

Автор - Xpert
Дата добавления - 03.03.2022 в 13:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление пустых строк макросом (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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