Последний файл не смотрел.
Вариант: работа с массивом, ничего не прячем, копируем значения строк с ненулевыми суммами.
Код |
---|
Sub CopyRows()
Dim ArrData()
Dim i As Long, k As Long
With Лист3 ' родитель - лист "отчет"
' данные в массив: от A10 до последней заполненной в В
ArrData = .Range("A10:B" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
For i = 1 To UBound(ArrData) ' цикл по строкам
If ArrData(i, 2) Then ' если сумма есть
k = k + 1 ' счетчик строк выгрузки
ArrData(k, 1) = ArrData(i, 1) ' заполняем массив выгрузки
ArrData(k, 2) = ArrData(i, 2)
End If
Next i
End With
' если строки с суммами есть, выгружаем массив на лист
Application.ScreenUpdating = False
If k > 0 Then Лист1.Cells(3, 4).Resize(k, 2).Value = ArrData
Application.ScreenUpdating = True
End Sub |
Если активен не лист "результат", строки
Application.ScreenUpdating = False/True можно исключить.
Если выгрузка не разовая (если разовая - зачем макрос?
), правильно - добавить очистку диапазона выгрузки, иначе могут остаться заполненные строки ниже выгруженных данных.