Excel VBA实现从First表到当前表指定区域动态跨表求和
问题原因及修正方案
错误原因
- 未在外层包裹
SUM聚合函数:多个区域引用直接用+号连接时,Excel会返回包含各区域所有值的数组,不会自动聚合为单个求和结果,必须嵌套SUM函数才能得到总和。 - 引用语法不规范且冗余:你代码生成的区域引用存在单引号配对错误(比如
'sheet2!缺少闭合单引号),且完全没必要逐个拼接每个工作表的引用,Excel原生支持起始工作表名:结束工作表名!单元格区域的连续跨表引用语法,写法更简洁也不容易出错。
修正方案
方案1:使用原生连续跨表引用(推荐)
该方案直接生成你要求的=SUM(First:当前表名!G36:G41)格式的公式,运行效率更高,公式更简洁。
Public Sub autoFormula() Dim i As Integer ' 遍历从第2个工作表到最后一个工作表 For i = 2 To Worksheets.Count ' 生成连续跨表求和公式,表名含特殊字符时自动加单引号包裹 Worksheets(i).Range("G44").Formula = "=SUM(First:'" & Worksheets(i).Name & "'!G36:G41)" Next End Sub
方案2:保留原拼接逻辑的修正版
如果你确实需要逐个拼接每个工作表的引用(比如中间有需要排除的工作表的场景),可以修改为如下代码:
Public Sub autoFormula() Dim i As Integer, j As Integer Dim arr As Variant For i = 2 To Worksheets.Count ReDim arr(1 To i) For j = 1 To i ' 修复单引号配对错误 arr(j) = "'" & Worksheets(j).Name & "'!G36:G41" Next ' 外层添加SUM函数包裹,用逗号分隔多个区域参数 Worksheets(i).Range("G44").Formula = "=SUM(" & Join(arr, ",") & ")" Next End Sub
内容的提问来源于stack exchange,提问作者Rosebud
相关产品推荐
相关产品推荐

