VBA:AdvancedFilter在AutoFilter之后获取唯一值

时间:2016-05-16 18:13:29

标签: vba excel-vba autofilter advanced-filter excel

我试图在过滤A列后在B列中获取唯一名称,然后将其粘贴到C列中,如下所示:

Range("A1:B1").Select
            Selection.AutoFilter Field:=1, Criteria1:="=" + Type

Range("B1").Select
ActiveSheet.Range("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ActiveSheet.Range("C1"), Unique:=True

但是,这将绕过A列的过滤,并将返回B列的所有唯一名称。

如何将Autofilter或AdvancedFilter与多个标准一起使用?

谢谢,

1 个答案:

答案 0 :(得分:3)

你可以像下面那样

Range("C1").Value = Range("B1").Value '<~~ heading of the column to get unique values from
Range("D1:D2") = Application.Transpose(Array(Range("a1").Value, myType)) '<~~ filtering criteria (temporarily used)

Range("A:A").SpecialCells(xlCellTypeConstants).Resize(, 2).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("D1:D2"), CopyToRange:=ActiveSheet.Range("C1"), Unique:=True

Range("D1:D2").ClearContents  '<~~ clear filtering criteria temporarily used cells

如您所见,实际工作仅在一行中完成,前面有两个&#34;设置&#34;行(列&#34; C&#34;标题和过滤标准临时单元格),后面跟着一行删除临时单元格。

如果你不能写入范围(&#34; D1:D2&#34;),你可以使用任何其他范围(假设它是一列1列2)并相应地改变代码。

或者您可以使用&#34;复制&#34;方法

With Range("A:A").SpecialCells(xlCellTypeConstants).Resize(, 2)
    .AutoFilter Field:=1, Criteria1:="=" + myType
   .Columns(2).SpecialCells(xlCellTypeVisible).Copy
    With .Columns(3)
        .PasteSpecial xlPasteValues
        .RemoveDuplicates Columns:=Array(1), Header:=xlYes
    End With
    .AutoFilter
End With