根据另一列中的匹配项以及第三列中第一次出现的值对一列中的值进行求和

根据另一列中的匹配项以及第三列中第一次出现的值对一列中的值进行求和

我正在尝试找出一个基于公式的解决方案,根据匹配另一列中的值对一列中的值进行求和,但仅限于第三列中出现的不同值。

以下是一个简化的示例电子表格:

这是一个非常基本的示例电子表格

我需要将 F 列(A、B、C)中的字母与 B 列“字母”进行匹配,然后对 D 列“值”中的值与 C 列“数字”中每个不同数字相加一次,并在 G 列“值总和”中显示该总和。

G 列单元格中显示了正确的总数,但我没有公式来实现这一点。如能得到任何帮助我将不胜感激!

答案1

对于这种问题,用数组的方式思考会有所帮助。

如果您可以获取值(D 列)中数字的数组(列表),其中字母(B 列)等于“A”并且数字已删除重复项,则您只需对数组求和即可获得答案。

此表达式:

(B$2:B$12=F2)

给出一个数组True/FalseTrue其中 B 列 = “A”。这个:

(C$2:C$12<>C$3:C$13)

给出一个数组,其中True/False包含TrueC 列中单元格不等于下一个单元格的位置。由于您的重复项位于连续单元格中(如果不是总是这样,请在下方评论),因此此数组包含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

如果您能够向数据添加列,则以下给出的简单示例将起作用:

  1. 添加一个公式来连接字母和数字。我已使用 A 列来执行此公式,即单元格 A2:=B2&C2
  2. 将此公式向下拖动以应用于单元格 A2:A12
  3. 添加一个公式来测试每个字母和数字的连接是否是第一个唯一的连接。我已使用 E 列来执行此公式,即单元格 E2:=COUNTIF(A$2:A2,A2)
  4. 将此公式向下拖动以应用于单元格 E2:E12
  5. 在 H2 中使用以下公式对字母匹配的值求和,但仅限于第一个字母和数字的连接,即单元格 G2:=SUMIFS($D$2:$D$12,$B$2:$B$12,F2,$E$2:$E$12,1)
  6. 将此公式向下拖动以应用于单元格 G2:G4

相关内容