You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA多列求和需求:按CTP.GRP合并数据并填充指定列

解决Excel VBA多列分组求和问题

嘿,我来帮你搞定这个分组求和的需求!你需要按H列(CTP.GRP)的唯一值作为行,同时对M列(Nominal)和P列(Mtm in IDR)分别求和,然后把结果放到另一个工作表的对应列里对吧?下面是修改后的完整VBA代码,能实现你要的双列求和功能:

Sub ins_data()
    Dim srcWs As Worksheet
    Dim destWs As Worksheet
    Dim dataArr As Variant
    Dim sumDict As Object
    Dim i As Long
    Dim key As Variant
    Dim lastRow As Long
    
    ' 定义源工作表和目标工作表,根据你的实际表名修改!
    Set srcWs = ThisWorkbook.Worksheets("数据源")
    Set destWs = ThisWorkbook.Worksheets("汇总表")
    Set sumDict = CreateObject("Scripting.Dictionary")
    
    ' 获取源数据的最后一行,读取数据到数组(提升运行效率)
    lastRow = srcWs.Cells(srcWs.Rows.Count, "H").End(xlUp).Row
    dataArr = srcWs.Range("H2:P" & lastRow).Value ' 从第2行开始,跳过表头
    
    ' 遍历数据,按CTP.GRP分组累加两个列的值
    For i = LBound(dataArr, 1) To UBound(dataArr, 1)
        key = dataArr(i, 1) ' H列是数组的第1列
        If Not sumDict.Exists(key) Then
            ' 第一次遇到这个分组,初始化两个求和值:Nominal(M列)、Mtm in IDR(P列)
            sumDict(key) = Array(0, 0)
        End If
        ' 累加Nominal(M列对应数组的第6列:H是1,I2,J3,K4,L5,M6)
        sumDict(key)(0) = sumDict(key)(0) + dataArr(i, 6)
        ' 累加Mtm in IDR(P列对应数组的第9列:H1到P是9列)
        sumDict(key)(1) = sumDict(key)(1) + dataArr(i, 9)
    Next i
    
    ' 清空目标工作表旧数据(如果需要的话,可注释掉)
    destWs.Range("A2:C" & destWs.Rows.Count).ClearContents
    
    ' 把字典中的结果写入目标工作表
    i = 2 ' 从第2行开始写,假设第1行是表头
    For Each key In sumDict.Keys
        destWs.Cells(i, 1).Value = key ' 第一列写CTP.GRP
        destWs.Cells(i, 2).Value = sumDict(key)(0) ' 第二列写utilization(Nominal求和)
        destWs.Cells(i, 3).Value = sumDict(key)(1) ' 第三列写market value(Mtm in IDR求和)
        i = i + 1
    Next key
    
    ' 释放对象
    Set sumDict = Nothing
    Set srcWs = Nothing
    Set destWs = Nothing
    
    MsgBox "数据汇总完成!", vbInformation
End Sub

关键说明:

  • 字典的使用:这里用Scripting.Dictionary来存储每个CTP.GRP对应的两个求和值,每个键对应一个包含两个元素的数组,第一个元素存Nominal的总和,第二个存Mtm in IDR的总和。
  • 数组读取数据:把源数据一次性读到数组里,比逐行读取单元格快很多,适合大数据量的情况。
  • 列对应关系:要注意数组里的列索引:H列是数组第1列,M列是第6列(H到M中间隔了I-J-K-L-M,共6列),P列是第9列(H到P共9列),如果你的列位置有变化,要对应调整这个索引。
  • 工作表名修改:记得把"数据源"和"汇总表"改成你实际的工作表名称,目标工作表的列位置(A、B、C列)也可以根据你的需求调整。

如果你的目标工作表表头已经固定,比如CTP.GRP在A列,utilization在B列,market value在C列,这段代码直接就能用啦!

内容的提问来源于stack exchange,提问作者MSY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:28:21