3

我在单元格 A1 中定义了一个数组常量 {1,2,3}。这显示为“1”(数组中的第一个值)。

我想让公式 SUM(A1) 返回 6。但是,SUM 使用 A1 作为单单元数组,而不是 A1 中包含的数组常量 - 因此 SUM(A1) 返回 1。

同样,我希望 AVERAGE(A1) 返回 1 而不是 2。

简单来说,如何让 SUM(A1) 返回与 SUM({1,2,3}) 相同的值?

我不想让数组常量成为命名引用,因为我为每一行定义了一个不同的数组常量。

感觉就像我被困在 C++ w/oa 取消引用的方式中!

4

3 回答 3

2

这个简短的 VBA UDF 应该可以完成这项工作。

Public Function ToArray(rngCell As Range) As Variant

    Dim sFormString As String
    sFormString = rngCell.Formula

    Dim adReturn() As Double
    ReDim adReturn(1) As Double
    If Not Len(sFormString) - 3 > 0 Then
        ToArray = adReturn
        Exit Function
    Else
        sFormString = Mid(sFormString, 3, Len(sFormString) - 3)
    End If

    Dim vTest As Variant
    vTest = Split(sFormString, ",")

    ReDim adReturn(LBound(vTest) To UBound(vTest)) As Double

    Dim iArrayCounter As Integer
    For iArrayCounter = LBound(vTest) To UBound(vTest)
        adReturn(iArrayCounter) = vTest(iArrayCounter)
    Next iArrayCounter

    ToArray = adReturn

End Function

(例如,如果带有大括号的字符串在单元格 b2 中,那么您需要在另一个单元格中写入 =sum(toarray(b2)) )

于 2009-08-10T19:42:46.307 回答
1

单元格仅限于单个数字、字符串、逻辑值或错误值。单个单元格不能包含数组。当在单个单元格公式中计算公式“={1,2,3}”时,单元格将仅获取数组中的第一个值。

于 2009-08-10T22:50:50.153 回答
0

您可以通过像这样定义名称(例如:test)来使数组常量成为命名数组常量:

={1,2,3}

然后引用名称

=SUM(test)
于 2009-08-10T19:28:41.950 回答