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

我有以下数据集,并希望添加在任何单元格中反映“ABC”的值。

Column1 Column 2 Column 3 Column 4 Column 5 ABC is good CNN $150 ABC NBA Better life NH $40 LIT MNM Nice Job ABC is good $35 MN ABC Poor HI $200 ITL ABC Best TI $120 SQL ABC Poor life NT $40 LT NM Great BE $800 ABC BEF 

它应该返回的总和是$ 150 + $ 35 + 200 + 120 + $ 400 = $ 905,因为在单元格的某个地方有文本“ABC”。 我尝试使用sumif(查找)公式,但给我价值错误。 有什么想法吗?

简答

使用这个数组公式:

 =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 + enterinput

为了testing一个单元格是否包含ABC我们可以使用SUBSTITUTE forumla和一个LEN来testingstring长度之间的差异:

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将所有单元格连接在一起,然后在新string中查找ABC 。 这节省了大量的代码并简化了逻辑。 它总是使扩展到更多细胞更容易。

范围仅供参考

范围

G1 公式 这是一个数组公式(使用CTRL + SHIFT + ENTERinput)。

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

怎么运行的

  • CONCATENATE形成一个单一的大string,所有的列组合在一起
  • FIND在那个单个string中查找ABC 。 如果find,它将返回一个数字,否则返回一个错误( #VALUE )。
  • ISERR检查是否返回错误
  • IF决定C列中的值是否应该返回,或者是基于那个错误返回0
  • SUM取所有这些数字并添加它们