我在互联网上发布了几个帖子(包括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现在是灵活的,并计算条件数并调整行数乘以。 必须将整个公式作为数组公式输入。
答案 0 :(得分:0)
{"North","South"}
是行向量的数组文字。这意味着它就好像“北”和“南”被放置在一行中的并列单元格中。因此,如果“北”位于E1
而“南方”位于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
将461行和28列的矩阵转换为461行的向量,方法是将矩阵与28行的行向量相乘1.
因此,如果矩阵的每一行中有28列中的一列,那么也会有一个1作为461行的结果向量的行值。
示例:
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)
要完成,在SUMIF
内使用SUMPRODUCT
也会有一种方法,在我看来这是更好的方法。
所以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))))