VBA中AdvancedFilter取唯一值异常:首个值重复出现
AdvancedFilter提取唯一值首项重复的问题解决
问题根源
你遇到的首项重复问题,核心原因是AdvancedFilter默认将源区域的第一行识别为表头:
- 你的源区域是
ws2.Range("A2:A" & LR2),它会把A2的值(示例中的AAA)当成表头,执行时先把这个"表头"复制到目标单元格B2; - 随后从A3到A&LR2的数据中提取唯一值,其中又包含AAA,于是会在B3再复制一次,最终导致首项重复。
另外代码里的CopyToRange:=Range("B2")没有指定工作表,若当前活动工作表不是ws2,会导致结果写入错误的表格,这也是需要修正的细节。
修复方案
根据你的实际表头情况,选择以下两种方案之一:
方案1:A列有表头(A1为列标题)
将源区域扩展至包含表头A1,同时目标区域指定到B1(对应表头位置):
ws2.Range("A1:A" & LR2).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws2.Range("B1"), Unique:=True
执行后,B1会复制A1的表头,B2开始是A列数据的唯一值,不会重复。
方案2:A列无表头(从A2开始是数据)
显式指定Header:=xlNo,告诉AdvancedFilter源区域没有表头,全部是数据行:
ws2.Range("A2:A" & LR2).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws2.Range("B2"), Unique:=True, Header:=xlNo
这样AdvancedFilter会把A2到A&LR2的所有内容当作数据,提取唯一值后从B2开始写入,不会出现重复。
内容的提问来源于stack exchange,提问作者Saadia Surti
相关产品推荐
相关产品推荐

