如何在 excel 中乘以具有相同 ID 的多个列
How to multiply multiple columns with the same ID in excel
我有一个数据框如下:
ID ColB ColC ColD
102 2 1 2
103 2 3 4
104 3 3 2
104 6 7 5
105 33 3 3
105 22 2 2
106 1 3 2
我想填充一个新的列 E,每次出现一个 ID 时都会找到该列,并对这一行的 ColC 和 ColD 求和,然后将总和乘以 ColB。每次出现 ID 值时,应将所有这些相加,最终填充 table 个唯一 ID 值。
以 104 为例,它应该是这样的
= (B4) *(C4+D4) + (B5) *(C5+D5)
= (3) *(3+2) + (6) *(7+5) = 87
我尝试了 PRODUCT() 和 SUMIF() 的组合,但是我没有得到想要的结果,因为我依赖于基于相同标识符的各种单元格的乘法和求和...
使用 SUMPRODUCT:
=SUMPRODUCT((A2:A8=104)*B2:B8,C2:C8+D2:D8)
不确定您正在寻找多少自动化,或者您希望如何 "clean" 得到答案。我会 post 一种你 可以 做到的方式。不一定是最好的或最干净的。您可以根据自己的口味进行调整。
首先,我做了一个 "scratch" 列 F。我把这个公式放在 F2 中:
=B2*(C2+D2) + B3*(C3+D3)
我将这个公式复制到所有行 F2:F8
这为所有行提供了所需的值,而不仅仅是重复项。接下来,在 E 列中,我通过仅显示具有重复行的值来处理此问题。 E2中的公式为:
=IF(A3=A2,F2,"")
您可以根据需要隐藏 F 列,或将其放在查看区域之外的另一列中。
YMMV
鉴于您希望在每次有新数据添加到 table 时自动执行根据 ID 查找 E 列总和的过程,并生成具有唯一 ID 的新 table并使用 E 列中的相应总和值,您可能想 #powerquery
试一试。
请参阅此 article 了解如何在您的 Excel 版本上使用 Power Query。我的演示使用 Excel 2016.
步骤是:
- 高亮数据范围,使用
Data
选项卡下的From Table函数将数据添加到Power Query Editor ;
- 使用
Add Column
选项卡下的 Custom Column 函数添加自定义列,公式如下:[ColB]*([ColC]+[ColD])
您可以将新列命名为 ColE
;
- 使用
Transform
选项卡下的 Group By 功能对列进行分组,如下所示:
- 关闭并加载结果到新工作表(默认)。
那么你应该有如下内容:
每次在源 table 中创建新条目时,只需右键单击输出中的某处 table 和 select 刷新(或转到 Data
选项卡单击 全部刷新 按钮)。
这里是后台代码,仅供参考。所有步骤均由内置函数执行,无需高级编码。干杯:)
let
Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"ColB", Int64.Type}, {"ColC", Int64.Type}, {"ColD", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "ColE", each [ColB]*([ColC]+[ColD])),
#"Grouped Rows" = Table.Group(#"Added Custom", {"ID"}, {{"ColE", each List.Sum([ColE]), type number}})
in
#"Grouped Rows"
我有一个数据框如下:
ID ColB ColC ColD
102 2 1 2
103 2 3 4
104 3 3 2
104 6 7 5
105 33 3 3
105 22 2 2
106 1 3 2
我想填充一个新的列 E,每次出现一个 ID 时都会找到该列,并对这一行的 ColC 和 ColD 求和,然后将总和乘以 ColB。每次出现 ID 值时,应将所有这些相加,最终填充 table 个唯一 ID 值。
以 104 为例,它应该是这样的
= (B4) *(C4+D4) + (B5) *(C5+D5)
= (3) *(3+2) + (6) *(7+5) = 87
我尝试了 PRODUCT() 和 SUMIF() 的组合,但是我没有得到想要的结果,因为我依赖于基于相同标识符的各种单元格的乘法和求和...
使用 SUMPRODUCT:
=SUMPRODUCT((A2:A8=104)*B2:B8,C2:C8+D2:D8)
不确定您正在寻找多少自动化,或者您希望如何 "clean" 得到答案。我会 post 一种你 可以 做到的方式。不一定是最好的或最干净的。您可以根据自己的口味进行调整。
首先,我做了一个 "scratch" 列 F。我把这个公式放在 F2 中:
=B2*(C2+D2) + B3*(C3+D3)
我将这个公式复制到所有行 F2:F8
这为所有行提供了所需的值,而不仅仅是重复项。接下来,在 E 列中,我通过仅显示具有重复行的值来处理此问题。 E2中的公式为:
=IF(A3=A2,F2,"")
您可以根据需要隐藏 F 列,或将其放在查看区域之外的另一列中。
YMMV
鉴于您希望在每次有新数据添加到 table 时自动执行根据 ID 查找 E 列总和的过程,并生成具有唯一 ID 的新 table并使用 E 列中的相应总和值,您可能想 #powerquery
试一试。
请参阅此 article 了解如何在您的 Excel 版本上使用 Power Query。我的演示使用 Excel 2016.
步骤是:
- 高亮数据范围,使用
Data
选项卡下的From Table函数将数据添加到Power Query Editor ; - 使用
Add Column
选项卡下的 Custom Column 函数添加自定义列,公式如下:[ColB]*([ColC]+[ColD])
您可以将新列命名为ColE
; - 使用
Transform
选项卡下的 Group By 功能对列进行分组,如下所示:
- 关闭并加载结果到新工作表(默认)。
那么你应该有如下内容:
每次在源 table 中创建新条目时,只需右键单击输出中的某处 table 和 select 刷新(或转到 Data
选项卡单击 全部刷新 按钮)。
这里是后台代码,仅供参考。所有步骤均由内置函数执行,无需高级编码。干杯:)
let
Source = Excel.CurrentWorkbook(){[Name="Table4"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"ColB", Int64.Type}, {"ColC", Int64.Type}, {"ColD", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "ColE", each [ColB]*([ColC]+[ColD])),
#"Grouped Rows" = Table.Group(#"Added Custom", {"ID"}, {{"ColE", each List.Sum([ColE]), type number}})
in
#"Grouped Rows"