欢迎来到 SO!
这可能不是最有效的解决方案,因为您需要添加两个帮助列,但如果我正确理解您的要求,那么这个想法应该足够好。
首先,假设您的数据集中有 100 行。鉴于此,在单元格 G100 中输入公式“=A100”,在单元格 H100 中输入公式“=B100”。这为 G 列和 H 列中的公式设置了边界条件。现在,在单元格 G99 中,输入以下公式:
"=IF(E99="",G100,IF(E100="",A99,MAX(A99,G100)))"
这个公式的作用是使用以下逻辑设置“运行最大值”:
- 如果E99中的单元格为空白,则从G100复制运行最大值,否则:
- 如果 E99 中的单元格不是空白但 E100 中的单元格是空白,则从 A99 中的单元格设置新的运行最大值,否则:
- 以 A99 和 G100 的最大值作为新的运行最大值。
同样,将以下公式复制到单元格 H100 中:
"=IF(F99="",H100,IF(F100="",B99,MIN(B99,H100)))"
这遵循与上一个公式相同的逻辑,但取 B 列的最小值。
将这些公式复制或自动填充到数据集的顶部。这现在应该为您提供 A 列的运行最大值和 B 列的运行最小值。
下一步是计算差异。我从您的问题中注意到,您似乎只对在每个范围(G1、G6、G9 等)的顶部计算这种差异感兴趣,而不是在每一行中都进行计算。鉴于此,我们需要一个稍微复杂一点的公式。
这个公式的边界条件就是在单元格 I1 中输入“=G1-H1”。在单元格 I2 中,输入:
"=IF(OR(AND(E2<>"",E1=""),AND(F2<>"",F1="")),G2-H2,"")"
它的工作原理是检查两个指示范围边界的条件:
-
E1 是空白,E2 不是
或
F1 为空白,F2 不是
如果其中任何一个条件成立,则 IF 语句为真并显示“G2-H2”,否则显示空白单元格。现在将这个公式复制或自动填充到数据集的底部。
作为最后一步,如果您不需要显示列 G 和 H,现在可以隐藏它们。这现在应该给你我认为你正在寻找的结果。如果这不适合您,请告诉我。