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 如下 -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,""))
不是最性感的答案,但它确实能完成工作。
谢谢,
首席技术官
努力寻找一种方法来执行计算,查看 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 如下 -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,""))
不是最性感的答案,但它确实能完成工作。
谢谢,
首席技术官