以下是一个使用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运行宏。

运行完毕后,将会在工作簿中创建一个名为"结果"的工作表,并将分类统计的结果输出到该工作表中。如果需要更新结果表格,只需再次运行宏即可。

注意:请确保每个工作表中包含“材料”和“数量”两列,并且表头位于第一行

用vba编写宏分类统计多个sheet中每种材料的总使用量结果输出到新的sheet中。支持自动更新结果表格

原文地址: https://www.cveoy.top/t/topic/h8nH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录