Попробуй это. учитывая, что столбцы имеют только цифры.
Sub FilterZeros()
Dim i As Long, lr As Long, lc As Long
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = ThisWorkbook.Worksheets("Sheet1")
Set sh2 = ThisWorkbook.Worksheets("Sheet2")
'Last column
lc = Cells(1, Columns.Count).End(xlToLeft).Column
'Loops between column in Sheet1 to filter valus <>0
For i = 1 To lc
sh1.Activate
Range("A1").AutoFilter Field:=i, Criteria1:="<>0"
n = Cells(Rows.Count, i).End(xlUp).Row
Range(Cells(2, i), Cells(n, i)).SpecialCells(xlCellTypeVisible).Copy
'find the last column and adds the copied data in Sheet2
sh2.Activate
lc2 = Cells(2, Columns.Count).End(xlToLeft).Column + 1
Cells(2, lc2).PasteSpecial Paste:=xlValues
sh1.Activate
Range("A1").AutoFilter
Next
End Sub
Используйте ниже исправленный код без цикла, чтобы выбрать какой-либо конкретный столбец для фильтрации и копирования значений.
Sub FilterZeros()
Dim i As Long, lr As Long, lc As Long
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = ThisWorkbook.Worksheets("Sheet1")
Set sh2 = ThisWorkbook.Worksheets("Sheet2")
'First Column to be filtered
sh1.Activate
i = "Enter your column no. 1 here"
Range("A1").AutoFilter Field:=i, Criteria1:="<>0"
n = Cells(Rows.Count, i).End(xlUp).Row
Range(Cells(2, i), Cells(n, i)).SpecialCells(xlCellTypeVisible).Copy
sh2.Activate
Range("A2").PasteSpecial xlPasteValues
'Second Column to be filtered
sh1.Activate
Range("A1").AutoFilter
i = "Enter your column no. 2 here"
Range("A1").AutoFilter Field:=i, Criteria1:="<>0"
n = Cells(Rows.Count, i).End(xlUp).Row
Range(Cells(2, i), Cells(n, i)).SpecialCells(xlCellTypeVisible).Copy
sh2.Activate
Range("B2").PasteSpecial xlPasteValues
sh1.Activate
Range("A1").AutoFilter
sh2.Activate
Range("A2").Select
End Sub
Спасибо,
Хафиз