如果 2 或 3 列包含特定文本,则需要对一列求和

Need to sum a column if 2 or 3 columns contain a specific text

我有以下数据集,想在任何单元格中添加反映 "ABC" 的值。

      Column1      Column 2      Column 3     Column 4   Column 5   
      ABC is good    CNN           0         ABC       NBA
      Better life    N-H                     LIT       MNM
      Nice Job       ABC is good             MN        ABC
      Poor           H-I           0         ITL       ABC
      Best           TI            0         SQL       ABC  
      Poor life      N-T                     LT        NM
      Great          BE            0         ABC       BEF

它应该 return 的总和是 $150+$35+200+120+$400 = $905 因为在单元格的某处有文本 "ABC"。我尝试使用 sumif(find) 公式,但给出了值错误。 有什么想法吗?

简答

使用这个数组公式:

=SUMPRODUCT(IF(IF(LEN(SUBSTITUTE(A:A,"ABC",""))<LEN(A:A),1,0)+IF(LEN(SUBSTITUTE(B:B,"ABC",""))<LEN(B:B),1,0)+IF(LEN(SUBSTITUTE(D:D,"ABC",""))<LEN(D:D),1,0)+IF(LEN(SUBSTITUTE(E:E,"ABC",""))<LEN(E:E),1,0)>0,1,0),C:C)

注意:数组公式输入用ctrl + shift + enter

说明

要测试单元格是否包含 ABC 我们可以使用 SUBSTITUTE 论坛结合 LEN 来测试字符串长度之间的差异:

LEN(SUBSTITUTE(A:A,"ABC",""))<LEN(A:A)

然后我们可以将其包装在 IF 语句中以获得一个由 1 和 0 组成的漂亮数组

IF(IF(LEN(SUBSTITUTE(A:A,"ABC",""))<LEN(A:A),1,0)

如果我们将其映射到您的数据中,它将如下所示:

IF(IF(LEN(SUBSTITUTE(A:A,"ABC",""))<LEN(A:A),1,0) = {0, 1, 0, 0, 0, 0, 0, 0}
IF(IF(LEN(SUBSTITUTE(B:B,"ABC",""))<LEN(B:B),1,0) = {0, 0, 0, 1, 0, 0, 0, 0}
IF(IF(LEN(SUBSTITUTE(D:D,"ABC",""))<LEN(D:D),1,0) = {0, 1, 0, 0, 0, 0, 0, 1}
IF(IF(LEN(SUBSTITUTE(E:E,"ABC",""))<LEN(E:E),1,0) = {0, 0, 0, 1, 1, 1, 0, 0}
                                                 += {0, 2, 0, 2, 1, 1, 0, 1}

然后我们要做的就是检查数组中的数字是否为 >0 并使用 SUMPRODUCT:

将其乘以 C 列
      {0, 2,   0,  2,  1,   1,   0,  1  }
>0    {0, 1,   0,  1,  1,   1,   0,  1  }
*C:C  {0, 150, 40, 35, 200, 120, 40, 800}
=     {0, 150, 0,  35, 200, 120, 0,  800}
-----------------------------------------
SUM = 1305

由于我们要在任何单元格中查找 ABC,因此我们可以使用 CONCATENATE-FIND 将所有单元格连接在一起,然后在新字符串中查找 ABC。这节省了大量代码并简化了逻辑。它总是可以更轻松地扩展到更多单元格。

参考范围

G1 中的公式。这是一个数组公式(使用 CTRL+SHIFT+ENTER 输入)。

=SUM(IF(ISERR(FIND("ABC",CONCATENATE(A1:A7,B1:B7,D1:D7,E1:E7))), 0, C1:C7))

工作原理

  • CONCATENATE 形成一个包含所有列的大字符串
  • FIND 在该单个字符串中查找 ABC。如果找到,它将 return 一个数字,否则将出现一个错误 (#VALUE)。
  • ISERR 检查错误是否 returned
  • IF 根据错误
  • 决定 C 列中的值是否应该 returned 或 0
  • SUM 将所有这些数字相加