以下是可能的VBA代码实现:

Sub SummaryData() Dim ws As Worksheet '当前工作表 Dim newWs As Worksheet '新建工作表 Dim lastRow As Long '最后一行 Dim bcdeDict As Object '字典,用于存储分类汇总结果 Dim bcdeKey As String '字典键 Dim fValue As Double 'f列数值 Dim i As Long '行计数器

Set ws = ActiveSheet '当前工作表

'获取最后一行
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

'新建工作表
Set newWs = Workbooks.Add.Worksheets(1)
newWs.Name = "Summary"

'新建字典
Set bcdeDict = CreateObject("Scripting.Dictionary")

'遍历每一行数据,进行分类汇总
For i = 2 To lastRow '第一行是表头,从第二行开始
    bcdeKey = ws.Cells(i, 2) & "_" & ws.Cells(i, 3) & "_" & ws.Cells(i, 4) & "_" & ws.Cells(i, 5) '构造字典键
    fValue = ws.Cells(i, 6) '获取f列数值
    If bcdeDict.Exists(bcdeKey) Then '如果字典已经存在该键
        bcdeDict(bcdeKey) = bcdeDict(bcdeKey) + fValue '加上新的f列数值
    Else '如果字典不存在该键
        bcdeDict.Add bcdeKey, fValue '添加新的键值对
    End If
Next i

'将分类汇总结果输出到新工作表
newWs.Cells(1, 1) = "B"
newWs.Cells(1, 2) = "C"
newWs.Cells(1, 3) = "D"
newWs.Cells(1, 4) = "E"
newWs.Cells(1, 5) = "F"
i = 2 '从第二行开始
For Each bcdeKey In bcdeDict '遍历字典
    newWs.Cells(i, 1) = Split(bcdeKey, "_")(0) 'B列
    newWs.Cells(i, 2) = Split(bcdeKey, "_")(1) 'C列
    newWs.Cells(i, 3) = Split(bcdeKey, "_")(2) 'D列
    newWs.Cells(i, 4) = Split(bcdeKey, "_")(3) 'E列
    newWs.Cells(i, 5) = bcdeDict(bcdeKey) 'F列
    i = i + 1 '行计数器加1
Next bcdeKey

'格式化新工作表
newWs.Columns("A:E").AutoFit '自适应列宽
newWs.Range("A1:E1").Font.Bold = True '表头加粗

'显示新工作表
newWs.Activate

MsgBox "分类汇总完成!"

End Sub

做个vba四条件分类汇总bcde四列为条件f列为数值列对相同的bcde进行f列数据汇总结果新建1个workbook把分类汇总结果放在新工作表bcde放条件f列为汇总结果

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

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