Константы массива в Excel - PullRequest
       32

Константы массива в Excel

3 голосов
/ 10 августа 2009

У меня есть константа массива, определенная в ячейке 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 ++ без способа разыменования!

Ответы [ 3 ]

2 голосов
/ 10 августа 2009

Этот короткий 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)))

1 голос
/ 11 августа 2009

Ячейка ограничена одним числом, строкой, логическим значением или значением ошибки. Одна ячейка не может содержать массив. Когда формула "= {1,2,3}" вычисляется в одной формуле ячейки, ячейка получит только первое значение из массива.

0 голосов
/ 10 августа 2009

Вы можете сделать константу массива константой именованного массива, определив имя (например: test), например так:

={1,2,3}

затем укажите имя

=SUM(test)
...