求助:如何编写正确VBA代码实现多工作表数据统计至Master Worksheet?
修正后的VBA代码及问题解析
原代码存在的问题
- 语法错误:
- 单元格引用需用复数形式
Cells,而非Cell - For循环缺少起始值,正确格式为
For i = 1 To TotalNumberofWorksheets,无需末尾冒号
- 单元格引用需用复数形式
- 逻辑错误:两次赋值给同一个单元格,导致平均值被最小值覆盖,未按需求对应Master表的B、C列分别存储数据
- 方法调用错误:VBA中需通过
WorksheetFunction调用统计函数,不能直接用Range对象的Average()/Min()方法
正确的VBA代码
Sub MasterWorksheet() Dim i As Integer Dim TotalNumberofWorksheets As Integer Dim masterSheet As Worksheet ' 初始化总工作表数(可根据实际数量调整) TotalNumberofWorksheets = 99 ' 提前获取Master工作表对象,提升运行效率 Set masterSheet = ActiveWorkbook.Worksheets("Master Worksheet") ' 遍历命名为1、2...的工作表 For i = 1 To TotalNumberofWorksheets ' 将第i个工作表的B2:B11平均值写入Master表B列对应行 masterSheet.Cells(i + 1, 2).Value = WorksheetFunction.Average(ActiveWorkbook.Worksheets(CStr(i)).Range("B2:B11")) ' 将第i个工作表的C2:C11最小值写入Master表C列对应行 masterSheet.Cells(i + 1, 3).Value = WorksheetFunction.Min(ActiveWorkbook.Worksheets(CStr(i)).Range("C2:C11")) Next i End Sub
代码说明
- 提前获取
masterSheet对象,减少重复查找工作表的资源消耗 - 用
CStr(i)将整数转为字符串,确保精准匹配名为"1"、"2"的工作表 - 行号使用
i+1,对应需求中B2/C2对应工作表1、B3/C3对应工作表2的规则 - 通过
WorksheetFunction调用统计函数,保证代码兼容性与稳定性
内容的提问来源于stack exchange,提问作者diabolik
相关产品推荐
相关产品推荐

