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 中实现这一目标?
我想出了这个怪物,但效果很好,你可以把它复制下来:
=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 你去吧。
归档时间: |
|
查看次数: |
5904 次 |
最近记录: |