如何简化从同路径多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
相关产品推荐
相关产品推荐

