[英]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.