在excel单元格中定义数组,并在excel数组公式中使用该单元格

时间:2019-05-30 05:03:01

标签: excel excel-formula

我有一个具有单元格内容{“ 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以便所得公式包含实际数组?

2 个答案:

答案 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""}",而不是数组。

可以使用MIDTRIM绕过这个问题,以通过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"}转换为Q15R15S15,以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)))