用vba编写宏分类统计多个sheet中每种材料的总使用量结果输出到新的sheet中
以下是一个用VBA编写的宏,用于分类统计多个工作表中每种材料的总使用量,并将结果输出到新的工作表中:
Sub 统计材料使用量()
Dim ws As Worksheet, newWs As Worksheet
Dim lastRow As Long, i As Long, j As Long
Dim material As String, quantity As Double
Dim materialColumn As Long, quantityColumn As Long
Dim found As Boolean
'设置新的工作表
Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
newWs.Name = "统计结果"
'在新工作表中设置表头
newWs.Cells(1, 1).Value = "材料"
newWs.Cells(1, 2).Value = "总使用量"
'在新工作表中设置列宽
newWs.Columns("A:B").ColumnWidth = 15
'设置材料和使用量所在的列
materialColumn = 1 '材料列
quantityColumn = 2 '使用量列
'循环遍历每个工作表
For Each ws In ThisWorkbook.Sheets
'跳过新工作表和统计结果工作表
If ws.Name <> "统计结果" And ws.Name <> newWs.Name Then
lastRow = ws.Cells(ws.Rows.Count, materialColumn).End(xlUp).Row '找到最后一行
'循环遍历每个材料
For i = 2 To lastRow '假设表头在第一行,数据从第二行开始
material = ws.Cells(i, materialColumn).Value '获取材料名称
quantity = ws.Cells(i, quantityColumn).Value '获取使用量
'在新工作表中查找该材料
found = False
For j = 2 To newWs.Cells(newWs.Rows.Count, materialColumn).End(xlUp).Row
If newWs.Cells(j, materialColumn).Value = material Then
'如果找到了该材料,则累加使用量
newWs.Cells(j, quantityColumn).Value = newWs.Cells(j, quantityColumn).Value + quantity
found = True
Exit For
End If
Next j
'如果新工作表中没有找到该材料,则在最后一行添加新的记录
If Not found Then
newWs.Cells(newWs.Cells(newWs.Rows.Count, materialColumn).End(xlUp).Row + 1, materialColumn).Value = material
newWs.Cells(newWs.Cells(newWs.Rows.Count, materialColumn).End(xlUp).Row, quantityColumn).Value = quantity
End If
Next i
End If
Next ws
End Sub
要使用此宏,请按照以下步骤操作:
- 打开Excel文件,按下Alt + F11打开VBA编辑器;
- 在VBA编辑器中,插入一个新的模块(如果没有的话);
- 将上述代码粘贴到新的模块中;
- 关闭VBA编辑器;
- 在Excel中,按下Alt + F8,选择“统计材料使用量”宏;
- 单击“运行”按钮。
执行完宏后,将在Excel中添加一个名为“统计结果”的新工作表,其中包含每种材料的总使用量
原文地址: http://www.cveoy.top/t/topic/h6Ea 著作权归作者所有。请勿转载和采集!