【问题标题】:How do I get a list of unique values from a column in Excel VBA?如何从 Excel VBA 中的列中获取唯一值列表?
【发布时间】:2014-01-11 05:33:56
【问题描述】:

我浏览过许多过滤唯一值的不同文章;但是几乎所有这些都复制到一个新位置/手动循环整个列,我想避免这样做。

我的要求是根据 G2 列单元格的值(例如,单独文件中的所有房屋、所有公寓、所有公寓等)将行与单独工作簿中的单个列分开。 我正在尝试使用 Excel VBA 中的 AdvancedFilter 将每个唯一值提取到一个数组中,然后遍历这些唯一值以查找所有相应的列值。我不明白 AdvancedFilter 是如何工作的。

xlFilterCopy 和 copyToRange 将唯一值列表复制到指定范围。

xlFilterValues 到底是如何工作的?参考资料说 xlFilterValues “过滤数据”。但是我如何获得这些值?它是否返回某种对象?在调试中,它似乎只是给了我一个布尔值!

为什么会有如此奇怪的记录!感谢大家的帮助。

PS:如果您有更好的方法来完成我需要的操作而无需高级过滤器,请告诉我。

With sheet
.Range(orgLevelLetter & "2", .Cells(.Rows.Count, orgLevelLetter).End(xlUp)).AdvancedFilter xlFilterInPlace, , , True
End With

【问题讨论】:

    标签: vba excel filter unique-values


    【解决方案1】:

    您获得这些值是因为您指定了CopyToRange,因此您知道这些值的去向。因此,无论您只是用作参考,您现在都可以使用它来操作它。

    如果您不想使用CopyToRange,则调用会返回值,因为AdvancedFilter 返回一个范围对象。因此,您可能希望将 .Range 语句分配给您已经初始化的范围。

    另一种方法是这样使用 With 语句:

    With sheet.Range(orgLevelLetter & "2", _
         .Cells(.Rows.Count,orgLevelLetter).End(xlUp)).AdvancedFilter(xlFilterInPlace, , , True)
    
    <content here>
    
    End With
    

    【讨论】:

    • 这听起来与“With”声明的正确性。但是在我编写的示例中,我没有使用 copyToRange,它仍然不会返回一个范围对象。我最终根本没有使用 AdvancedFilter,而是为该列中存在的每个唯一值打开了一个新的 Excel 工作簿,并将现有行复制到该新工作簿中。最后我关闭了所有的工作簿!对于我知道的大量不同的值似乎效率低下,但由于只有少数,因此它是最简单的代码。
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多