【问题标题】:How to use sumif with arrayformula?如何将 sumif 与 arrayformula 一起使用?
【发布时间】:2021-02-20 18:44:37
【问题描述】:

我在使用数组公式时遇到问题。

我在 Col A 和 B 有一些数据,SUMIF($A$2:$A2,"ABC",$B$2:$B2) 工作得很好,但我想使用 arrayformula 所以我不不得不把公式往下拉。

但是使用 ArrayFormula(SUMIF($A$2:$A2,$C$1,$B$2:$B2)) 根本没有做任何事情,有什么办法可以让它工作吗?我不知道怎么做。

【问题讨论】:

    标签: google-sheets google-sheets-formula array-formulas


    【解决方案1】:

    这是另一个选项(例如,在 E2 中):

    =ArrayFormula(IF(A2:A="",,SUMIF(ROW(A2:A)*IF(A2:A="ABC",1,9^9),"<="&ROW(A2:A),B2:B)))

    工作原理:

    IF(A2:A="",, 表示“如果 A2:A 中的某行为空白,则对该行不执行任何操作。”

    ROW(A2:A)*IF(A2:A="ABC",1,9^9) 将根据每行的行号创建一个数字:对于匹配“ABC”的行,行号本身乘以 1(再次产生行号,因为任何乘以 1 的都是自身)或乘以9^9(即,某个巨大的数字,这将是所有“ABC”行的结果)。

    这将与条件"<="&ROW(A2:A) 匹配。因此,只有匹配“ABC”的“每一行”或“每一行”之前的行才会产生结果。

    【讨论】:

    • 感谢您的解释!这个公式很好用,现在我只需要研究这个公式就可以理解它了。
    • 不客气。并感谢您标记为“最佳答案”。它让这里的其他志愿者一目了然地知道哪些问题已得到解决,并帮助未来的网站访问者更轻松地找到他们自己类似问题或问题的答案。
    【解决方案2】:

    在 E2 中尝试:

    =INDEX(IF(A2:A="ABC",MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW(
     INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW(
     INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))))*(
     INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE(
     INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), 
     INDIRECT("B2:B"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW(
     INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))^0),))
    

    【讨论】:

    • 感谢公式,但它似乎不起作用,我得到的结果不正确:50、60、120、150、230、300。
    • 感谢您的更新!它现在按预期工作,erik 和您的答案之间的唯一区别是 erik 的答案将填充每一行,而您的答案将使用空白单元格保留不变的值。两者在不同的情况下都很有用,再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2022-08-21
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多