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

Excel按ID动态累加统计需求:将源工作表数据汇总至目标工作表对应固定行

我来帮你解决这个Excel累计统计的问题,分两种方法给你,一种不用写代码,一种可以实现自动更新,你按需选择:

方法一:用Excel内置公式实现(无需VBA)

这种方法简单易操作,适合不想接触代码的场景:

  • 假设你的源工作表叫Source,目标工作表叫Target
  • 目标表第1行是表头,第2行对应ID=1,第121行对应ID=120(刚好覆盖1-120所有ID)
  • 在目标表的Bonus列(比如B2单元格)输入公式:
    =SUMIF(Source!$D:$D, Target!$A2, Source!$B:$B)
    
    公式解释:Source!$D:$D是源表的ID列,Target!$A2是当前目标行的ID值,Source!$B:$B是源表需要累加的Bonus列
  • 把这个公式横向拖动到其他需要累加的列(比如"No Bonus"、"No Multiplier"等列),再纵向拖动到120行
  • 源表新增数据后,只要Excel开启了自动计算(默认是开启状态),目标表的统计值会自动更新
方法二:用VBA实现自动累加(适合源表频繁新增数据)

如果源表会持续大量新增数据,或者想要完全自动触发更新,VBA会更高效。步骤如下:

  1. 打开VBA编辑器:按下Alt + F11组合键
  2. 在左侧「工程资源管理器」里找到你的工作簿,右键点击「插入」→「模块」
  3. 在弹出的代码窗口粘贴以下代码:
    Sub UpdateTargetTable()
        Dim wsSource As Worksheet
        Dim wsTarget As Worksheet
        Dim lastRowSource As Long
        Dim i As Long
        Dim idValue As Integer
        Dim targetRow As Long
        
        ' 替换为你的实际工作表名称
        Set wsSource = ThisWorkbook.Worksheets("Source")
        Set wsTarget = ThisWorkbook.Worksheets("Target")
        
        ' 清空目标表的数值列(保留ID列),按需修改列范围
        wsTarget.Range("B2:E121").ClearContents
        
        ' 获取源表最后一行数据的行号
        lastRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
        
        ' 遍历源表所有数据行(从第2行开始,假设第1行是表头)
        For i = 2 To lastRowSource
            idValue = wsSource.Cells(i, "D").Value ' 替换为源表ID列的列标
            
            ' 确保ID在1-120范围内
            If idValue >= 1 And idValue <= 120 Then
                targetRow = idValue + 1 ' 目标行=ID值+1(因为目标表第1行是表头)
                
                ' 累加对应列的数据,按需修改列标
                wsTarget.Cells(targetRow, "B").Value = wsTarget.Cells(targetRow, "B").Value + wsSource.Cells(i, "B").Value
                wsTarget.Cells(targetRow, "C").Value = wsTarget.Cells(targetRow, "C").Value + wsSource.Cells(i, "C").Value
                wsTarget.Cells(targetRow, "D").Value = wsTarget.Cells(targetRow, "D").Value + wsSource.Cells(i, "D").Value
                wsTarget.Cells(targetRow, "E").Value = wsTarget.Cells(targetRow, "E").Value + wsSource.Cells(i, "E").Value
            End If
        Next i
        
        MsgBox "目标表已完成更新!", vbInformation
    End Sub
    
  4. 修改代码中的关键参数:
    • 把"Source"和"Target"改成你实际的工作表名称
    • 把"D"改成源表中ID列的列标(比如ID在C列就改成"C")
    • 把"B:E"改成你需要累加的数值列范围
  5. 运行宏:回到Excel界面,按下Alt + F8,选择UpdateTargetTable点击「运行」即可更新目标表

自动触发设置(可选)

如果想要源表新增数据时自动更新目标表,还可以添加以下步骤:

  • 在「工程资源管理器」里找到源工作表(比如Source),双击打开代码窗口
  • 粘贴以下代码:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim wsSource As Worksheet
        Set wsSource = ThisWorkbook.Worksheets("Source")
        
        ' 当源表的数值列或ID列有变化时自动触发更新,按需修改列范围
        If Not Intersect(Target, wsSource.Range("B:D")) Is Nothing Then
            UpdateTargetTable
        End If
    End Sub
    

之后只要源表的指定列有数据新增或修改,目标表会自动完成累加更新。

⚠️ 注意:第一次用VBA的话,记得把工作簿保存为.xlsm格式(启用宏的工作簿),否则宏会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:38:13