空白单元格的 Excel 小计

pic*_*khu 2 microsoft-excel-2007 microsoft-excel

我在excel中有数据看起来像

10
15
12

3
2

5
3
Run Code Online (Sandbox Code Playgroud)

我希望它返回小计,如

10
15
12
    37
3
2
    5
5
3
    8
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Excel 中实现这一目标?

Joo*_*ook 5

我想出了这个怪物,但效果很好,你可以把它复制下来:

=IF(ISBLANK(A4),SUBTOTAL(9,OFFSET(B4,IFERROR(MATCH(0,$B$1:B3,-1),1)-ROW(),-1,ROW()-IFERROR(MATCH(0,$B$1:B3,-1),1),1)),"")
Run Code Online (Sandbox Code Playgroud)

这是我的原文(德语):

=WENN(ISTLEER(A4);TEILERGEBNIS(9;BEREICH.VERSCHIEBEN(B4;WENNFEHLER(VERGLEICH(0;$B$1:B3;-1);1)-ZEILE();-1;ZEILE()-WENNFEHLER(VERGLEICH(0;$B$1:B3;-1);1);1));"")
Run Code Online (Sandbox Code Playgroud)

因此,当 Col A 中的单元格为空时,进行一个加和,将以上值相加,直到最后一个加和或 1。

如果论坛不清楚,请随时询问具体情况。

编辑

在伪/解释代码中:

IF(ISBLANK(A4),SUBTOTAL(),"")

如果A列当前行的单元格为空,则计算小计,否则不显示。

SUBTOTAL(9,RANGE)

使用 sum 函数 (9) 为给定的 RANGE 创建小计

RANGE = OFFSET(B4,ROWS,COLS,HEIGHT,WIDTH)

小计的范围是根据单元格 B4 通过偏移/跨越范围创建的。

在这个 B4 的具体例子中,这就像写:

OFFSET(B4,-3,-1,3,1)

因此,创建一个范围,它在 B4 (-3) 上方 3 行,向左 (-1) 1 列,向下/高 3 行,宽 1 列。

要计算 -3 和 3,这将根据 A 列中两个空单元格之间的行而有所不同,我们使用这些:

IFERROR(MATCH(0,$B$1:B3,-1),1)-ROW()

ROW()-IFERROR(MATCH(0,$B$1:B3,-1)

除了符号外,基本相同。

MATCH(0,$B$1:B3,-1) 在 b 列中从第一个单元格到当前单元格的前一个 ($B$1:B3) 搜索任何大于 0(-1 表示更大)的内容。

因为这会导致第一个小计出现错误,所以IFERROR提供 1 来纠正这个错误。

因此,当您在 B4 中时,您搜索是否有任何高于 B4 的值,假设这是小计,如果找不到任何值,则使用 1 作为您的行。1-4 = -3; 4-1=3 你去吧。