Excel 映射多行的Sumproduct
我想写一个excel公式,它将根据行的匹配对值求和。要匹配的单元格可以出现多次,根据映射图例,它们应该返回值的总和 在黄色单元格中,我试图根据G3:G8中名称的匹配情况,根据图例到项目1、项目2和项目3的映射,计算B9:B21范围内的值之和。 如果要求和的数组与映射图例相同,我已经得到了关于如何求和值的答案。但现在,我的数组将在扩展和SUMPRODUCT公式中求和,不再有效:Excel 映射多行的Sumproduct,excel,excel-formula,Excel,Excel Formula,我想写一个excel公式,它将根据行的匹配对值求和。要匹配的单元格可以出现多次,根据映射图例,它们应该返回值的总和 在黄色单元格中,我试图根据G3:G8中名称的匹配情况,根据图例到项目1、项目2和项目3的映射,计算B9:B21范围内的值之和。 如果要求和的数组与映射图例相同,我已经得到了关于如何求和值的答案。但现在,我的数组将在扩展和SUMPRODUCT公式中求和,不再有效: 有解决方案吗?这需要改进,但它是一个初学者用户定义的功能,可以在工作表中使用 函数GetSum arg1项目字符串要与之
有解决方案吗?这需要改进,但它是一个初学者用户定义的功能,可以在工作表中使用 函数GetSum arg1项目字符串要与之匹配的项目,例如Item2 arg2 sourceData Range要根据项求和的数据范围 arg3 lookup Range包含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
数据:
修正你的公式:
=SUMPRODUCT(--(NOT(ISERROR(MATCH(B11:B20,F6:F9,0)))),C11:C20)
如图所示,无法更改excel语言sosad:
作为未来项目的一般指导原则,我建议使用帮助器列标记项目,并大大简化公式:
您的数组长度不相等,这就是上面的方法不起作用的原因。你可以考虑一个简单的VBA函数吗?你能不能简单地在C10:C21中添加一个帮助器列,使用一个索引和匹配公式,然后使用一个简单的SUMIF公式?公式可以用在B3、B4和B5中:{= SUMPRODE $ 10美元:$$ 21=TIFTSPSPOSE $F$ 3:$F$ 8=$A3,转置$G $ 3:$G $ 8 *$B$10:$B$21 }只是出于好奇才贴的。帮助器列确实是更好的解决方案。Alex Richter:谢谢,它实际上工作得很好:我感谢您的帮助,但映射图例是必须的,因为它将存储在单独的工作表中,没有额外的帮助器列会干扰输入值。这正是我为什么在回答的第一部分保留映射图例的原因。然后,您可以考虑使用辅助列索引匹配与另一个片断中的图例映射,因为您将不得不执行更复杂的操作!这有利于提高可审计性;玩得开心哇!这是最重要的解决办法,我必须说:非常感谢