获取唯一值的高级过滤器功能仅返回列中的第一个记录

时间:2014-10-27 01:04:20

标签: excel excel-vba vba

我正在尝试编写一些代码来从一列数据中获取唯一值列表,并使用高级过滤器将结果复制到另一列中。我最初使用“记录宏”功能得到了这个代码,当我这样做时它起作用很好,但是在更改工作表之后它最初选择代码现在似乎只返回列中的第一个记录。这是代码:

Sheets("4").Select
Columns("BA:BA").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
    "BL:BL"), unique:=True

最终,我需要同时在一堆不同的工作表上运行此代码,因此需要选择整列而不是更具体的范围,因为BA中的数据长度将在每个工作表中发生变化。我不知道为什么但它似乎工作时,它在一张纸上运行,然后在最初选择的纸张在代码中手动更改时不起作用(并且确实存在名为“4”的纸张)。更改后,只有BA中的第一条记录在BL中返回,而不是所有唯一记录的列表。

1 个答案:

答案 0 :(得分:0)

尝试使用Range而不是Columns。我测试了它并且Columns失败了(列表中有名字和数字),Range工作了。此外,您可以跳过.Select,直接转到移动数据。

在此示例中,有一个输入框,提示输入工作表名称。如果碰巧只是一个数字,那很好。它将被视为sheetName中的字符串。

Dim sheetName As String

sheetName = Application.InputBox("Enter Sheet Name")

Sheets(sheetName).Range("E:E").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Sheets(sheetName).Range("O:O"), unique:=True