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

带求和功能的VLOOKUP实现:跨工作表数据匹配粘贴问题

嘿,我懂你要的是带求和功能的VLOOKUP——就是把Sheet1里的数据匹配到Sheet2对应条目,把数值累加后精准放到目标单元格对吧?你说现有脚本能算出总和,但没法对应粘贴到正确位置,我给你两个靠谱的解决方案:

方案1:用Excel内置公式快速实现(无需写代码)

这是最省心的方式,直接用SUMIF公式就能完美实现你的需求:
在Sheet2的B2单元格(假设你要把求和结果放在B列,对应A列的条目)输入:

=SUMIF(Sheet1!$A:$A, Sheet2!$A2, Sheet1!$B:$B)

然后把这个公式下拉填充到Sheet2的所有行。

公式解释:

  • Sheet1!$A:$A:要匹配的关键字区域(Sheet1的A列)
  • Sheet2!$A2:当前行要匹配的目标关键字(Sheet2的A列单元格)
  • Sheet1!$B:$B:要求和的数值区域(Sheet1的B列)
    这个公式会自动找到Sheet1中所有和Sheet2当前A列单元格匹配的行,把对应的B列数值加起来,直接显示在Sheet2的B列对应位置,完全不需要手动粘贴。
方案2:修正VBA脚本实现对应粘贴

如果你更倾向用VBA来做,那核心问题应该是你的脚本没正确定位Sheet2的目标单元格。下面这个示例脚本会先把Sheet1的数据按A列关键字分组求和,再逐个匹配Sheet2的条目,把结果写入对应位置:

Sub SumAndMatch()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow1 As Long, lastRow2 As Long
    Dim sumDict As Object
    Dim i As Long, key As Variant
    
    ' 指定工作表
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")
    Set sumDict = CreateObject("Scripting.Dictionary")
    
    ' 获取Sheet1的最后一行数据
    lastRow1 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历Sheet1,用字典存每个关键字的总和
    For i = 2 To lastRow1 ' 假设第一行是表头,要是没有表头就改成i=1
        key = ws1.Cells(i, "A").Value
        If sumDict.Exists(key) Then
            sumDict(key) = sumDict(key) + ws1.Cells(i, "B").Value
        Else
            sumDict(key) = ws1.Cells(i, "B").Value
        End If
    Next i
    
    ' 获取Sheet2的最后一行数据
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历Sheet2,把求和结果写入对应B列
    For i = 2 To lastRow2 ' 同样,没有表头就改成i=1
        key = ws2.Cells(i, "A").Value
        If sumDict.Exists(key) Then
            ws2.Cells(i, "B").Value = sumDict(key)
        Else
            ws2.Cells(i, "B").Value = 0 ' 要是想留空就改成""
        End If
    Next i
    
    ' 清理对象
    Set sumDict = Nothing
    Set ws1 = Nothing
    Set ws2 = Nothing
    
    MsgBox "匹配求和完成!", vbInformation
End Sub

脚本逻辑说明:

  1. 用Scripting.Dictionary来存储每个关键字对应的总和,避免重复计算
  2. 先遍历Sheet1,把所有相同关键字的数值累加起来
  3. 再遍历Sheet2的每一行,找到字典里对应的总和,直接写入该行的B列
    这样就彻底解决了“结果没法对应粘贴”的问题——每一行的结果都会精准对应到Sheet2的目标单元格。

如果你的表格结构不一样(比如数值列不是B列、没有表头),只要调整代码里的列号和循环起始行就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:03