如何在VBA Excel中使用高级过滤器递增循环

时间:2019-05-21 08:26:35

标签: excel vba for-loop filter

现在,我正在使用一个脚本来检测所有不为空的单元格,并将这些单元格复制到另一张纸上。脚本是一次只针对一列执行此操作。现在,我的工作表包含200多个列,我想循环播放此脚本。

如您所见,我试图循环这些列,但是在运行代码时收到错误消息。

我正在使用的代码没有循环:

Sub uniek()

Sheets("Rekenblad").Range("A1:A93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("A1"), Unique:=True

Sheets("Rekenblad").Range("B1:B93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("B1"), Unique:=True

Sheets("Rekenblad").Range("C1:C93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("C1"), Unique:=True

End Sub

我尝试过的事情:

Sub uniek2()

For Col = 1 To 100
Sheets("Rekenblad").Range(Cells(1, Col), Cells(1, Col)).AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range(Cells(1, Col)), Unique:=True
Next Col

End Sub

1 个答案:

答案 0 :(得分:1)

Cells范围对象与Range对象的作用不同。

您可以使用 Cells(Row, ColumnNumberCells(Row, "ColumnLetter")

此外,还没有将范围对象全部设置为引用特定的wb和ws。如果不指定这些名称,则VBA会引用活动的wb / ws。

因此,正确的循环应类似于:

Sub uniek2()
Dim ColNr As Integer
Dim MaxRow As Long
Dim sht As Sheet

Set sht = Workbooks(REF).Sheets("Rekenblad")

MaxRow = 93500

With sht

    For ColNr = 1 To 100
        .Range(.Cells(1, ColNr), .Cells(MaxRow, ColNr)).AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range(Workbooks(REF).Sheets("Uniek").Cells(1, ColNr)), Unique:=True
    Next ColNr

End With

End Sub

确保将REF编辑为正确的白平衡参考。