Table of contents
本教程介绍了如何使用Excel的COUNTIF和COUNTIFS函数来计算具有多个OR条件的单元格,例如,如果一个单元格包含X、Y或Z。
众所周知,Excel的COUNTIF函数被设计成只根据一个标准来计算单元格,而COUNTIFS则用AND逻辑来评估多个标准。 但如果你的任务需要OR逻辑--当提供了几个条件时,任何一个条件都可以匹配到计数中,那该怎么办?
这个任务有几种可能的解决方案,本教程将全面介绍它们。 这些例子意味着你对这两个函数的语法和一般用途有很好的了解。 如果没有,你可能要从修改基础知识开始。
Excel COUNTIF函数--对具有一个标准的单元格进行计数。
Excel COUNTIFS函数--对具有多个AND条件的单元格进行计数。
现在大家都在同一起跑线上了,让我们深入了解。
计算Excel中具有OR条件的单元格
本节涵盖了最简单的情况--计算满足任何(至少一个)指定条件的细胞。
公式1:COUNTIF+COUNTIF
最简单的方法是计算有一个或另一个值的单元格(Corntif a 或 b )是写一个常规的COUNTIF公式来单独计算每个项目,然后将结果相加。
COUNTIF( 范围 , 标准1 ) + COUNTIF( 范围 , 标准2 )作为一个例子,让我们找出A列中有多少单元格包含 "苹果 "或 "香蕉"。
=COUNTIF(A:A, "apples") + COUNTIF(A:A, "bananas")
在现实生活中的工作表中,为了使公式工作得更快,对范围而不是整列进行操作是一个很好的做法。 为了避免每次条件改变时更新公式的麻烦,可以在预定义的单元格(如F1和G1)中输入感兴趣的项目,并引用这些单元格。 例如,。
=countif(a2:a10, f1) + countif(a2:a10, g1)
这种技术对几个标准来说很好用,但把三个或更多的COUNTIF函数加在一起会使公式过于繁琐。 在这种情况下,你最好坚持使用下面的一个替代方案。
公式2.带有阵列常数的COUNTIF
下面是Excel中带OR条件的SUMIF公式的一个更紧凑的版本。
SUM(COUNTIF( 范围 , { 标准1 , 标准2 , 标准3 , ...}))该公式是这样构建的。
首先,你把所有的条件打包成一个数组常量--各个项目用逗号隔开,数组用大括号括起来,比如{"苹果"、"香蕉"、"柠檬"}。
然后,你把这个数组常数包含在 标准 普通COUNTIF公式的参数:COUNTIF(A2:A10, {"苹果", "香蕉", "柠檬"})
最后,在SUM函数中翘起COUNTIF公式。 这是必要的,因为COUNTIF将返回 "苹果"、"香蕉 "和 "柠檬 "的3个单独计数,你需要将这些计数加在一起。
我们的完整公式如下。
=SUM(COUNTIF(A2:A10,{"苹果"、"香蕉"、"柠檬"})
如果你愿意将你的标准作为 范围参考 ,你需要用Ctrl + Shift + Enter输入公式,使之成为一个数组公式。 例如。
=sum(countif(a2:a10,f1:h1))
请注意下面截图中的大括号--它是Excel中数组公式最明显的标志。
公式3.SUMPRODUCT
在Excel中用OR逻辑计算单元格的另一种方法是这样使用SUMPRODUCT函数。
SUMPRODUCT(1*( 范围 ={ 标准1 , 标准2 , 标准3 , ...}))为了更好地展示逻辑,这也可以写成:。
SUMPRODUCT(( 范围 标准1 ) + ( 范围 标准2 ) + ...)该公式根据每个标准测试范围内的每个单元格,如果符合标准则返回TRUE,否则返回FALSE。 作为中间结果,你会得到一些TRUE和FALSE值的数组(数组的数量等于你的标准的数量)。 然后,在相同位置的数组元素被加在一起,即所有数组中的第一个元素,第二个元素,以此类推。加法运算将逻辑值转换为数字,所以你最终会得到一个由1(其中一个条件匹配)和0(没有一个条件匹配)组成的数组。 因为所有的条件都是针对相同的单元格进行测试的,所以任何其他数字都不可能出现在结果数组中--只有一个初始数组的特定位置上有TRUE,其他都是FALSE。 最后,SUMPRODUCT将所得数组的元素相加,就可以得到所需的计数。
第一个公式的工作方式类似,不同的是,它返回一个由TRUE和FALSE值组成的二维数组,你将其乘以1,将逻辑值分别转换为1和0。
应用于我们的样本数据集,这些公式具有以下形状。
=SUMPRODUCT(1*(A2:A10={"苹果"、"香蕉"、"柠檬"})
或
=SUMPRODUCT((A2:A10="苹果") + (A2:A10="香蕉") + (A2:A10="柠檬")
把硬编码的数组常数换成一个范围引用,你将得到一个更优雅的解决方案。
=sumproduct(1*( a2:a10=f1:h1))
注意:SUMPRODUCT函数比COUNTIF慢,这就是为什么这个公式最好用在相对较小的数据集上。
用OR以及AND逻辑计算单元格
当处理元素之间有多级和跨级关系的大型数据集时,有可能你需要一次计算有OR和AND条件的单元。
举个例子,让我们统计一下 "苹果"、"香蕉 "和 "柠檬 "的交付量。 我们怎么做呢? 首先,让我们把我们的条件翻译成Excel的语言。
- A栏:"苹果 "或 "香蕉 "或 "柠檬"
- C栏:"交付"。
从另一个角度看,我们需要计算有 "苹果和递送 "或 "香蕉和递送 "或 "柠檬和递送 "的行。 这样说来,任务归结为计算有3个OR条件的单元格--与我们在上一节所做的一模一样!唯一的区别是,你将利用COUNTIFS而不是COUNTIF来评估每个OR条件中的AND标准。
公式1: COUNTIFS + COUNTIFS
这是最长的公式,也是最容易写的公式 :)
=COUNTIFS(A2:A10, "苹果", C2:C10, "交货") + COUNTIFS(A2:A10, "香蕉", C2:C10, "交货")) + COUNTIFS(A2:A10, "柠檬", C2:C10, "交货")
下面的截图显示了同样的公式和单元格引用。
=countifs(a2:a10, k1, c2:c10, k2) + countifs(a2:a10, l1, c2:c10, k2) + countifs(a2:a10, m1,c2:c10, k2)
公式2.带阵列常数的COUNTIFS
通过将OR条件打包在一个数组常数中,可以创建一个具有AND/OR逻辑的更紧凑的COUNTIFS公式。
=SUM(COUNTIFS(A2:A10, {"苹果", "香蕉", "柠檬"}, C2:C10, "交付")
当使用范围参考作为标准时,你需要一个数组公式,通过按Ctrl + Shift + Enter完成。
=sum(countifs(a2:a10,f1:h1,c2:c10,f2))
提示:如果需要,你可以自由使用 通配符 例如,要计算各种香蕉,如 "绿香蕉 "或 "金手指香蕉",你可以使用这个公式。
=SUM(COUNTIFS(A2:A10, {"苹果", "*香蕉*", "柠檬"}, C2:C10, "交付")
以类似的方式,你可以建立一个公式来计算基于其他标准类型的单元格。 例如,为了获得 "苹果 "或 "香蕉 "或 "柠檬 "的计数,并且数量大于200,在COUNTIFS中增加一个标准范围/标准对。
=SUM(COUNTIFS(A2:A10, {"苹果", "*香蕉*", "柠檬"}, C2:C10, "交付", B2:B10, ">200")
或者,使用这个数组公式(通过Ctrl + Shift + Enter输入)。
=SUM(COUNTIFS(A2:A10,F1:H1,C2:C10,F2, B2:B10, ">"&F3))
计算具有多种OR条件的细胞
在前面的例子中,你已经学会了如何测试一组OR条件。 但如果你有两组或更多,而且你想得到所有可能的OR关系的总和呢?
根据你需要处理的条件数量,你可以使用带有数组常数的COUNTIFS或带有ISNUMBER MATCH的SUMPRODUCT。 前者相对容易建立,但它只限于2组OR条件。 后者可以评估任何数量的条件(当然,考虑到Excel的255个参数和8192个字符的总公式长度限制,这是一个合理的数量)。但要掌握这个公式的逻辑可能需要一些努力。
用2组OR条件计数细胞
当只处理两组OR标准时,只需在上面讨论的COUNTIFS公式中再增加一个数组常数。
为了使该公式发挥作用,需要做一个微小但关键的改变:使用一个 水平阵列 (用逗号分隔的元素)为一个标准集和 垂直阵列 (这告诉Excel对两个数组中的元素进行 "配对 "或 "交叉计算",并返回一个二维数组的结果。
作为一个例子,让我们计算 "苹果"、"香蕉 "或 "柠檬",它们要么是 "已交付",要么是 "正在运输"。
=SUM(COUNTIFS(A2:A10, {"苹果", "香蕉", "柠檬"}, B2:B10, {"交付"; "运输中"})
请注意第二个数组常数中的分号。
因为Excel是一个二维的程序,不可能构建一个三维或四维的数组,因此这个公式只适用于两组OR条件。 要计算更多的条件,你将不得不改用更复杂的SUMPRODUCT公式,在下一个例子中解释。
计算具有多组OR条件的细胞
要计算具有两组以上OR条件的单元格,请将SUMPRODUCT函数与ISNUMBER MATCH一起使用。
例如,让我们统计一下 "苹果"、"香蕉 "或 "柠檬 "的数量,它们要么是 "已交付",要么是 "正在运输",并被包装在 "袋 "或 "托盘 "中。
=SUMPRODUCT(ISNUMBER(MATCH(A2:A10,{"苹果"、"香蕉"、"柠檬"},0))*
ISNUMBER(MATCH(B2:B10,{"袋", "盘"},0))*。
ISNUMBER(MATCH(C2:C10,{"交付", "在途"},0)))
在公式的核心部分,MATCH函数通过比较指定范围内的每个单元格和相应的数组常数来检查标准。 如果找到匹配,它返回数组中数值的相对位置,否则为N/A。 ISNUMBER将这些数值转换为TRUE和FALSE,分别等于1和0。 SUMPRODUCT从这里开始,将数组的值乘以因为乘以0会得到0,所以只有所有数组中的1的单元格才会存活并被求和。
下面的截图显示了这一结果。
这就是如何在Excel中使用COUNTIF和COUNTIFS函数来计算具有多个AND以及OR条件的单元格。 要仔细看看本教程中讨论的公式,欢迎下载我们下面的工作簿样本。 感谢你的阅读,希望下周在我们的博客上见到你
实践工作手册
Excel COUNTIF与OR条件--实例(.xlsx文件)。