如何使用 Evaluate 方法计算数组公式

How to evaluate array formulae with the Evaluate method

提问人:Greedo 提问时间:8/2/2017 最后编辑:Greedo 更新时间:8/2/2017 访问量:1712

问:

在 VBA 中,和方法都可用于返回数组:Evaluate()[]

Dim i As Variant
i = Evaluate("{1,2;3,4}")
i = [{1,2;3,4}]

两行都设置为包含数字 1-4 的 2D 数组。一个附加功能是返回数组的 R1C2 索引元素(即 2 - 同时错误)iEvaluate(...)(1,2)[...](1,2)

我想知道是否有任何语法可以以相同的方式评估数组返回工作表函数,例如

i = Evaluate("LEN(A1:A5)>3") 'or similar like [{LEN(A1:A5)>3}]

它应该返回一维数组,就像我在 & 中有超过 3 个字符的文本一样,但事实并非如此。{False,False,False,True,True}A4A5

如果没有,是否有另一种计算数组公式以返回完整数组的一行方法?我正在寻找任何提供最小字符数的方法。

数组 VBA Excel excel 公式

评论

0赞 SJR 8/2/2017
i = Evaluate("ROW(A1:A5)>3")
0赞 Greedo 8/2/2017
@SJR,奇怪的是,这有效,但事实并非如此。我希望它返回一个数组,但它只返回一个布尔值,我是否忽略了一些歧义?i = Evaluate("LEN(A1:A5)>2")
2赞 SJR 8/2/2017
确实很奇怪。我不知道为什么,但有些功能需要“强制”以正确的方式工作,例如这有效i = Evaluate("IF(ROW(A1:A5),LEN(A1:A5)>2)")
0赞 Greedo 8/2/2017
@SJR嗯,这似乎有问题,也许它与 VBA 内置函数冲突,因为我注意到它也没有按预期工作。Evaluate(ISERROR(A1:A5))
0赞 SJR 8/2/2017
你到底想达到什么目的?

答:

3赞 Florent B. 8/2/2017 #1

若要返回数组,需要使用支持数组的函数作为结果。

通常与VBA一起使用的函数是INDEX,因为它不会改变值:

Dim data()
data = Evaluate("INDEX(LEN(A1:A5)>3,)")

评论

1赞 Vityata 8/2/2017
有趣的是,根据输入,它给出了一维或二维数组。例如 是有 2 个维度的,是有 1 个维度的。A1:A5A1:G1
0赞 Axel Richter 8/3/2017
A1:A5是列向量,而是行向量。因此,对不同阵列结果的惊讶应该不会那么大。A1:G1