将Excel数组常量传递给VBA函数

时间:2019-06-19 16:57:08

标签: excel vba

我有一个单元格,其值为数组常量, 例如,单元格A1设置为={1,2,3,4,5,6}

然后我在VBA中定义了一个函数:

Function MyFunc(Data)
MyFunc = Data.Rows.Count
End Function

我希望函数在可以=MyFunc(A1)的情况下返回数组的长度(6),但是使用调试器,我发现函数接收的'Data'变量仅包含该数组的第一个元素。 Data.Rows.Count的值为1,而TypeName(Data)的值为“ Range”

3 个答案:

答案 0 :(得分:5)

另一种方法:

Function myFunc(Data)
    myFunc = UBound(Evaluate(Data.Formula))
End Function

答案 1 :(得分:3)

我不确定您的用例是什么,但是我认为您可以在这里使用Split

Function MyFunc(ByVal Data As Range) As Long
    Dim x
    x = Split(Data.Formula, ",")
    MyFunc = UBound(x) + 1
End Function

enter image description here

显然,这可以变得更健壮(例如处理多单元输入),但我认为它可以使您朝着正确的方向前进。

答案 2 :(得分:3)

可能是

Function MyFunc(data As Range)
Dim x

x = Split(Mid(data.Formula, 3), ",")
MyFunc = UBound(x) + 1
End Function