如果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
取所有这些数字并添加它们