我在单元格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语句的最大数量错误。
答案 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
)