Excel IF公式修正?

时间:2016-07-29 20:07:47

标签: excel if-statement excel-formula

我正在尝试根据数字范围应用不同的公式。有人可以帮我纠正这个公式吗?

=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,则应用不同的公式等。

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

2 个答案:

答案 0 :(得分:3)

菊花链时如果语句excel将按顺序查看它们,一旦一个为真,它就会停止查看。

鉴于此,我们不需要将每一个都包括在内。

=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,那么第一个将为真,而excel将不会查看该语句的其余部分。

如果数字是75000,则第一个将为false,excel将移动下一个将为true,excel将停止查看。

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

然后最后一个公式我们根本不需要IF语句。如果它大于250000,则所有四个都将解析为false,并且结束公式将会触发。

答案 1 :(得分: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))

现在跟踪你的开始和结束的parantheses要容易得多,所以你最终不会陷入大麻烦。此外,回到Excel 2003,您只能嵌套7个IF,这是一个很好的方法。我相信你现在可以去64岁了,如果你接近那个极限,愿上帝怜悯你的灵魂。