определить массив в ячейке Excel и использовать эту ячейку в формуле массива Excel - PullRequest
0 голосов
/ 30 мая 2019

У меня есть ячейка А1 Excel с содержимым ячейки {"Q15", "R15", "S15"}.

Как использовать ячейку А1 в формуле массива в Excel?

Я использовал эту формулу:

=SUM(COUNTIFS('sheet1'!$D$2:$D$838,"<>NA",'sheet1'!$E$2:$E$838,{"Q15","R15","S15"}))

вышеприведенная формула работает отлично.

, но при замене на A1 она дает 0. И формула становится

=SUM(COUNTIFS('sheet1'!$D$2:$D$838,"<>NA",'sheet1'!$E$2:$E$838,A1))

Какможно использовать A1, чтобы полученная формула содержала фактический массив?

1 Ответ

0 голосов
/ 30 мая 2019

Проблема в том, что Excel читает {"Q15","R15","S15"} из A1 как строку (="{""Q15"",""R15"",""S15""}"), а не как массив.

Вы можете обойти это, используя MID и TRIM, чтобы искусственно разделить строку с помощью SUMPRODUCT

=SUMPRODUCT(COUNTIFS('sheet1'!$D$2:$D$838, "<>NA", 'sheet1'!$E$2:$E$838, TRIM(MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, """,""", REPT(" ", 99)), "{""", ""), """}", ""), 99*ROW(A1:INDEX(A:A, 1+LEN(A1)-LEN(SUBSTITUTE(A1, ",", ""))))-98, 60))))

"Волшебный" бит здесь - довольно запутанная строка ниже

TRIM (MID (ЗАМЕНА (ЗАМЕНА (ЗАМЕНА (A1, "" "," "", REPT ("", 99)), "{" "", ""), "" "}", "" ), 99 * Строка (А1: ИНДЕКС (A: 1 + Len (А1) -Len (ПОДСТАВИТЬ (А1, "", ""))) - 98,60)) * * 1016

Превращает {"Q15","R15","S15"} в Q15, R15 и S15, разделенных 99 пробелами. Затем он подсчитывает, сколько запятых в A1, и (столько раз) занимает 60 символов (начиная с позиции 1 в первый раз, затем с позиции 100 во второй раз, затем с позиции 199 и так далее) и обрезает пробелы - это дает массив {"Q15","R15","S15"}

Так что, как сказал Тим Уильямс в комментариях, вам лучше использовать VBA. Базовая пользовательская функция для разделения массива будет работать так:

Public Function SplitArray(Text As String) As Variant
    'If we error, show #NA!
    SplitArray = CVErr(xlErrNA)
    On Error GoTo FunctionErred
    'Split the array
    If Left(Text, 1) = "{" And Right(Text, 1) = "}" Then
        SplitArray = Split(Replace(Mid(Text, 2, Len(Text) - 2), """", ""), ",")
    Else
        SplitArray = Text
    End If
FunctionErred:
End Function

Предоставление

=SUM(COUNTIFS('sheet1'!$D$2:$D$838,"<>NA",'sheet1'!$E$2:$E$838,SplitArray(A1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...