【问题标题】:How to increment loop with advanced filter in VBA excel [duplicate]如何在VBA excel中使用高级过滤器增加循环[重复]
【发布时间】:2019-05-21 08:26:35
【问题描述】:

现在我正在使用一个脚本来检测所有非空单元格并将这些单元格复制到另一个工作表。该脚本是为当时的一列执行此操作的。现在我有一个超过 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

【问题讨论】:

  • 除了@GSerg 说的,你在增加列数,excel Cells(Row, Column) 中没有那么多列。

标签: excel vba for-loop filter


【解决方案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 编辑为正确的 WB 参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多