Google 工作表:跨行的 ArrayFormula 条件计算

Google Sheets: ArrayFormula Conditional Calculations across Rows

努力寻找一种方法来执行计算,查看 Arrayformula 中的前一行。也许我尝试的方式不可能?

示例列:

Time/Date Conversion In/Out Hours
February 9, 2022 11:57PM In
February 10, 2022 07:47AM Out
February 10, 2022 11:28PM In
February 11, 2022 08:40AM Out

我可以使用数组公式来确定该行是否显示“Out”;我知道如何计算 date/times 之间的时差;但我似乎无法将两者结合起来。

当 In/Out 行显示“结束”时,结果小时数将显示在“小时数”列中。

顺便说一句 - 是的,如果 In 和 Out 时间在同一行,这会容易得多,但自动将这些添加到电子表格的软件不会这样做(甚至不添加它们作为真实的日期和时间,所以我不得不使用一些时髦的正则表达式来完成它。好时光!)

一如既往地感谢您的想法!

首席技术官

解决方案:

在 C1 中尝试(格式持续时间)

={"Hours";ARRAYFORMULA(if(B2:B="In",,if(A2:A="",,mmult(-1*(ROW(A2:A)=TRANSPOSE(ROW(A2:A)+1))+1*(ROW(A2:A)=TRANSPOSE(ROW(A2:A))),if(A2:A="",0,A2:A)))))}

参考:

mmult

解释:

mmult 如下 -1/0/1 的矩阵和数据

=arrayformula(-1*(ROW(A2:A9)=TRANSPOSE(ROW(A2:A9)+1))+1*(ROW(A2:A9)=TRANSPOSE(ROW(A2:A9))))

我无法让 Mike 提供的解决方案发挥作用,尽管它很吸引人;因此,我拼凑了以下解决方案:

我用公式标记为“向前拉”的隐藏列:

=ArrayFormula(If(C3:C<>"",B2:B999,""))

这将之前的时间带入同一行以便于计算,在小时列中:

=Arrayformula(If(C2:C="Out",B2:B-D2:D,""))

不是最性感的答案,但它确实能完成工作。

谢谢,

首席技术官