Excel:通过单元格引用将数组参数传递给公式

时间:2012-08-12 06:44:16

标签: arrays excel excel-vba excel-formula vba

代码方面看起来很简单,但我仍然陷入#VALUE。

我创建了一个自定义Excel函数,将数组作为参数,当使用时本身工作正常:= countArray({3,5})将给出2(为了说明,实际公式不同)。

但是,我想用作参数的实际数组包含在另一个单元格中(例如= {3,5})。因此,我想调用函数as = countArray(A1),使用对包含我想要用作参数的数组的单元格的引用,而不是直接包含数组,所以我可以使用一个和相同的公式。

有办法做到这一点吗?

Cell formulas:
A1: ={3,5}
B1: =countArray({3,5})
B2: =countArray(A1)

Function countArray(arr()) As Integer
countArr = UBound(arr)
End Function

B1中的公式有效,B2中的公式没有。 至于A1的内容,当这样放入Excel时,Excel只显示3个单元格值 - 因此我假设单元格实际上包含一个数组。 那不是这样吗?单元格是否不可能将数组作为其值(或从其他单元格中引用它们)而不将其存储为分隔字符串并将其转换为数组?

编辑:已经有几年了,所以也许我可以在我发布这个问题的路上发表评论。最初,我试图在单元内JSON结构上进行操作,取得了一定的成功。从那时起,我还发现最近的Power Query(自Excel 2016本机集成以来)确实支持其'单元'中的列表结构(以及其他),并且事实上支持related functions。我不再使用任何这些(现在对Spark更感兴趣),但希望这可能会帮助其他人绊倒这个问题。

2 个答案:

答案 0 :(得分:2)

我不这么认为你有直接的方式......正如你想要Convert Cell Value to Array

希望它有所帮助!!!

答案 1 :(得分:1)

你可以试试这个:

Function countarray(arr As Variant) As Long
    If typename(arr) = "Range" Then
        countarray = UBound(Evaluate([arr].Formula))
    Else
        countarray = UBound(arr)
    End If
End Function