2016-07-29 112 views
-1

我想根据数字的范围应用不同的公式。任何人都可以帮我纠正这个公式吗?Excel如果公式更正?

=If(AND(B4>0,B4 < 50000), 0, IF(AND(B4>49999.99,B4 < 100000),((B4-50000)*0.0275*2/3), IF(AND(B4>99999.99,B4<150000),(B4*.02+1850),IF(AND(B4>149999.99,B4<250000),(B4*.07/3+2850),IF(B4>249999.99),(B4*.08/3+5185))))) 

换句话说,如果号码是0-50k,应用一个公式,如果50K-100K,采用不同的配方等

任何想法如何使它工作吗?谢谢!

+0

你有什么问题?什么是错误? – lurker

+0

你的数字都是正数吗? –

+0

不平衡的偏见。它应该以',IF(B4> 249999.99,(B4 * .08/3 + 5185))))))结尾' – JNevill

回答

3

菊花链如果语句excel会按顺序查看它们,只要有一个是真的,就会停止查找。

鉴于这一点,我们不需要对每个if都括起来。

=IF(B4 < 50000, 0, IF(B4 < 100000,(B4-50000)*0.0275*2/3, IF(B4<150000,B4*0.02+1850,IF(B4<250000,B4*0.07/3+2850,B4*0.08/3+5185)))) 

如果它小于50000,那么第一个将是true,并且excel将不会查看该语句的其余部分。

如果数字是75000,那么第一个将是错误的,并且excel将移动下一个将是真的,并且excel将停止查找。

知道这一点,我们可以避免只是混淆水的AND()。

然后最后一个公式我们根本不需要IF语句。如果它大于250000,所有四个将解决错误,并且结束公式将被触发。

2

由于您只处理数字,因此可能会发现处理布尔运算而不是嵌套if()函数更容易。

使用该技术,我们有一个条件,即要么是TRUEFALSE其是相同或10。这样会被写成这样我们的条件:

If(condition, result_if_true) 

会,相反,这样写:

(condition*result_if_true) 

如果我们result_if_true是B4+1B4等于5作为一个例子,我们的情况是真实的,然后:

(1*(B4+1))=(1*(5+1)) = 6 

否则我们得到:

(0*(B4+1))=(0*(5+1)) = 0 

您可以将一堆这些(condition*result_if_true)语句添加到一起,而不是嵌套的if()公式。你的情况:

=(AND(B4>0,B4 < 50000) * 0) + (AND(B4>49999.99,B4 < 100000) * ((B4-50000)*0.0275*2/3)) + (AND(B4>99999.99,B4<150000) * (B4*.02+1850)) + (AND(B4>149999.99,B4<250000) * (B4*.07/3+2850)) + ((B4>249999.99) * (B4*.08/3+5185)) 

我喜欢使用多条线路在公式编辑栏中当这些开始变得讨厌:

=(AND(B4>0,B4 < 50000) * 0) + 
(AND(B4>49999.99,B4 < 100000) * ((B4-50000)*0.0275*2/3)) + 
(AND(B4>99999.99,B4<150000) * (B4*.02+1850)) + 
(AND(B4>149999.99,B4<250000) * (B4*.07/3+2850)) + 
((B4>249999.99) * (B4*.08/3+5185)) 

这是一个容易得多,现在跟踪您的打开和关闭括号等等你不会结束一个大混乱。此外,回到Excel 2003中,您只能嵌套7个IF,这是一个很好的解决方案。我相信现在你可以走64级,如果你接近这个极限,愿上帝怜悯你的灵魂。