我有一个具有单元格内容{“ Q15”,“ R15”,“ S15”}的excel单元格A1。
如何在Excel的数组公式中使用A1单元格?
我用了这个公式:
=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以便所得公式包含实际数组?
答案 0 :(得分:0)
使用SUMPRODUCT()
代替:
=SUMPRODUCT(($D$2:$D$838<>"NA")*(SEARCH($E$2:$E$838,A1)>1))
这对您有用吗?
答案 1 :(得分:0)
您这里遇到的问题是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(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,“”“,”“,”,REPT(“”,99)),“ {”“”,“”),“”“}”,“” ),99 * Row(A1:INDEX(A:A,1 + Len(A1)-Len(SUBSTITUTE(A1,“,”,“”))))-98,60))
将{"Q15","R15","S15"}
转换为Q15
,R15
和S15
,以99个空格隔开。然后,它计算A1
中有多少个逗号,并且(多次)占用60个字符(第一次从位置1开始,第二次从位置100开始,再到位置199等)并修剪空格-这给出了一个数组{"Q15","R15","S15"}
因此,正如Tim Williams在评论中所说,使用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)))