如何用VBA在Excel多工作表中汇总Total Max/Min Time对应值
实现多工作表时间总计的VBA方案
1. 打开VBA编辑器
- 打开目标Excel工作簿,按下
Alt + F11组合键启动VBA编辑器。 - 在左侧工程资源管理器中,右键点击你的工作簿名称,选择「插入」→「模块」,新建一个空白模块用于编写代码。
2. 编写VBA代码
将以下代码复制到新建模块中,代码逻辑完全匹配你的需求:
Sub CalculateTotalTimes() ' 声明变量 Dim ws As Worksheet Dim totalMax As Double Dim totalMin As Double Dim findMaxCell As Range Dim findMinCell As Range ' 初始化累加值 totalMax = 0 totalMin = 0 ' 遍历所有工作表 For Each ws In ThisWorkbook.Worksheets ' 跳过汇总表(需替换为你的实际汇总表名称) If ws.Name <> "汇总表" Then ' 定位"Total Max Time"单元格 Set findMaxCell = ws.Cells.Find(What:="Total Max Time", LookIn:=xlValues, LookAt:=xlWhole) ' 找到则累加右侧数值 If Not findMaxCell Is Nothing Then totalMax = totalMax + findMaxCell.Offset(0, 1).Value End If ' 定位"Total Min Time"单元格 Set findMinCell = ws.Cells.Find(What:="Total Min Time", LookIn:=xlValues, LookAt:=xlWhole) ' 找到则累加右侧数值 If Not findMinCell Is Nothing Then totalMin = totalMin + findMinCell.Offset(0, 1).Value End If End If Next ws ' 将结果写入汇总表(可修改目标单元格位置) With ThisWorkbook.Worksheets("汇总表") .Range("A1").Value = "Total Max Time 总计" .Range("B1").Value = totalMax .Range("A2").Value = "Total Min Time 总计" .Range("B2").Value = totalMin End With MsgBox "总计计算完成!" End Sub
3. 代码核心逻辑解释
- 遍历工作表:
For Each ws In ThisWorkbook.Worksheets循环处理每个工作表,通过If ws.Name <> "汇总表"跳过汇总表避免重复计算。 - 精准查找文本:
Cells.Find()方法定位目标文本,LookAt:=xlWhole确保匹配完整单元格内容(不会误匹配包含该文本的部分内容)。 - 偏移取值:
findMaxCell.Offset(0, 1)表示向右偏移1列(行偏移0,列偏移1),.Value获取该单元格的数值。 - 结果输出:最后将累加后的总计值写入汇总表指定单元格,可根据需求修改单元格位置(比如改为
C5、D5)。
4. 运行代码
- 回到VBA编辑器,将光标放在代码任意位置,按下
F5键,或点击工具栏绿色三角「运行」按钮执行代码。 - 执行完成后会弹出提示框,切换到汇总表即可查看计算结果。
注意事项
- 若你的汇总表名称不是「汇总表」,需将代码中所有
"汇总表"替换为实际表名(比如"Summary")。 - 若部分工作表无目标文本,代码会自动跳过该表的对应数值,不会报错。
- 确保数值单元格为数字格式,避免计算异常。
内容的提问来源于stack exchange,提问作者iamyusuf
相关产品推荐
相关产品推荐

