Range()。AdvancedFilter忽略第一行?

时间:2017-04-21 07:43:31

标签: excel vba excel-vba

TLDR:排序算法忽略(就唯一性而言)并只复制第一个值?

以下代码

Sub test()

    ActiveSheet.Range("A1:A7").AdvancedFilter _
    Action:=xlFilterCopy, CopyToRange:=ActiveSheet.Range("B1"), _
    Unique:=True

End Sub

过滤以下行:

A1 to A7:
1
1
2
3
4
1
2

为:

1
1
2
3
4

我尝试使用文本,不同的起始行,在适当的位置进行排序而不是复制到另一个范围,但在我看来好像第一个值只是被复制而不是与任何有关唯一性的事物进行比较。

看起来应该很简单,但我不知道我在这里做错了什么。 main page这里没有提到任何内容。 有人可以重现这种行为吗?

结果应该是范围A1:A7被唯一过滤(排序顺序并不重要):

1
2
3
4

2 个答案:

答案 0 :(得分:1)

您可以在B栏上使用RemoveDuplicates

ActiveSheet.Range("A1:A7").Copy ActiveSheet.Range("B1")
ActiveSheet.Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo

当然,没有必要使用ActiveSheet,而且最好使用完全限定的Worksheets

With Worksheets("YourSheetName")
    .Range("A1:A7").Copy .Range("B1")
    .Range("B1:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo
End With

答案 1 :(得分:1)

直接回答问题,因为我只是花了一些时间自己调试。 您必须在要过滤的范围内有一个“标题”行。 这不是bug,而是 AdvancedFilter的要求。

除了此页面之外,我没有其他来源,但是我可以确认OP的结果和评论是有意义的,并支持此答案。如果有人对此事有官方链接/文档,请分享!