簡體   English   中英

Excel,Sumproduct,{}中的多個條件搜索

[英]Excel, Sumproduct, multiple conditions search in {}

我在互聯網(包括stackowerflow)上遇到了幾條這樣的代碼

=SUMPRODUCT((A1:A10="Marketing")*(B1:B10={"North","South"})*(C1:C10))

搜索條件整齊地放在{} 我要搜索28種這樣的條件,因此我正在尋找一種使公式更易於閱讀的方法。 如果嘗試,我會得到N / A。

我有想念的招嗎?

我知道可以將其寫為(B1:B10="North") + (B1:B10="South")但要包含28個項目,它將變得很長。

先感謝您

EDIT1 :(忽略)

嘗試了Axel的建議

簡單的例子

        -   A   B   C   D
        1       1   2   3
        2   1   2   2   3
        3   2   4   4   6
        4   3   6   6   9



 =SUMPRODUCT((A2:A4={2,3})*(B2:D4))

    Returns Sumproduct(({1,2,3}={2,3})*(B2:D4)) -> I still get N/A for last column when you continue in process

    Same for  
    =SUMPRODUCT((A2:A4=A6:B6)*(B2:D4))
    where A6:B6 is list of conditions

    or 

    =SUMPRODUCT((A2:A4=testrange)*(B2:D4))

我試圖將所有條件都放在公式{"case1","case2",...} ,但無法使其正常工作。

編輯2:好的,我現在看到了區別。 初始公式逐列

我要解決的問題

Column A- list of accounts, I need to find 28 of them 
Row 1 - months (conditions varies)
Range B2:AA462 - values 

我可以用(A2:A462="account1")+(A2:A462="acount2")...最多寫28種情況,但是我在問是否有一種更簡單的書寫方法

類似於初始A2:A462={"North","South"}

就像是

=Sumproduct((A2:A462={"account1","account2",...})*(B1:AA1="June")*(B2:AA462))

有什么辦法可以這樣寫嗎?

編輯4:

幾周后,受到Axel的投入啟發

=SUMPRODUCT(MMULT(--(A2:A7=G1:J1),ROW(1:4)/ROW(1:4))*(B1:E1=G4)*B2:E7)

可以長成

{=SUMPRODUCT(MMULT(--(A2:A7=TRANSPOSE(namedrange)),ROW(OFFSET(A1,0,0,COUNTA(namedrange)))/ROW(OFFSET(A1,0,0,COUNTA(namedrange))))*(B1:E1=G4)*(B2:E7))}

好的,命名范圍是在列中包含條件,這是保留要過濾條件的列表的更自然的方式。 MMULT現在也很靈活,它可以計算條件數並調整要乘以的行數。 整個公式必須作為數組公式輸入。

{"North","South"}是行向量的數組文字。 這意味着好像“北”和“南”被放置在並排的單元格中。 因此,如果“ North”在E1而“ South”在F1 ,則公式也可以是:

=SUMPRODUCT((A1:A13="Marketing")*(B1:B13=E1:F1)*C1:C13)

使用更多標准,可能是:

=SUMPRODUCT((A1:A13="Marketing")*(B1:B13=E1:H1)*C1:C13)

由於B1:B13是列向量,因此准則必須位於行向量(一行,多列)中,這一點很重要。


回答您的編輯2:

該方法:

=SUMPRODUCT(((A2:A462="account1")+(A2:A462="account2")+...+(A2:A462="account28"))*(B1:AA1="June")*B2:AA462)

,它將起作用(A2:A462={"account1","account2",...,"account28"}) 后者無法工作,因為它創建了一個461行28列的矩陣,而工作的((A2:A462="account1")+(A2:A462="account2")+...+(A2:A462="account28"))僅是一列中461行的向量。

等效項可能是:

=SUMPRODUCT(MMULT(--(A2:A462={"account1","account2",...,"account28"});ROW(1:28)/ROW(1:28))*(B1:AA1="June")*B2:AA462)

如果“ account1”,“ account2”,...,“ account28”位於AC1:BD1則:

=SUMPRODUCT(MMULT(--(A2:A462=AC1:BD1);ROW(1:28)/ROW(1:28))*(B1:AA1="June")*B2:AA462)

這是在做什么 它使用MMULT通過將矩陣與28行的行向量乘以1來將461行和28列的矩陣轉換為461行的向量。

因此,如果矩陣每一行的28列之一中有1,那么作為結果的461行向量的行值也將有1。

例:

在此處輸入圖片說明

H3公式:

=SUMPRODUCT(((A2:A7=G1)+(A2:A7=H1)+(A2:A7=I1)+(A2:A7=J1))*(B1:E1=G3)*B2:E7)

H4公式:

=SUMPRODUCT(MMULT(--(A2:A7=G1:J1),ROW(1:4)/ROW(1:4))*(B1:E1=G4)*B2:E7)

為了完整SUMPRODUCT ,我認為還有一種在SUMPRODUCT中使用SUMIF的方法,這是更好的方法。

因此, H4的公式為:

=SUMPRODUCT(SUMIF(A2:A7,G1:J1,INDEX(B2:E7,0,MATCH(G5,B1:E1,0))))

您的公式將是:

=SUMPRODUCT(SUMIF(A2:A462,AC1:BD1,INDEX(B2:AA462,0,MATCH("June",B1:AA1,0))))

暫無
暫無

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

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