簡體   English   中英

在excel單元格中定義數組,並在excel數組公式中使用該單元格

[英]define array in excel cell and use that cell in excel array 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以使得結果公式包含實際數組?

你在這里遇到的問題是Excel正在從A1讀取{"Q15","R15","S15"}作為字符串( ="{""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 *行(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"}

因此,正如蒂姆·威廉姆斯在評論中所說的那樣,使用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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM