我有以下数据集,并希望添加反映" ABC"在任何细胞中。
Column1 Column 2 Column 3 Column 4 Column 5
ABC is good CNN $150 ABC NBA
Better life N-H $40 LIT MNM
Nice Job ABC is good $35 MN ABC
Poor H-I $200 ITL ABC
Best TI $120 SQL ABC
Poor life N-T $40 LT NM
Great BE $800 ABC BEF
它应该返回的金额是150美元+ 35美元+ 200 + 120 + 400美元= 905美元,因为在单元格的某个地方它有文本" ABC"。我尝试使用sumif(find)公式,但给了我价值错误。 有什么想法吗?
答案 0 :(得分:3)
使用此数组公式:
=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 + 输入
要测试单元格是否包含ABC
,我们可以使用SUBSTITUTE
forumla和LEN
来测试字符串长度之间的差异:
LEN(SUBSTITUTE(A:A,"ABC",""))<LEN(A:A)
然后我们可以在IF
语句中包含它以获得一个很好的数组1和0&#39>
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
答案 1 :(得分:2)
由于我们在任何单元格中查找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
。如果找到则返回一个数字,否则返回错误(#VALUE
。ISERR
检查是否返回了错误IF
决定是否应该返回列C
中的值,还是基于该错误0
SUM
获取所有这些数字并添加它们