在学习几乎任何编程语言时,最先接触的一类内容就是条件语句。也就是经典的 IF-ELSEIF-ELSE 结构,它允许程序基于逻辑条件执行不同操作。不过,在 Excel 中,这可能并不是人们首先想到的功能。尽管如此,Excel 中同样提供了这些能力,当您处理具有一定复杂度的 Excel 报表时,它们非常重要。本文将介绍 Excel 中 IF-ELSE 语句的结构,以及在某些场景非常实用的一些更高级函数,如 COUNTIF()。
基本 IF 语句
首先,让我们概览一下如何在 Excel 中编写一个基本的 IF 语句。其语法如下:
IF(condition, value_if_true, value_if_false)
其中:
- condition: 计算结果为 TRUE 或 FALSE 的值或逻辑运算
- value_if_true: 当条件为 TRUE 时返回的值
- value_if_false: 当条件为 FALSE 时返回的值
说到这里,让我们通过一个简单的示例表格来演示基本条件的使用:
很简单对吧?如果您熟悉 R,可能已经注意到这个语法与 ifelse() 函数基本相同。不过,还是有一些不同之处,例如逻辑运算符。在这个简单示例中,我使用了 “>” 逻辑运算符,它是表示大于的标准方式。然而,还有一些并不那么“标准”的写法,比如不等于运算符写作 “<>”。
Excel 中可用的所有逻辑运算符如下表所示:
| 比较运算符 | 含义 | 简单示例 |
|---|
| = | 等于 | A1 = B1 |
| > | 大于 | A1 > B1 |
| >= | 大于或等于 | A1 >= B1 |
| < | 小于 | A1 < B1 |
| <= | 小于或等于 | A1 <= B1 |
| <> | 不等于 | A1 <> B1 |
OR()、AND() 和 NOT()
与您在 Python、R 或 Matlab 中使用的条件语句相比,Excel 的差异不止体现在比较运算符上。定义布尔运算(如 OR、AND、NOT)的方式也不同。例如,在 Excel 中,您会这样写一个 OR 表达式:
IF(OR(value_1 = k, value_2 = y), value_if_true, value_if_false)
要在 Excel 中看到所有布尔运算符的实际用法,请查看下面的示例:
嵌套 IF 语句
就像在 Python、R 或 Matlab 中可以嵌套 IF-ELSEIF-ELSE 语句一样,Excel 也可以。方法很简单:在一个 IF 语句的 TRUE 或 FALSE 分支中再写一个 IF 语句。这样可以测试更多条件,并根据这些条件返回更多结果。Excel 最多可嵌套 64 个 IF 语句。不过,我强烈建议不要嵌套过多,因为您需要非常小心逻辑,后期调试或修改会变得非常繁琐。
话不多说,下面是在 Excel 中嵌套 IF 的一个简单用例:
COUNTIF() 和 COUNTIFS()
除了传统的 IF 语句外,Excel 还有其他函数可基于一组给定条件执行操作。本节将重点介绍条件计数函数,具体是 COUNTIF() 和 COUNTIFS()。
COUNTIF() 允许用户统计满足单一条件的单元格。其语法如下:
COUNTIF(cell_range_to_count, criteria)
其中:
- cell_range_to_count: 您希望统计的单元格范围
- criteria: 控制应统计哪些单元格的条件。形式多样,例如:
- COUNTIF(A1:A10, 10) —— 统计 A1 到 A10 范围内等于 10 的单元格数量
- COUNTIF(A1:A10, B5) —— 统计 A1 到 A10 范围内等于单元格 B5 值的单元格数量
- COUNTIF(A1:A10, "Gandalf") —— 统计 A1 到 A10 范围内等于 "Gandalf" 的单元格数量
- COUNTIF(A1:A10, ">20") —— 统计 A1 到 A10 范围内大于 20 的单元格数量
- COUNTIF(A1:A10, "<>Gandalf") —— 统计 A1 到 A10 范围内不等于 "Gandalf" 的单元格数量
顾名思义,COUNTIFS 与 COUNTIF 的不同在于它允许用户统计满足多个条件的单元格。其语法如下:
COUNTIFS(cell_range_to_count_1, criteria_1, cell_range_to_count_2, criteria_2,...cell_range_to_count_n, criteria_n)
需要注意的是,在 COUNTIFS 中为每个附加的范围指定条件时,该范围的行数和列数必须与原始范围(cell_range_to_count_1)一致,否则会报错。
这两个函数在商业报表中非常好用。对我来说,最典型的例子之一是:它们能轻松统计我们销售代表每月的预约数量,以及他们在销售漏斗中的位置。
在下面的视频中,我将演示这两个函数的实际效果。首先,我们仅统计一组虚构销售人员的预约总数:
是不是很轻松?您刚刚汇总了每位虚构销售人员的预约总数。理论上,也可以只用基本 IF 语句来实现相同结果,但需要多费不少功夫。
现在,假设您还想按月统计每位销售人员的预约量。这时,COUNTIFS() 就派上用场了;您可以在下面视频中看到它的用法:
注: 您可能注意到,在上一个视频中,我用 $ 符号锁定了要统计的范围。这样做是为了在向下拖动公式时防止范围发生变化。
搞定,我们毫不费力地按月汇总了这些示例销售人员的预约量。值得一提的是,如果您通过 $ 符号锁定某些单元格和区域,避免在拖动公式时发生移动,其实可以用一种更“高效”的方式来实现(例如,我本可以只在 F2 中写好公式,然后将其拖拽到其他位置)。不过,为了更直观,我分别为一月和二月写出了 COUNTIFS 公式,便于理解。如果您感兴趣,建议尝试重新编写 F2 中的 COUNTIFS() 公式,使其在拖动至其余单元格时也能得到相同结果。这会是个有用的练习,因为当您的 Excel 商业报表规模变大时,灵活运用锁定范围和单元格,以便拖动公式将非常便利。此教程使用的数据表在此。
SUMIF() 和 SUMIFS()
我们已经看到,利用 COUNTIF() 和 COUNTIFS() 可以统计满足单一或多个条件的单元格数量。但如果您需要求和而非计数该怎么办?这时就要用到 SUMIF() 和 SUMIFS()。例如,当您需要汇总某位销售人员的总营收或按月营收时,这两个函数尤其有用。它们的语法如下:
SUMIF(criteria_range, criteria, (optional) sum_range)
SUMIFS(sum_range, criteria_range_1, criteria_1, criterion_range_2, criteria_2...criteria_range_n, criteria_n)
其中:
- criteria_range: 用于匹配条件的单元格范围。
- criteria: 用于确定哪些单元格将被相加的条件。
- sum_range: 要进行求和的单元格范围。如果在 COUNTIF() 中未提供,则对criteria_range 中的单元格求和。
事不宜迟,让我们通过一个示例,同时使用 SUMIF() 和 SUMIFS() 来计算我们的虚构销售代表产生的总营收以及按月营收:
有趣的是,对于 SUMIFS(),sum_range 是必需参数且位于第一个参数位置;而在 SUMIF() 中它是可选参数且位于最后。这在同时使用两种公式时容易混淆,正如我在输入二月份的 SUMIFS 公式时所展示的那样。因此,建议在两种公式间切换时务必小心,始终确认您正在求和的单元格范围是否正确。
IFERROR()
如果您了解编程/脚本语言,就会知道有用于错误处理的 try/catch 结构。在 Excel 中,我们可以用 IFERROR() 来完成同样的事情。IFERROR 函数允许“捕获”诸如 #N/A、#VALUE! 或 #REF! 等错误,并给出更有意义的输出。IRERROR 函数的语法如下:
IFERROR(value, value_if_error)
其中:
- value: 要检查是否出错的值或公式
- value_if_error: 当函数遇到错误时输出的值。
来看一下它在实际中的效果:
在处理销售业务报表时,将某些计算包裹在 IFERROR 函数中通常是个好习惯。有时,新入职的销售人员预约、合格商机或成交量很少,在计算例如“某销售将预约转化为合格商机的百分比”时可能出现被 0 除的情况。这会产生难看的错误提示,影响报表的整洁度和管理者的阅读体验。然而,如果使用 IFERROR() 包裹这些计算,您就可以用更友好的符号(例如短横线)替代错误信息,让报表更易于展示。此外,IFERROR() 不仅能输出更美观的错误消息,您还可以将其嵌套起来,实现如链式 VLOOKUP 等操作。
结语
恭喜您!现在,您已经了解了在 Excel 中利用条件的多种方式。本文尝试覆盖我在制作 Excel 商业报表时最常用的那些函数。不过,如果您还想进一步学习该主题,还有一些本文未涉及但可能感兴趣的函数,如 SWITCH()、AVERAGEIF() 或 AVERAGEIFS() 等。
此外,在 COUNTIFS() 等函数中使用通配符也是合法且有效的做法,可用于统计部分字符串匹配。比如,假设您有一个餐厅菜单项列表的 Excel 文件,想要统计其中提到“fish”一词的项数。这种情况下,您可以编写 COUNTIF(cell_range,"*fish"),该函数会统计如 swordfish 或 dolphinfish 之类的条目。我强烈建议您进一步了解通配符的使用,因为它们非常实用,且您永远不知道在下一个 Excel 项目中何时会用得上。
最后,您也可以了解 DataCamp 上的 Data Analysis with Spreadsheets 课程,其中包含专门的条件函数章节,可供进一步参考。
欢迎查看我们的 Python 中的 if…elif…else 教程。
在学习几乎任何编程语言时,最先接触的一类内容就是条件语句。也就是经典的 IF-ELSEIF-ELSE 结构,它允许程序基于逻辑条件执行不同操作。不过,在 Excel 中,这可能并不是人们首先想到的功能。尽管如此,Excel 中同样提供了这些能力,当您处理具有一定复杂度的 Excel 报表时,它们非常重要。本文将介绍 Excel 中 IF-ELSE 语句的结构,以及在某些场景非常实用的一些更高级函数,如 COUNTIF()。
基本 IF 语句
首先,让我们概览一下如何在 Excel 中编写一个基本的 IF 语句。其语法如下:
IF(condition, value_if_true, value_if_false)其中:
说到这里,让我们通过一个简单的示例表格来演示基本条件的使用:
很简单对吧?如果您熟悉 R,可能已经注意到这个语法与 ifelse() 函数基本相同。不过,还是有一些不同之处,例如逻辑运算符。在这个简单示例中,我使用了 “>” 逻辑运算符,它是表示大于的标准方式。然而,还有一些并不那么“标准”的写法,比如不等于运算符写作 “<>”。
Excel 中可用的所有逻辑运算符如下表所示:
OR()、AND() 和 NOT()
与您在 Python、R 或 Matlab 中使用的条件语句相比,Excel 的差异不止体现在比较运算符上。定义布尔运算(如 OR、AND、NOT)的方式也不同。例如,在 Excel 中,您会这样写一个 OR 表达式:
IF(OR(value_1 = k, value_2 = y), value_if_true, value_if_false)要在 Excel 中看到所有布尔运算符的实际用法,请查看下面的示例:
嵌套 IF 语句
就像在 Python、R 或 Matlab 中可以嵌套 IF-ELSEIF-ELSE 语句一样,Excel 也可以。方法很简单:在一个 IF 语句的 TRUE 或 FALSE 分支中再写一个 IF 语句。这样可以测试更多条件,并根据这些条件返回更多结果。Excel 最多可嵌套 64 个 IF 语句。不过,我强烈建议不要嵌套过多,因为您需要非常小心逻辑,后期调试或修改会变得非常繁琐。
话不多说,下面是在 Excel 中嵌套 IF 的一个简单用例:
COUNTIF() 和 COUNTIFS()
除了传统的 IF 语句外,Excel 还有其他函数可基于一组给定条件执行操作。本节将重点介绍条件计数函数,具体是 COUNTIF() 和 COUNTIFS()。
COUNTIF() 允许用户统计满足单一条件的单元格。其语法如下:
COUNTIF(cell_range_to_count, criteria)其中:
顾名思义,COUNTIFS 与 COUNTIF 的不同在于它允许用户统计满足多个条件的单元格。其语法如下:
COUNTIFS(cell_range_to_count_1, criteria_1, cell_range_to_count_2, criteria_2,...cell_range_to_count_n, criteria_n)需要注意的是,在 COUNTIFS 中为每个附加的范围指定条件时,该范围的行数和列数必须与原始范围(cell_range_to_count_1)一致,否则会报错。
这两个函数在商业报表中非常好用。对我来说,最典型的例子之一是:它们能轻松统计我们销售代表每月的预约数量,以及他们在销售漏斗中的位置。
在下面的视频中,我将演示这两个函数的实际效果。首先,我们仅统计一组虚构销售人员的预约总数:
是不是很轻松?您刚刚汇总了每位虚构销售人员的预约总数。理论上,也可以只用基本 IF 语句来实现相同结果,但需要多费不少功夫。
现在,假设您还想按月统计每位销售人员的预约量。这时,COUNTIFS() 就派上用场了;您可以在下面视频中看到它的用法:
注: 您可能注意到,在上一个视频中,我用 $ 符号锁定了要统计的范围。这样做是为了在向下拖动公式时防止范围发生变化。
搞定,我们毫不费力地按月汇总了这些示例销售人员的预约量。值得一提的是,如果您通过 $ 符号锁定某些单元格和区域,避免在拖动公式时发生移动,其实可以用一种更“高效”的方式来实现(例如,我本可以只在 F2 中写好公式,然后将其拖拽到其他位置)。不过,为了更直观,我分别为一月和二月写出了 COUNTIFS 公式,便于理解。如果您感兴趣,建议尝试重新编写 F2 中的 COUNTIFS() 公式,使其在拖动至其余单元格时也能得到相同结果。这会是个有用的练习,因为当您的 Excel 商业报表规模变大时,灵活运用锁定范围和单元格,以便拖动公式将非常便利。此教程使用的数据表在此。
SUMIF() 和 SUMIFS()
我们已经看到,利用 COUNTIF() 和 COUNTIFS() 可以统计满足单一或多个条件的单元格数量。但如果您需要求和而非计数该怎么办?这时就要用到 SUMIF() 和 SUMIFS()。例如,当您需要汇总某位销售人员的总营收或按月营收时,这两个函数尤其有用。它们的语法如下:
SUMIF(criteria_range, criteria, (optional) sum_range)SUMIFS(sum_range, criteria_range_1, criteria_1, criterion_range_2, criteria_2...criteria_range_n, criteria_n)其中:
事不宜迟,让我们通过一个示例,同时使用 SUMIF() 和 SUMIFS() 来计算我们的虚构销售代表产生的总营收以及按月营收:
有趣的是,对于 SUMIFS(),sum_range 是必需参数且位于第一个参数位置;而在 SUMIF() 中它是可选参数且位于最后。这在同时使用两种公式时容易混淆,正如我在输入二月份的 SUMIFS 公式时所展示的那样。因此,建议在两种公式间切换时务必小心,始终确认您正在求和的单元格范围是否正确。
IFERROR()
如果您了解编程/脚本语言,就会知道有用于错误处理的 try/catch 结构。在 Excel 中,我们可以用 IFERROR() 来完成同样的事情。IFERROR 函数允许“捕获”诸如 #N/A、#VALUE! 或 #REF! 等错误,并给出更有意义的输出。IRERROR 函数的语法如下:
IFERROR(value, value_if_error)其中:
来看一下它在实际中的效果:
在处理销售业务报表时,将某些计算包裹在 IFERROR 函数中通常是个好习惯。有时,新入职的销售人员预约、合格商机或成交量很少,在计算例如“某销售将预约转化为合格商机的百分比”时可能出现被 0 除的情况。这会产生难看的错误提示,影响报表的整洁度和管理者的阅读体验。然而,如果使用 IFERROR() 包裹这些计算,您就可以用更友好的符号(例如短横线)替代错误信息,让报表更易于展示。此外,IFERROR() 不仅能输出更美观的错误消息,您还可以将其嵌套起来,实现如链式 VLOOKUP 等操作。
结语
恭喜您!现在,您已经了解了在 Excel 中利用条件的多种方式。本文尝试覆盖我在制作 Excel 商业报表时最常用的那些函数。不过,如果您还想进一步学习该主题,还有一些本文未涉及但可能感兴趣的函数,如 SWITCH()、AVERAGEIF() 或 AVERAGEIFS() 等。
此外,在 COUNTIFS() 等函数中使用通配符也是合法且有效的做法,可用于统计部分字符串匹配。比如,假设您有一个餐厅菜单项列表的 Excel 文件,想要统计其中提到“fish”一词的项数。这种情况下,您可以编写
COUNTIF(cell_range,"*fish"),该函数会统计如 swordfish 或 dolphinfish 之类的条目。我强烈建议您进一步了解通配符的使用,因为它们非常实用,且您永远不知道在下一个 Excel 项目中何时会用得上。最后,您也可以了解 DataCamp 上的 Data Analysis with Spreadsheets 课程,其中包含专门的条件函数章节,可供进一步参考。
欢迎查看我们的 Python 中的 if…elif…else 教程。