Друзья! Требуется Ваша помощь. Есть документ 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] Но вот незадача: при переносе значений из одного массива в другой...переносятся только данные из первой непустой строки, а остальные непустые не переносятся.... Прошу подсказать, где подправить макрос?
Пример прилагаю.
Друзья! Требуется Ваша помощь. Есть документ 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] Но вот незадача: при переносе значений из одного массива в другой...переносятся только данные из первой непустой строки, а остальные непустые не переносятся.... Прошу подсказать, где подправить макрос?