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