是否有Excel的编程接口';s数组公式?

是否有Excel的编程接口';s数组公式?,excel,vba,array-formulas,Excel,Vba,Array Formulas,例如,假设我有 {={1,2,3,4,5}} 在牢房里。有没有办法找出数组中有多少个元素,以及这些元素是什么 现在实现了@chris neilsen的想法,我得到了一个VBA函数,如下所示 Function rinfo(r As Range) As String With r.CurrentArray rinfo = .Address & ", " & .Rows.Count & ", " & .Columns.Count & "

例如,假设我有

{={1,2,3,4,5}}
在牢房里。有没有办法找出数组中有多少个元素,以及这些元素是什么

现在实现了@chris neilsen的想法,我得到了一个VBA函数,如下所示

Function rinfo(r As Range) As String
    With r.CurrentArray
        rinfo = .Address & ", " & .Rows.Count & ", " & .Columns.Count & ", " & .Value & ", " & .Value2
    End With
End Function
然而,来自它的数据看起来并不乐观,即

$A$29, 1, 1, 1, 1

如果Rows.Count和Columns.Count正在计算工作表中使用的行和列,则它们是有意义的。但作为数组公式中数据的指示,如果
中的编号,则
cl
是一个
范围
,并且被设置为数组公式的一部分,则

cl.CurrentArray
返回包含数组公式的范围

如果示例公式位于单元格
A1:E1
中,并且activecell是单元格A1中的任意一个。。E1,然后运行

Sub zx()
    MsgBox "ref = " & ActiveCell.CurrentArray.Address
End Sub
将返回一条消息
ref=$a$1:$E$1


您可以使用
.Rows.Count
.Columns.Count
获取大小,使用
.Value
获取值

您的公式只占用一个单元格,而单元格只能包含标量值,因此,在计算完单元格后,它将包含1。
但您可以从VBA计算公式,从而得到一个数组结果。如果你的公式是A1,那么

Dim vArr As Variant
vArr = Evaluate(Range("a1").Formula)

将导致vArr包含4个数字的4个变体的数组。
求值方法有几个“怪癖”:有关详细信息,请参阅。

从何处开始?VBA,还是另一个公式?@chris neilsen的解决方案效果很好。对于
{={1,2,3,4,5}
示例,如果确实有1x5数组,那么
.Value
.Value2
方法应该抛出类型不匹配错误,因为它们不适用于数组。。。但是它们没有,这使我认为您的数组在工作表上的大小是1x1。@Jean当出于某种原因从udf调用时
。CurrentArray
不返回整个范围,只返回第一个单元格,因此示例中没有错误。这就是为什么我说“在潜艇里”。更奇怪的是,如果函数是从子函数调用的,它确实会返回一个数组,示例将出错。啊哈,现在我明白了这个问题+1.