excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel 不讲道理,明明公式的逻辑很清晰,但是结果却不对!

今天遇到群友问一个 Excel 的 IF 嵌套公式,无法返回他要的结果,然后群友反应热烈,很多人都表示遇到过这个问题,当时的感受是抓破头都没想明白……

这条公式是这样的:

= IF(C4<80%, 0, IF(80%<=C4<100%, C4*C11, IF(100%<=C4<110%, C4*D11, IF(110%<=C4<120%, C4*E11, IF(C4>120%, C4*F11)))))

公式有点长,可以排版一下,更方便查看:

= IF(C4 < 80%, 0,
IF(80% <= C4 < 100%, C4 * C11,
IF(100% <= C4 < 110%, C4 * D11,
IF(110% <= C4 < 120%, C4 * E11,
IF(C4 >= 120%, C4 * F11
)
)
)
)
)

ps:Excel 公式的排版网站在这儿https://www.formulaboost.com/parse

写公式时想表达的逻辑是:

  • C4 < 80%时就返回 0
  • 80% <= C4 < 100%时就返回 C4 * C11
  • 100% <= C4 < 110%时就返回 C4 * D11
  • 110% <= C4 < 120%时就返回 C4 * E11
  • C4 >= 120%时就返回 C4 * F11

逻辑是很清晰了!

但 Excel 就是“不讲道理”,返回的结果就不对!你说气人不气人?

原因

其实问题就出在80% <= C4 < 100%100% <= C4 < 110%110% <= C4 < 120%的写法上。

比如 80% <= C4 < 100% 这个写法,Excel 是从左到右去计算的,首先会将 C480% 比较,得到一个 TRUEFALSE 的结果,然后将这个结果与 100% 比较,再得到一个 TRUEFALSE 的结果。这是为什么语法上并没有报错的原因,它是可以执行的,只是结果不是你想要的罢了。

所以公式要表达的逻辑,正确的写法是:AND(80% <= C4, C4 < 100%),这才是表示: C4 单元格的值大于 80% 而且小于 100%

没办法,这是 Excel 的地盘,必须要按它的运行逻辑来写……

所以原来的公式可以改成:

= IF(C4 < 80%, 0,
IF(AND(80% <= C4, C4 < 100%), C4 * C11,
IF(AND(100% <= C4, C4 < 110%), C4 * D11,
IF(AND(110% <= C4, C4 < 120%), C4 * E11,
IF(C4 >= 120%, C4 * F11
)
)
)
)
)

优化

其实上面的写法是有点啰嗦的,既然 Excel 公式是从左到右计算的。(除非你用括号让右边的先计算

那么在上面的公式中,首先计算的就是C4 < 80%

  • 如果C4 < 80%计算结果为 TRUE,就直接返回公式中的第二参数 0,然后公式就停止计算了
  • 如果C4 < 80%计算结果为 FALSE,就进入第二层 IF 函数继续计算

如果你还搞不太懂公式的计算顺序,可以使用 Excel 的公式求值功能,让你可以更有感觉!

公式求值

所以如果公式能进入第二层 IF 函数,表明了C4 < 80%FALSE,即 C4 >= 80%,所以在第二层 IF 函数的判断条件中,我们无需要再写 C4 >= 80% 这个条件了!(当然你写了也不影响结果,只是啰嗦没必要~

所以直接把上面的公式中的 AND 函数去掉,就精简成这个效果:

= IF(C4 < 80%, 0,
IF(C4 < 100%, C4 * C11,
IF(C4 < 110%, C4 * D11,
IF(C4 < 120%, C4 * E11, C4 * F11)
)
)
)

上面这些公式虽然加了换行(Alt + Enter),但直接复制到 Excel 里,公式都是可以正常使用的,如果不喜欢这种结构,那就用回这种一行的形式吧:

=IF(C4 < 80%, 0, IF(C4 < 100%, C4 * C11, IF(C4 < 110%, C4 * D11, IF(C4 < 120%, C4 * E11, C4 * F11))))

但建议在写公式时,遇到逗号应该在它后面加个空格,这样在看长公式时会舒服一些。

另外,我也建议把其中的百分数转换成小数,不仅更精简,计算速度也会更快些:

=IF(C4 < 0.8, 0, IF(C4 < 1, C4*C11, IF(C4 < 1.1, C4*D11, IF(C4 < 1.2, C4*E11, C4*F11))))

如果你使用 Excel 2019 版本,以上这种 IF 嵌套公式,可以直接使用 IFS 函数,使用起来就更方便了:

=IFS(
C4 < 0.8, 0,
C4 < 1, C4 * C11,
C4 < 1.1, C4 * D11,
C4 < 1.2, C4 * E11,
C4 >= 1.2, C4 * F11
)

这样看起来就更清晰,而且简洁,赶紧让老板给你换新版本(目前最新是 Office 2021)吧~

再优化

对于这种多条件的判断,在提成比例计算数字分组时是经常用到的,如果你的条件达到 5 层以上,整个公式会变得非常复杂,这时可以用 VLOOKUP 的模糊匹配来替代 IF 嵌套。

首先,需要将区间界限(0.8, 1, 1.1, 1.2)以及公式中单元格对应的系数(C11, D11, E11, F11)整理成一张匹配表,并且按照区间界限从小到大排序

匹配表

然后就可以使用 VLOOKUP 来实现和上面的公式同样的计算效果:

= C4 * VLOOKUP(C4, A2:B6, 2, TRUE)

其中 VLOOKUP(C4, A2:B6, 2, TRUE) 部分,就是负责根据 C4 的值去匹配对应的系数回来,利用的是 VLOOKUP 第四个参数设置为 TRUE 的效果:

当把 VLOOKUP 的第四个参数设为 TRUE 时,它表示进行近似匹配(区间查找模式)。这时 VLOOKUP 函数就会找到第一个小于或等于 C4 的值,并返回它所在的行的第 2 列的值。

划重点

最后划一下文章的重点:

  1. 若要表达80% <= C4 < 100%,在 Excel 中要写成AND(80% <= C4, C4 < 100%)的形式
  2. 上层 IF 判断过的条件,下一层 IF 中无需重复判断
  3. 可以把公式中的百分数换成小数,既简洁,计算效率也高
  4. 多层 IF 嵌套可以使用 IFS 来写一层实现,更清晰
  5. 数字区间的多层 IF 嵌套,可以使用 VLOOKUP 来精简

好的,希望文章能对你有帮助🚀🚀🚀

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接