如何将表中列的所有产品与另一个表相加?
为了使其更清晰,请查看附加的图像。我希望表Cost
的列TableA
等于
=sum([A]*Lookup([[A];[#Headers]]; Parameters[What]; Parameters[Cost]); ....)
等TableA
的每一列都是如此。
然而,我非常不愿意手动完成并尝试使用公式自动生成,所以如果我添加另一个列,我就不必修改Cost
列中的公式< / p>
修改
到目前为止我所得到的是这样的:
=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
答案 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)
如果表TableA
和Parameters
中的参数顺序相同,那么您可以在Cost
列中使用以下内容:
=SUMPRODUCT(TRANSPOSE(TableA[@[A]:[C]])*Parameters[Cost])
作为数组公式输入(即输入公式,然后按Enter键,按Ctrl + Shift + Enter键)
编辑:
如果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)
。