答案1
对于这种问题,用数组的方式思考会有所帮助。
如果您可以获取值(D 列)中数字的数组(列表),其中字母(B 列)等于“A”并且数字已删除重复项,则您只需对数组求和即可获得答案。
此表达式:
(B$2:B$12=F2)
给出一个数组True/False
,True
其中 B 列 = “A”。这个:
(C$2:C$12<>C$3:C$13)
给出一个数组,其中True/False
包含True
C 列中单元格不等于下一个单元格的位置。由于您的重复项位于连续单元格中(如果不是总是这样,请在下方评论),因此此数组包含False
值的额外出现位置,并且本质上会过滤掉重复项。将这两个数组相乘:
(B$2:B$12=F2)*(C$2:C$12<>C$3:C$13)
将值转换True/False
为 1 和 0,并给出一个数组,其中 1 位于我们希望总和的位置。使用此数组作为logical_test
中的IF()
,并将 D 列用作value_if_true
:
IF((B$2:B$12=F2)*(C$2:C$12<>C$3:C$13)>0,D$2:D$12)
返回 D 列中值为 1 的值的数组,与False
值为 0 的值交错。现在我们可以对数组求和。此公式从 G2 向下填充,结果如下所示。
=SUM(IF((B$2:B$12=F2)*(C$2:C$12<>C$3:C$13)>0,D$2:D$12))
请注意,这是一个数组公式,必须用 输入CTRLShiftEnter。
答案2
如果您能够向数据添加列,则以下给出的简单示例将起作用:
- 添加一个公式来连接字母和数字。我已使用 A 列来执行此公式,即单元格 A2:=B2&C2
- 将此公式向下拖动以应用于单元格 A2:A12
- 添加一个公式来测试每个字母和数字的连接是否是第一个唯一的连接。我已使用 E 列来执行此公式,即单元格 E2:=COUNTIF(A$2:A2,A2)
- 将此公式向下拖动以应用于单元格 E2:E12
- 在 H2 中使用以下公式对字母匹配的值求和,但仅限于第一个字母和数字的连接,即单元格 G2:=SUMIFS($D$2:$D$12,$B$2:$B$12,F2,$E$2:$E$12,1)
- 将此公式向下拖动以应用于单元格 G2:G4