用vba编写宏分类统计多个sheet中每种材料的总使用量结果输出到新的sheet中。支持自动更新结果表格
以下是一个使用VBA编写的宏,可以用于分类统计多个工作表中每种材料的总使用量,并将结果输出到新的工作表中。同时,该宏还支持自动更新结果表格。
Sub 统计材料使用量()
Dim ws As Worksheet
Dim wsResult As Worksheet
Dim lastRow As Long
Dim materialCol As Range
Dim quantityCol As Range
Dim resultRow As Long
Dim material As String
Dim quantity As Double
' 设置结果表格
On Error Resume Next
Set wsResult = ThisWorkbook.Worksheets("结果")
On Error GoTo 0
If wsResult Is Nothing Then
' 如果结果表格不存在,则创建一个新的工作表
Set wsResult = ThisWorkbook.Worksheets.Add
wsResult.Name = "结果"
Else
' 如果结果表格存在,则清空表格内容
wsResult.Cells.Clear
End If
' 在结果表格中添加表头
wsResult.Range("A1").Value = "材料"
wsResult.Range("B1").Value = "总使用量"
' 循环遍历每个工作表
For Each ws In ThisWorkbook.Worksheets
' 跳过结果表格
If ws.Name <> "结果" Then
' 查找材料和数量列
Set materialCol = ws.Rows(1).Find("材料")
Set quantityCol = ws.Rows(1).Find("数量")
' 如果找到材料和数量列
If Not materialCol Is Nothing And Not quantityCol Is Nothing Then
' 获取材料和数量列的最后一行
lastRow = ws.Cells(ws.Rows.Count, materialCol.Column).End(xlUp).Row
' 循环遍历每行数据
For i = 2 To lastRow
' 获取材料和数量
material = ws.Cells(i, materialCol.Column).Value
quantity = ws.Cells(i, quantityCol.Column).Value
' 在结果表格中查找材料
resultRow = wsResult.Cells(wsResult.Rows.Count, 1).End(xlUp).Row
Set materialCol = wsResult.Range("A2:A" & resultRow).Find(material)
' 如果在结果表格中找到材料,则更新对应行的总使用量
If Not materialCol Is Nothing Then
wsResult.Cells(materialCol.Row, 2).Value = wsResult.Cells(materialCol.Row, 2).Value + quantity
Else
' 如果在结果表格中未找到材料,则在下一行添加新的材料和总使用量
resultRow = resultRow + 1
wsResult.Cells(resultRow, 1).Value = material
wsResult.Cells(resultRow, 2).Value = quantity
End If
Next i
End If
End If
Next ws
' 自动调整结果表格的列宽
wsResult.Columns.AutoFit
End Sub
使用该宏时,只需按下Alt + F11打开VBA编辑器,将上述代码复制粘贴到ThisWorkbook的代码窗口中。然后,按下F5运行宏。
运行完毕后,将会在工作簿中创建一个名为"结果"的工作表,并将分类统计的结果输出到该工作表中。如果需要更新结果表格,只需再次运行宏即可。
注意:请确保每个工作表中包含“材料”和“数量”两列,并且表头位于第一行
原文地址: https://www.cveoy.top/t/topic/h8nH 著作权归作者所有。请勿转载和采集!