Excel需求:对空白单元格分隔的数值组独立求和并填充组内单元格
Excel分组求和:空白分隔组内填充总和
公式方案
兼容所有Excel版本(需辅助列)
- 添加辅助列(比如C列)用于标记每组编号:
- C2单元格输入公式:
=IF(ISBLANK(A2),"",IF(ISBLANK(A1),MAX(C$1:C1)+1,C1)) - 下拉填充至A列所有有数据的行,空白行对应C列留空。
- C2单元格输入公式:
- 在目标列(B列)计算每组总和:
- B2单元格输入公式:
=IF(ISBLANK(A2),"",SUMIF(C:C,C2,A:A)) - 下拉填充后,所有非空行都会显示所在组的总和,空白行保持空值。
- B2单元格输入公式:
Excel 365/2021无辅助列方案
直接在B2单元格输入公式并下拉填充:
=IF(ISBLANK(A2),"",SUM(INDEX(A:A,XLOOKUP(TRUE,ISBLANK(A$1:A1),ROW(A$1:A1),0,-1)+1):INDEX(A:A,XLOOKUP(TRUE,ISBLANK(A2:A$1048576),ROW(A2:A$1048576),1048576,1)-1)))
该公式会自动定位当前单元格所在组的起始(上一个空白行的下一行)和结束(下一个空白行的上一行),计算组内总和,支持后续新增数据。
VBA方案
按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:
Sub FillGroupSum() Dim ws As Worksheet Dim lastRow As Long, startRow As Long, i As Long Dim groupSum As Double Set ws = ActiveSheet ' 可指定具体工作表,如Set ws = ThisWorkbook.Sheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row startRow = 2 ' 数据起始行,根据实际调整 groupSum = 0 For i = startRow To lastRow + 1 ' 多循环一行处理最后一组 If ws.Cells(i, "A").Value = "" Or i > lastRow Then ' 填充当前组总和 ws.Range(ws.Cells(startRow, "B"), ws.Cells(i - 1, "B")).Value = groupSum groupSum = 0 startRow = i + 1 Else groupSum = groupSum + ws.Cells(i, "A").Value End If Next i End Sub
运行宏后,B列会自动填充每组总和,空白行保持空值。后续新增数据后重新运行宏即可更新结果。
内容的提问来源于stack exchange,提问作者Lester
相关产品推荐
相关产品推荐

