【问题标题】:Google sheets ARRAYFORMULA + SUMIFS when working with dates使用日期时使用 Google 表格 ARRAYFORMULA + SUMIFS
【发布时间】:2023-03-07 21:25:01
【问题描述】:

我想弄清楚在处理日期时如何使用 arrayformula + SUMIFS

这是一个演示表

https://docs.google.com/spreadsheets/d/1ttoA9EfMdYJHolcRVrLfpDA2GqYtt19gJruDogzGSf8/edit?usp=sharing

我需要什么:

在 O 列中,我需要客户在付款日期

尝试使用arrayformula + sumifs 不展开

尝试使用 arrayformula + sumif 并使用 & 符号不起作用可能是因为我只需要 when is

={"overdue";ARRAYFORMULA(IF(LEN(A2:A), (SUMIF(R:R&A:A,Q:Q&"<"&TODAY(),V:V))-M2:M ,))}

我正在寻找替代方案,我们将非常感谢任何帮助

谢谢!

【问题讨论】:

  • 如果一个数组公式没有展开,通常意味着它下面的单元格不为空。您希望看到什么结果?

标签: google-sheets array-formulas


【解决方案1】:

我在您的示例电子表格中添加了一个新工作表(“Erik 帮助”)。以下数组公式在 O2 中:

=ArrayFormula({"Overdue"; IF(A2:A="",, MMULT( TRANSPOSE(U2:U) * (TRANSPOSE(Q2:Q)=A2:A) * (TRANSPOSE(P2:P)&lt;=TODAY() ),SEQUENCE( ROWS(U2:U), 1, 1, 0)) - M2:M)})

大括号{}之间形成一个虚拟数组。

首先设置标题(可以根据需要在公式中更改)。

如果 A2:A 中的任何单元格为空,则 O2:O 中的相应单元格也将为空。

MMULT 执行 Matric MULTiplication。在这里,我用它来将 U2:U 中金额的 TRANSPOSEd 版本乘以两个 TRANSPOSEd 条件语句(每个条件语句将导致 TRUE 的 1 或 FALSE 的 0)。如果两个语句都为 TRUE,则 U2:U 中的值将保持不变(即 X * 1 * 1);但如果任一语句为 FALSE,则 U2:U 的该行的结果将为 0(例如,X * 0 * 1 -or- X * 1 * 0 -or- X * 0 * 0).

条件语句检查 1.) 查看客户端名称是否与当前行相同;和 2.) 查看日期是否小于或等于 TODAY()。

这三个读数必须是TRANSPOSEd,以便形成一个二维虚拟网格。

上述过程之后的剩余值将位于与每个实际行平行的虚拟水平行中。这些构成了第一个矩阵。

第二个矩阵由SEQUENCE 组成,只是一个数字 1 的堆栈,与工作表中 A2:A 的行数一样高。

由于任何乘以 1 都是原始数字,因此返回第一个矩阵的所有 0 或值结果然后添加(这是MMULT 的函数)。

由此,可以减去 M2:M 中的值。

【讨论】:

    【解决方案2】:

    我认为您只需从总数中减去按字母顺序排列较早的客户和按字母顺序排列较晚的客户/日期,仍然使用 sumif:

    =ArrayFormula(if(A2:A="",,sum(V2:V)-sumif(R2:R,"<"&A2:A,V2:V)-sumif(R2:R&Q2:Q,">"&A2:A&today(),V2:V)-M2:M))
    

    【讨论】:

    • 我看到我的公式版本已粘贴到“S2 副本”表中。不幸的是,我今天早些时候只在两行上进行了测试,并且没有时间了 - 已经使用上面给出的全列公式更新了工作表。
    【解决方案3】:

    我需要一个数组公式,因为它是一个非常大的数据集

    当数据集超过 3162 行时,mmult() 函数将出错。为避免这种情况,请使用vlookup()query(),如下所示:

    =arrayformula( 
      { 
        "Overdue";
        iferror( 
          vlookup( 
            A2:A, 
            query( 
              Q2:V, 
              "select R, sum(V) 
               where Q <= date" & text(today(), " 'yyyy-MM-dd' ") & "
               group by R", 
              0 
            ), 
            2, false 
          ) 
          - M2:M 
        ) 
      } 
    )
    

    请参阅doubleunary 表。

    【讨论】:

    • 最佳答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多