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

如何简化从同路径多Excel工作簿汇总求和的VBA宏代码

优化实现方案

核心思路:通过VBA遍历同路径下的xlsm文件,无需手动罗列文件名即可自动拼接求和公式,还支持后续新增同格式文件自动纳入汇总,不需要修改代码。


可直接使用的VBA代码

版本1:自动识别所有同路径xlsm文件

Sub 批量汇总同路径XLSM文件()
    Dim filePath As String
    Dim fileName As String
    Dim sumFormula As String
    Dim targetRng As Range
    
    ' 读取当前主工作簿所在路径
    filePath = ThisWorkbook.Path & "\"
    fileName = Dir(filePath & "*.xlsm")
    
    ' 拼接求和公式
    sumFormula = "="
    Do While fileName <> ""
        ' 排除主工作簿自身
        If fileName <> ThisWorkbook.Name Then
            ' RC[-1]表示当前单元格左侧一列同行位置,可根据实际引用位置修改
            sumFormula = sumFormula & "[" & fileName & "]Sheet1!RC[-1]+"
        End If
        fileName = Dir
    Loop
    ' 去掉公式末尾多余的加号
    sumFormula = Left(sumFormula, Len(sumFormula) - 1)
    
    ' 定义需要写入公式的目标区域,可按需修改范围
    Set targetRng = ThisWorkbook.ActiveSheet.Range("D4:D6")
    targetRng.FormulaR1C1 = sumFormula
End Sub

版本2:固定汇总指定4个文件(运行更稳定)

如果不需要适配后续新增的文件,仅需要简化现有代码,可直接用数组定义要汇总的文件名:

Sub 固定汇总4个文件()
    Dim fileArr As Variant
    Dim i As Integer
    Dim sumFormula As String
    
    ' 定义要汇总的文件名数组,可按需增减
    fileArr = Array("1.xlsm", "2.xlsm", "3.xlsm", "4.xlsm")
    
    sumFormula = "="
    For i = LBound(fileArr) To UBound(fileArr)
        sumFormula = sumFormula & "[" & fileArr(i) & "]Sheet1!RC[-1]+"
    Next
    sumFormula = Left(sumFormula, Len(sumFormula) - 1)
    
    ' 批量写入目标区域
    Range("D4:D6").FormulaR1C1 = sumFormula
End Sub

使用说明

  • 请保证主工作簿和所有要汇总的xlsm文件放在同一个文件夹内
  • 打开主工作簿按Alt+F11插入模块,粘贴代码后运行即可
  • 如果需要修改汇总的单元格范围,直接调整代码中Range("D4:D6")的参数即可
  • 如果你原本的公式逻辑需要叠加当前单元格原有数值,可在拼接公式的最后加上+RC即可,注意提前规避循环引用问题

注意:上述代码生成的公式支持被引用文件关闭时正常读取数值,不需要提前打开所有汇总文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:01