我想写一个excel公式,该公式将基于行的匹配来求和。要匹配的单元格可以多次出现,并根据Mapping图例返回值的总和。
在黄色单元格中,我尝试根据G3:G8中名称的匹配(根据将图例映射到Item1,然后是Item2和Item 3)来计算范围B9:B21中的值之和。 如果要求和的数组与Mapping图例相同,我已经就如何对值求和的答案。但是,现在我的数组要进行扩展求和,并且SUMPRODUCT公式不再起作用:
有解决方案吗?
答案 0 :(得分:1)
这有待改进,但这是可以在工作表中使用的入门用户定义功能。
功能GetSum
arg1 项目 字符串要与之匹配的项目,例如Item2
arg2 sourceData 范围根据项目求和的数据范围
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
数据:
答案 1 :(得分:0)