首页 > 解决方案 > Sumproduct 映射多行

问题描述

我想编写 excel 公式,它将根据行的匹配对值进行求和。要匹配的单元格可以出现多次,并且根据映射图例,它们应该返回值的总和。

在黄色单元格中,我试图根据将图例映射到 Item1,然后是 Item2 和 Item 3,根据 G3:G8 中名称的匹配来计算 B9:B21 范围内的值的总和。我已经得到了关于如何求和的答案如果要求和的数组与映射图例相同,则值。但是现在我的数组要在扩展中求和,并且 SUMPRODUCT 公式不再起作用:

在此处输入图像描述

有解决办法吗?

标签: excelexcel-formula

解决方案


这需要改进,但它是可以在工作表中使用的入门用户定义函数。

函数 GetSum

arg1 item String要匹配的项目,例如 Item2

arg2 sourceData Range根据项目求和的数据范围

arg3查找范围包含映射的数据范围(2 列宽)

Public Function GetSum(ByVal item As String, sourceData As Range, lookup As Range) As Variant
    If lookup.Columns.Count <> 2 Then GetSum = CVErr(xlErrNA)

    Dim lookupDict As Object, arr(), arr2(), i As Long, finalValue As Double
    Set lookupDict = CreateObject("Scripting.Dictionary")
    If lookup.Cells.Count = 1 Then
        ReDim arr(1, 1)
        arr(1, 1) = lookup.Value
    Else
        arr = lookup.Value
    End If
    If sourceData.Cells.Count = 1 Then
        ReDim arr2(1, 1)
        arr2(1, 1) = sourceData.Value
    Else
        arr2 = sourceData.Value
    End If

    For i = LBound(arr, 1) To UBound(arr, 1)
        lookupDict(arr(i, 2)) = arr(i, 1)
    Next i

    For i = LBound(arr2, 1) To UBound(arr2, 1)
        If lookupDict.exists(arr2(i, 1)) Then
            If lookupDict(arr2(i, 1)) = item Then
                finalValue = finalValue + arr2(i, 2)
            End If
        End If
    Next i
    GetSum = finalValue
End Function

数据:


推荐阅读