【发布时间】:2012-05-14 02:31:37
【问题描述】:
使用 Excel 和 VBA,我想要一些关于如何严格使用 VBA 最好地过滤数组中的数据的建议(就像使用数据透视表一样)。我正在创建一个用户窗体,它将根据当前现有数据做出一些数据决策。我可以想象如何做得足够好,但我并不精通 VBA 编程。
这是一个例子
A B C
bob 12 Small
sam 16 Large
sally 1346 Large
sam 13 Small
sally 65 Medium
bob 1 Medium
要获取数组中的数据,我可以使用
Dim my_array As Variant
my_array = Range("A1").CurrentRegion
现在,我熟悉循环遍历 2D 数组,但我想知道:过滤 2D 数组数据最有效的方法(无需一次又一次地循环遍历数组)?
例如,我如何获取会说获取这种数据:
data_for_sally As Variant 'rows with sally as name in ColA
data_for_sally_less_than_ten As Variant ' all rows with sally's name in ColA and colB < 10
data_for_all_mediums as Variant ' all rows where ColC is Medium
建议?我可以用一堆自定义函数和循环来解决这个问题,但我认为必须有更好的方法。谢谢。
【问题讨论】:
-
请注意,第 4 个示例不是过滤器,而是对数组的操作,这可能会导致不同的答案。
-
不确定在 VBA 中没有循环/自定义函数是否可行。您说您有其他语言的经验,您是否考虑过 VSTO/.NET 实现然后使用 LINQ?
-
对于 VBA 中的这种类型的事情,我将使用断开连接的 ADO 记录集。它为您提供排序和过滤功能。
-
@assylias 好点,删除了那个例子; .@lori_m 实际上,我是按照 Python 的思路思考的; .@Tim Williams 我得研究一下,以前没听说过。
标签: arrays excel vba multidimensional-array filter