You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel多工作表对应组合值求和实现方法咨询

Excel多工作表对应组合值求和实现方法咨询

嗨,刚接触Excel遇到这种组合值求和的问题确实容易懵,别担心,我给你两种实用的方法,你可以根据自己的Excel版本来选:

方法一:用内置函数实现(适合Excel 365/2021及以后版本)

这个方法不需要写代码,用Excel自带的函数就能搞定:

  1. 先把「Time」工作表的行、列标题和「Size」表完全对齐复制好
  2. 在「Time」表第一个需要计算的单元格(比如对应「Size」表B2的单元格),输入以下公式:
=SUM(SUMIF(Number!$A:$A, TEXTSPLIT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Size!B2, "B", ",B"), "S", ",S"), "T", ",T"), ","), Number!$B:$B))
  1. 按下回车后,就能得到对应组合的时间总和,之后可以直接下拉、右拉填充整个「Time」表的单元格

公式逻辑简单解释:

  • 三次SUBSTITUTE函数:给每个以B/S/T开头的名称前加逗号,把连续的组合字符串(比如B1B12)变成,B1,B12的格式
  • TEXTSPLIT函数:按逗号把字符串拆分成单个名称的数组(比如{"","B1","B12"}
  • SUMIF+SUM:对每个名称在「Number」表中查找对应的时间值,最后把所有值求和

方法二:自定义VBA函数(兼容所有Excel版本)

如果你的Excel版本比较旧,没有TEXTSPLIT函数,可以用VBA写个自定义函数:

  1. 打开Excel后,按下Alt + F11打开VBA编辑器
  2. 右键点击左侧的工作簿名称,选择「插入」→「模块」
  3. 在弹出的模块编辑窗口中,粘贴以下代码:
Function SumCombined(combinedText As String, nameRange As Range, valueCol As Integer) As Double
    Dim total As Double
    Dim tempStr As String
    Dim nextPos As Integer
    Dim currentName As String
    
    total = 0
    tempStr = combinedText
    
    Do While tempStr <> ""
        ' 寻找下一个名称的起始位置
        nextPos = Len(tempStr) + 1
        If InStr(tempStr, "B") > 1 And InStr(tempStr, "B") < nextPos Then nextPos = InStr(tempStr, "B")
        If InStr(tempStr, "S") > 1 And InStr(tempStr, "S") < nextPos Then nextPos = InStr(tempStr, "S")
        If InStr(tempStr, "T") > 1 And InStr(tempStr, "T") < nextPos Then nextPos = InStr(tempStr, "T")
        
        If nextPos > 1 Then
            ' 提取第一个名称并求和
            currentName = Left(tempStr, nextPos - 1)
            total = total + Application.VLookup(currentName, nameRange, valueCol, False)
            tempStr = Mid(tempStr, nextPos)
        Else
            ' 处理最后一个名称
            total = total + Application.VLookup(tempStr, nameRange, valueCol, False)
            tempStr = ""
        End If
    Loop
    
    SumCombined = total
End Function
  1. 关闭VBA编辑器回到Excel界面,在「Time」表的目标单元格输入公式:
=SumCombined(Size!B2, Number!$A:$B, 2)
  • 参数解释:Size!B2是「Size」表中要处理的组合字符串;Number!$A:$B是「Number」表中名称和时间的区域;2表示要取「Number」表中第2列的时间值
  1. 同样下拉、右拉填充即可完成所有单元格的计算

你之前用VLOOKUP出错的原因:

VLOOKUP只能针对单个匹配值查找结果,没法直接处理多个名称的组合字符串,所以单独用它没办法实现求和,需要结合拆分字符串或者自定义函数来处理~

备注:内容来源于stack exchange,提问作者Hoang-Giang Pham

火山引擎 最新活动