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

Wwork around max number of nested if statements

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

我的单元格 W7 的值可以从最高 525 到最低 0:

0 - 525

我的单元格 W7 中的值越高,我的 If 语句所在的单元格 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 语句的最大数量达到错误。

尝试更改为 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})

或者,您可以设置一个小的基本数据 table 并使用 VLOOKUP function 检索金额。如果经常将数据更改为 lookup/retrieve,则后一种方法尤其可取。

附录:

如果值不太可能经常变化,您可以尝试这种数学模式方法。

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

另一种方法是 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

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

另一种方法是使用条件 Choose,它的工作方式有点像 VBA 中的 Select Case 语句。唯一的问题是您的标准需要相互排斥(否则您会得到一些奇怪的结果)。

语法是:

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

结果可以是任何结果 - 包括进一步的测试,据我所知,将被延迟评估。

请注意 - 如果 Test1 和 Test2 都为真,那么您将得到 Test3 的结果(因为 (1 * 1) + (2 * 1) + (3 * 0) = 3