4

就代码而言,这似乎很简单,但我仍然卡在#VALUE 上。

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

但是,我想用作参数的实际数组包含在另一个单元格中(例如 ={3,5})。因此,我想将该函数称为 =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 时,单元格值仅显示 3 ——因此,我假设单元格因此实际上包含一个数组。不是这样吗?如果不将其存储为分隔字符串并将其转换为数组,则单元格是否不可能包含数组作为其值(或从其他单元格中引用这些数组)?

编辑:已经有几年了,所以也许我可以评论一下自从我发布这个问题以来我尝试过的道路。最初,我尝试在单元内 JSON 结构上进行操作,并取得了一定的成功。从那时起,我还发现最近的 Power Query(自 Excel 2016 原生集成以来)确实在其“单元格”中支持列表结构(以及其他),并且实际上支持相关功能。我不再使用这些中的任何一个(现在对 Spark 更感兴趣),但希望这可能有助于其他人偶然发现这个问题。

4

2 回答 2

2

我不认为你有直接的方法......因为你想将单元格值转换为数组

希望能帮助到你!!!

于 2012-08-12T07:03:40.950 回答
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
于 2012-08-14T17:14:17.373 回答