2017-08-02 87 views
8

在VBA中,Evaluate()[]方法都可以用于返回数组:如何评价数组公式与评估方法

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

两条线设置i是含有数字1-4的2D阵列。一个附加功能是,Evaluate(...)(1,2)返回数组的R1C2索引元素(即2 - [...](1,2)同时错误)

我想知道是否有用于以相同的方式评价的阵列返回工作表功能的任何语法,例如

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

它应该会返回一维数组一样{False,False,False,True,True}如果我有文字超过3个字符在A4 & A5,但事实并非如此。

如果没有,是否还有另一种评估数组公式的方法来返回完整数组?我正在寻找能够提供最小字符数的方法。

+0

'I =评估( “ROW(A1:A5)> 3”) ' – SJR

+0

@SJR,奇怪的是,这工作,但'我=评估(“LEN(A1:A5)> 2”)'不。我希望能够返回一个数组,但它只返回一个布尔值,是否存在我忽略的一些模糊性? – Greedo

+2

确实很奇怪。我不确定为什么,但某些功能需要被“强制”以正确的方式工作,例如这工作'我=评估(“IF(行(A1:A5),LEN(A1:A5)> 2)”)' – SJR

回答

3

要返回一个数组,您需要使用一个支持数组的函数。

通常与VBA用于将表达式评估为一个阵列的功能是INDEX,因为它不改变值:

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

有趣的是,根据输入,它给出了一维或二维数组。例如。 'A1:A5'有2个维度,'A1:G1'有一个。 – Vityata

+0

A1:A5是列向量,而A1:G1是行向量。所以对不同阵列结果的惊喜应该不会那么大。 –