Проблема в том, что 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)))