如果 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
将所有这些数字相加
我有以下数据集,想在任何单元格中添加反映 "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
:
{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
检查错误是否 returnedIF
根据错误 决定 SUM
将所有这些数字相加
C
列中的值是否应该 returned 或 0