解决嵌套if语句的最大数量

时间:2015-03-05 12:10:39

标签: excel if-statement

我在单元格A1中有以下if语句,它检查我的单元格W7中指定数字之间的值:

我的单元格W7的值可以高达525到低至0:

0 - 525

我的单元格W7中的值越高,我的单元格A1中我的If语句的值就越小。

我现在所拥有的是一份有效的陈述。这将检查我在w7单元格中的值,最高为300,然后在我的单元格a1中显示数字40。

这是我现有的if语句:

  =IF(Dashboard!W7=0, 100, IF(AND(Dashboard!W7>= 0, Dashboard!W7<50), 90, IF(AND(Dashboard!W7>=50, Dashboard!W7<100), 80, IF(AND(Dashboard!W7>=100, Dashboard!W7<150), 70, IF(AND(Dashboard!W7>=150, Dashboard!W7<200), 60, IF(AND(Dashboard!W7>=200, Dashboard!W7<250), 50, IF(AND(Dashboard!W7>=250, Dashboard!W7<300), 40)))))))

但是,我需要通过添加其余的if语句来继续这个序列:

IF(AND(Dashboard!W7>=300, Dashboard!W7<350), 30, IF(AND(Dashboard!W7>=350, Dashboard!W7<400), 20, IF(AND(Dashboard!W7>=400, Dashboard!W7<450), 10, IF(AND(Dashboard!W7>=450, Dashboard!W7<525), 0))))

我遇到的问题是当我将最后一个if语句组合到现有的if语句时,我得到嵌套if语句的最大数量错误。

3 个答案:

答案 0 :(得分:3)

尝试更改为LOOKUP function

=LOOKUP(Dashboard!W7, {0, 0.01, 50, 100, 150, 200, 250, 300, 350, 400, 450, 525}, {100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0, 0})

或者,您可以设置一个小的基本数据表,并使用VLOOKUP function来检索金额。如果经常发生对查找/检索的数据的更改,则后一种方法是特别优选的。

<强>附录:

如果值不太可能经常更改,您可以尝试使用此数学模式方法。

=MAX(90-INT(Dashboard!W7/50)*10, 0)+NOT(Dashboard!W7)*10

答案 1 :(得分:0)

另一种解决方法是CASE声明。您可以指定谨慎值或范围内的任何值。此示例来自MSDN

Dim number As Integer = 8
Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True. 
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select

使用Lookup上面的答案很好; SELECT CASE只是该工具包的另一个工具。

答案 2 :(得分:0)

另一种方法是使用条件Choose,它在VBA中有点像Select Case statememnt。唯一的问题是你的标准需要互相排斥(或者你会得到一些奇怪的结果)。

语法是:

Choose(
    (1 * Test1) + (2 * Test2) + (3 * Test3) + ... + (254 * Test4),
    Result1, Result2, Result3, .... ,Result254
)

结果可以是任何东西 - 包括进一步的测试,据我所知,将被懒惰地评估。

小心 - 如果Test1和Test2都是真的,那么你将获得Test3的结果(因为(1 * 1) + (2 * 1) + (3 * 0) = 3