excel - Sumproduct 映射多行
问题描述
我想编写 excel 公式,它将根据行的匹配对值进行求和。要匹配的单元格可以出现多次,并且根据映射图例,它们应该返回值的总和。
在黄色单元格中,我试图根据将图例映射到 Item1,然后是 Item2 和 Item 3,根据 G3:G8 中名称的匹配来计算 B9:B21 范围内的值的总和。我已经得到了关于如何求和的答案如果要求和的数组与映射图例相同,则值。但是现在我的数组要在扩展中求和,并且 SUMPRODUCT 公式不再起作用:
有解决办法吗?
解决方案
这需要改进,但它是可以在工作表中使用的入门用户定义函数。
函数 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
数据:
推荐阅读
- android - Google App 从 apk 更改为 app-bundle 并在 Internal Test Track 上发布,但只能找到/下载最新的 apk 版本
- python - 如何使 asyncio cancel() 实际取消任务?
- c++ - TCP 客户端不会自动连接到服务器
- scala - Lagom - 在服务调用组合中添加响应头
- python - Python多个数据框到一个文件
- r - 计算一组数内连续值的最大长度
- monetdb - 在使用 csv 批量加载命令将 csv 文件数据加载到 monet db 时,我们如何用 NULL 替换“”(空字符串)
- java - 预期类型和标识符的非法开头
- java - 我应该在哪里保留将 DTO 转换为实体的方法,反之亦然?
- python - 在我通过正则表达式传递的那些模式中,哪个模式匹配?