You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:06:27