如何通过VBA按每10行分组为各发票号生成数据汇总
现有代码问题
- 所有汇总结果固定写入
lastRow对应的单元格,多组计算结果会互相覆盖,无法为每个分组生成独立汇总行 - 第一个计算总金额的循环中未初始化变量
t,运行时会直接报错 - 仅按固定步长跳转,未关联发票号字段,一旦出现某张发票明细行数不是10的情况,会出现跨发票汇总的错误
- 未给汇总行写入对应发票标识,生成的记录无法和原发票对应
修正方案
逻辑上先逐行遍历明细数据,识别每10行/同发票号的分组边界,在每组明细下方插入独立汇总行,再写入对应汇总公式和标识,修正后的可直接运行代码如下:
Sub Gen10RowInvoiceSummary() Dim sht As Worksheet Dim lastRow As Long, groupStart As Long, currRow As Long Set sht = ThisWorkbook.ActiveSheet ' 若需指定工作表,替换为Worksheets("你的表名") lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row groupStart = 2 ' 首行是表头,明细从第2行开始 Application.ScreenUpdating = False For currRow = 2 To lastRow ' 分组边界判定:满10行、下一行发票号变更、到达最后一行 满足任意一个即触发汇总 If (currRow - groupStart + 1 = 10) _ Or (sht.Cells(currRow + 1, "A") <> sht.Cells(currRow, "A")) _ Or (currRow = lastRow) Then ' 插入汇总行 sht.Rows(currRow + 1).Insert ' 写入汇总标识 sht.Cells(currRow + 1, "A") = sht.Cells(groupStart, "A") & " 汇总" ' 写入含税总金额公式:金额列合计+税额列合计 sht.Cells(currRow + 1, "B").Formula = "=SUM(G" & groupStart & ":G" & currRow & ")+SUM(H" & groupStart & ":H" & currRow & ")" ' 写入总税额公式 sht.Cells(currRow + 1, "C").Formula = "=SUM(H" & groupStart & ":H" & currRow & ")" ' 汇总行加粗标识,可按需删除 sht.Range("A" & currRow + 1 & ":H" & currRow + 1).Font.Bold = True ' 更新参数适配插入行后的表结构 groupStart = currRow + 2 lastRow = lastRow + 1 currRow = currRow + 1 End If Next Application.ScreenUpdating = True End Sub
使用说明
- 若不需要按发票号自动截断,仅严格按每10行生成汇总,删除判断条件里的发票号变更、最后一行两个判定分支即可
- 运行前建议备份原始数据,避免插入行操作导致数据错位
- 如果表头不在第1行,对应修改
groupStart的初始值为你实际的明细起始行号即可
内容的提问来源于stack exchange,提问作者Ady Putra
相关产品推荐
相关产品推荐

