Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 映射多行的Sumproduct_Excel_Excel Formula - Fatal编程技术网

Excel 映射多行的Sumproduct

Excel 映射多行的Sumproduct,excel,excel-formula,Excel,Excel Formula,我想写一个excel公式,它将根据行的匹配对值求和。要匹配的单元格可以出现多次,根据映射图例,它们应该返回值的总和 在黄色单元格中,我试图根据G3:G8中名称的匹配情况,根据图例到项目1、项目2和项目3的映射,计算B9:B21范围内的值之和。 如果要求和的数组与映射图例相同,我已经得到了关于如何求和值的答案。但现在,我的数组将在扩展和SUMPRODUCT公式中求和,不再有效: 有解决方案吗?这需要改进,但它是一个初学者用户定义的功能,可以在工作表中使用 函数GetSum arg1项目字符串要与之

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

在黄色单元格中,我试图根据G3:G8中名称的匹配情况,根据图例到项目1、项目2和项目3的映射,计算B9:B21范围内的值之和。 如果要求和的数组与映射图例相同,我已经得到了关于如何求和值的答案。但现在,我的数组将在扩展和SUMPRODUCT公式中求和,不再有效:


有解决方案吗?

这需要改进,但它是一个初学者用户定义的功能,可以在工作表中使用

函数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:谢谢,它实际上工作得很好:我感谢您的帮助,但映射图例是必须的,因为它将存储在单独的工作表中,没有额外的帮助器列会干扰输入值。这正是我为什么在回答的第一部分保留映射图例的原因。然后,您可以考虑使用辅助列索引匹配与另一个片断中的图例映射,因为您将不得不执行更复杂的操作!这有利于提高可审计性;玩得开心哇!这是最重要的解决办法,我必须说:非常感谢