命名列的求和项

时间:2017-10-26 08:37:55

标签: excel excel-formula

如何将表中列的所有产品与另一个表相加?

为了使其更清晰,请查看附加的图像。我希望表Cost的列TableA等于

=sum([A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]); ....)

TableA的每一列都是如此。

然而,我非常不愿意手动完成并尝试使用公式自动生成,所以如果我添加另一个列,我就不必修改Cost列中的公式< / p>

enter image description here

修改

到目前为止我所得到的是这样的:

=sum(
    [A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]);
    [B]*Lookup([[B];[#Headers]]; Parameters[What]; Parameters[Cost]);
    [C]*Lookup([[C];[#Headers]]; Parameters[What]; Parameters[Cost])
)

如果我添加一个,我希望有一个涵盖新列的公式。所以,我们说我已经添加了一个名为NEW的列,因此公式应该会自动提取并有效地工作:

=sum(
    [A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]);
    [B]*Lookup([[B];[#Headers]]; Parameters[What]; Parameters[Cost]);
    [C]*Lookup([[C];[#Headers]]; Parameters[What]; Parameters[Cost]);
    [NEW]*Lookup([[NEW];[#Headers]]; Parameters[What]; Parameters[Cost])
)

Parameters表当然会包含值为NEW

的行

3 个答案:

答案 0 :(得分:0)

如果您希望项目1为(50 * 4 + 5 * 100 + 1 * 150),那么您可以在单元格B3中应用此公式,假设单词“成本在单元格B2中

INDEX($B$7:$B$9,MATCH($C$2,$A$7:$A$9,0))*$C3+INDEX($B$7:$B$9,MATCH($D$2,$A$7:$A$9,0))*$D3+INDEX($B$7:$B$9,MATCH($E$2,$A$7:$A$9,0))*$E3 

答案 1 :(得分:0)

如果表TableAParameters中的参数顺序相同,那么您可以在Cost列中使用以下内容:

=SUMPRODUCT(TRANSPOSE(TableA[@[A]:[C]])*Parameters[Cost])

作为数组公式输入(即输入公式,然后按Enter键,按Ctrl + Shift + Enter键)

enter image description here

编辑:

如果TableA中的列没有被排序,但是参数中的列是,那么你可以使用以下(我不是100%肯定它总是有效,但我已经测试了一下它似乎工作正常):

=SUMPRODUCT(TableA[@[A]:[C]]*LOOKUP(TableA[[#Headers],[A]:[C]],Parameters[What],Parameters[Cost]))

不需要输入数组公式。

答案 2 :(得分:0)

对此答案进行了修改,以考虑您的声明,即TableA的列不一定与Parameters表的行中的条目匹配。

如果你不介意使用宏代码,你可以定义自己的功能来完成这项工作:

Option Explicit

Public Function TotalCost(rItemCodes As Range, rCostTable As Range, rItemCounts As Range) As Double
    '// this function returns the total cost of an item using
    '// a lookup into a table of costs from a code, multiplying
    '// the item count by the corresponding cost

    Dim rItemCount As Range
    Dim rCost As Range
    Dim rCode As Range
    Dim rMatchingCode As Range

    '// Define the code list as the first column of the cost table
    Dim rCodeList As Range
    Set rCodeList = rCostTable.Columns(1)

    TotalCost = 0

    Dim ix As Integer

    '// Loop through every item code
    For ix = 1 To rItemCodes.Columns.Count
        Set rItemCount = rItemCounts.Cells(1, ix)
        Set rCode = rItemCodes.Cells(1, ix)
        Set rMatchingCode = Nothing

        On Error Resume Next

            '// Find the item that matches in the cost list
            Set rMatchingCode = rCodeList.Find(rCode.Value, LookAt:=xlWhole)

            '// Check it was found, and calculate the additional cost
            If Not rMatchingCode Is Nothing Then
                Set rCost = rMatchingCode.Cells(1, 2)
                TotalCost = TotalCost + rItemCount.Value * rCost.Value
            End If

        On Error GoTo 0
    Next ix


End Function

如果您在参数表中命名成本表,例如,CostTable(示例中的范围A8:B10)和表A的标题行,例如CodeList(示例中的范围C1:E1),那么B2中的公式为=TotalCost(CodeList,CostTable,C2:E2)