如何在名称可变的多Excel工作表中按物料汇总数量?
解决方案:跨动态Job工作表汇总物料数量
一、前置操作
在「Materials」工作表的G列(即你指定的TotalQty列)表头单元格(G2)输入TotalQty。
二、VBA代码实现(新手友好复制版)
按Alt + F11打开VBA编辑器,右键点击左侧工程窗口里的当前工作簿名称,选择「插入」→「模块」,粘贴以下代码:
Sub CalculateTotalQty() Dim wsMaterials As Worksheet Dim wsJob As Worksheet Dim lastRowMat As Long Dim lastRowJob As Long Dim i As Long Dim j As Long Dim materialName As String Dim totalQty As Double ' 指定Materials工作表 Set wsMaterials = ThisWorkbook.Worksheets("Materials") lastRowMat = wsMaterials.Cells(wsMaterials.Rows.Count, "A").End(xlUp).Row ' 遍历Materials表的每一行物料 For i = 3 To lastRowMat materialName = wsMaterials.Cells(i, "A").Value totalQty = 0 ' 遍历所有工作表,筛选Job类表 For Each wsJob In ThisWorkbook.Worksheets If wsJob.Name <> "Master" And wsJob.Name <> "Materials" Then lastRowJob = wsJob.Cells(wsJob.Rows.Count, "C").End(xlUp).Row ' 在当前Job表的C列匹配物料,累加B列数量 For j = 2 To lastRowJob ' 假设Job表表头在第2行,可自行调整起始行号 If wsJob.Cells(j, "C").Value = materialName Then totalQty = totalQty + wsJob.Cells(j, "B").Value End If Next j End If Next wsJob ' 写入汇总结果到TotalQty列 wsMaterials.Cells(i, "G").Value = totalQty Next i MsgBox "物料数量汇总完成!", vbInformation End Sub
三、代码使用指南
- 运行方式:回到Excel界面,按
Alt + F8,选择CalculateTotalQty点击「运行」即可。 - 适配调整:如果你的Job表表头不在第2行,把代码里的
For j = 2 To lastRowJob改成实际数据起始行号(比如表头在第1行就改成j = 1)。 - 自动更新:新手先手动运行汇总即可,后续熟悉VBA后,可以添加工作表变更触发事件实现自动更新。
四、工单生成建议
汇总完成后,可直接用Materials表G列的汇总数据,通过Excel邮件合并功能生成工单;也可以在现有VBA基础上扩展代码,自动生成格式固定的工单工作表,这部分可根据你的工单格式需求后续调整。
内容的提问来源于stack exchange,提问作者Bill E
相关产品推荐
相关产品推荐

