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

如何修改VBA代码实现多工作簿指定单元格数据逐行汇总至总表

解决VBA汇总数据时覆盖行的问题

我懂你的困扰——现在你的宏每次都把新数据贴在同一行,前面的全被覆盖了对吧?核心问题就是粘贴的行号没跟着循环动态往下走,咱们改几处代码就能搞定。

问题根源

你的原代码应该是用了固定行号来粘贴数据(比如一直用Range("A2").Paste),导致每次循环都覆盖同一位置,最后只留下最后一个工作簿的数据。

修改后的完整代码

我把你的代码补全并修改了关键部分,你可以直接套用:

Sub AllWorkbooks()
    Dim MyFolder As String    ' 文件夹路径
    Dim MyFile As String      ' 文件名
    Dim wb As Workbook        ' 遍历的工作簿对象
    Dim wsSummary As Worksheet ' 汇总工作表对象
    Dim nextRow As Long       ' 记录下一个要粘贴的行号
    
    ' 关闭屏幕更新,提升运行速度(可选但推荐)
    Application.ScreenUpdating = False
    
    ' 指定汇总表(这里假设汇总表在当前工作簿,名为"汇总表")
    Set wsSummary = ThisWorkbook.Worksheets("汇总表")
    
    ' 设置要遍历的文件夹路径(请替换成你的实际路径)
    MyFolder = "C:\你的文件夹路径\"
    ' 查找文件夹下所有Excel文件
    MyFile = Dir(MyFolder & "*.xlsx")
    
    ' 初始化下一行:找到汇总表A列最后一行的下一行(避免覆盖已有数据)
    nextRow = wsSummary.Cells(wsSummary.Rows.Count, "A").End(xlUp).Row + 1
    
    Do While MyFile <> ""
        ' 打开当前工作簿
        Set wb = Workbooks.Open(Filename:=MyFolder & MyFile)
        
        ' ------------------- 这里是你的数据复制逻辑 -------------------
        ' 示例:复制目标工作表(比如"Sheet1")的A1:C1单元格数据
        wb.Worksheets("Sheet1").Range("A1:C1").Copy
        ' 粘贴到汇总表的nextRow行,从A列开始
        wsSummary.Cells(nextRow, "A").PasteSpecial xlPasteValues
        ' -------------------------------------------------------------
        
        ' 下一次循环要粘贴到下一行,行号+1
        nextRow = nextRow + 1
        
        ' 关闭当前工作簿,不保存更改
        wb.Close SaveChanges:=False
        ' 继续查找下一个文件
        MyFile = Dir
    Loop
    
    ' 恢复屏幕更新,清除剪贴板状态
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    
    MsgBox "汇总完成!"
End Sub

关键改动点说明

  • 新增nextRow变量:
    初始值通过wsSummary.Cells(wsSummary.Rows.Count, "A").End(xlUp).Row + 1获取,自动定位到汇总表A列的最后一个空行,就算汇总表已有历史数据,也会接在后面。
  • 动态粘贴行号:
    不再用固定的Range("A2"),而是用wsSummary.Cells(nextRow, "A"),每次循环都用当前的nextRow值。
  • 循环后更新行号:
    每次处理完一个工作簿,执行nextRow = nextRow + 1,确保下一次粘贴到下一行。

额外优化建议

  • 如果要复制多个单元格区域,直接复制整行/整列区域(比如A1:C1),一次性粘贴比单个单元格复制更高效。
  • 如果你的目标工作表名称不是固定的,可以改成用变量指定,或者确保所有工作簿的目标表名一致。
  • 如果汇总表可能没有数据(第一次运行),End(xlUp)会定位到第1行,+1后就是第2行,刚好避开表头,逻辑依然成立。

内容的提问来源于stack exchange,提问作者talibblati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:32