Поскольку вы не указали, куда вставлять данные, я вставлю новый лист (Sheet2
) в первое доступное пустое место в Col A
. Я предполагаю, что у вас есть заголовки уже на каждом листе.
Option Explicit
Sub Filter()
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
Dim ws1LastRow As Long: ws1LastRow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
Dim ws2LastRow As Long: ws2LastRow = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Offset(1).Row
Application.ScreenUpdating = False
With ws1
If Not .AutoFilterMode Then .Range("A1").AutoFilter 'Check for filter
.Range("A1:B1").AutoFilter Field:=2, Criteria1:="<> 0" 'Apply filter (hide 0's)
.Range("A2:B" & ws1LastRow).Copy 'Copy
.AutoFilterMode = False 'Remove Filter
End With
ws2.Range("A" & ws2LastRow).PasteSpecial xlPasteValues 'Paste
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
Вам нужно будет поменять местами каждый экземпляр Sheet1
с именем листа, содержащего ваши необработанные данные, и вам нужно будет поменять местами каждый экземпляр Sheet2
с именем листа, куда вы вставляете свои данные.