在 Excel 中按组汇总值(类似于group by分组求和)
前言
有时,您可能需要根据表中的组对值求和。 例如,我在另一列中有一个带有相应数量的产品列表,现在,我想获取每个产品的小计金额,如下图所示。 本教程将介绍一些用于在 Excel 中解决此任务的公式。
按组汇总值 - 原始数据表中的小计
这里根据 Excel 中的组对值求和的通用语法应该是这样的:
1 | =IF(group_name=cell_above_group_name, "" ,SUMIF(group_range,group_name,sum_range)) |
- group_name:要求和的组名所在的单元格;
- cell_above_group_name:组名上方的单元格;
- group_range:单元格范围包含组名;
- sum_range: 指定组名对应的单元格范围求和。
如果数据按分组列排序,则相同的产品排列在一起,如下图所示。 要按组对数据进行小计,您可以基于 IF 和 SUMIF 函数创建公式。
请将以下公式复制并粘贴到数据旁边的空白单元格中
1 | =IF(A2=A1,"",SUMIF($A$2:$A$13,A2,$B$2:$B$13)) |
- 备注: 在公式:
- A1 是标题单元格,并且 A2 是包含您要使用的产品名称的第一个单元格;
- A2:A13 该列表是否包含您要基于的产品名称;
- B2:B13 是要获取小计的列数据。
2. 然后,将填充手柄向下拖动到要使用此公式的单元格,并根据每个产品名称计算小计,请参见屏幕截图:
公式说明:
=IF(A2=A1,"",SUMIF($A$2:$A$13,A2,$B$2:$B$13))
- SUMIF($A$2:$A$13,A2,$B$2:$B$13):如果范围 A2:A13 中的相应值等于条件 A2,则此 SUMIF 函数将仅对范围 B13:B2 中的值求和。
- IF(A2=A1,"",SUMIF($A$2:$A$13,A2,$B$2:$B$13)):此 IF 函数检查 A 列中的每个值,如果其值与上述单元格中的值相同。 例如,如果单元格值 A2 等于单元格 A1,则不返回任何内容(“”),如果不匹配,则返回 SUMIF 函数的结果。
按组汇总值 - 另一个位置的小计
如果每组的值没有排列在一起,在列中随机列出,要根据组或类别对匹配值求和,您应该从产品名称中提取每个组名,然后根据该组名得到小计为下面的截图显示。
1. 首先,请使用以下数组公式提取唯一的组名,然后按 Ctrl + Shift + Enter 键在一起以获得第一个结果。
1 | =INDEX($A$2:$A$13,MATCH(0,COUNTIF($D$1:D1,$A$2:$A$13),0)) |
- 备注: 在公式:
- A2:A13 是提取所有唯一值的单元格范围;
- D1 是您输入的公式上方的单元格。
2. 然后,选择公式单元格并将填充手柄向下拖动到单元格,直到显示所有产品名称,请参阅屏幕截图:
3. 现在,您可以按您提取的组名对值求和。 在这种情况下,此处将使用 SUMIF 函数,请在空白单元格中输入以下公式,在本例中,我将其放入单元格 E2。
=SUMIF($A$2:$A$13,D2,$B$2:$B$13)
4. 然后,向下拖动填充手柄以复制此公式以返回其他组的总顺序,请参见屏幕截图:
使用的相对功能
总结
1、请在第一行配置列名,然后使用如下公式,将$A$13和$B$13修改为真实的数据区域:
1 | =IF(A2=A1,"",SUMIF($A$2:$A$13,A2,$B$2:$B$13)) |
最后,下拉公式即可。
参考
https://zh-cn.extendoffice.com/excel/formulas/excel-sum-by-group.html