Excel中的嵌套IF语句

我正在尝试创build一个电子表格,根据他们得到的分数自动给学生一个分数。

我显然打了Excel的嵌套的IF语句限制是7。

这是我的if语句:

=IF(O5>0.895,"A+",IF(O5>0.845,"A",IF(O5>0.795,"A-",IF(O5>0.745,"B+",IF(O5>0.695,"B",IF(O5>0.645,"B-",IF(O5>0.595,"C+",IF(O5>0.545,"C","D")))))))) 

我正在网上阅读,我可以创build一个VBA脚本,并指定它,但我不知道任何关于VBA ….所以如果有人可以帮我写一个VBA的,这将是真棒。

它仍然缺lessC级,任何东西都应该被授予D标记。

这是我正在创build的评分scheme…:

A + 89.500 – 100.000通过优异

84.500 – 89.490通行证有区别

A- 79.500 – 84.490通过优秀

B + 74.500 – 79.490及格

B 69.500 – 74.490及格

B- 64.500 – 69.490及格

C + 59.500 – 64.490通过

C 54.500 – 59.490通过

C- 49.500 – 54.490通过

D 0.000 – 49.490指定失败

我不介意走下VBA路线,但是我对VB语言的了解绝对是最小的(不喜欢它)…如果这太乏味,我想创build一个小的PHP / MySQL应用程序。

通过将单独的表格映射到字母下边界,您可以使用VLOOKUP公式更加优雅地进行操作。 映射表必须按等级号码升序sorting。

例如:

  AB
 0 D
 49.5 C-
 54 C
 59.5 C +
 ......

式:

 =VLOOKUP(SomeCell, $A$1:$B$9, 2, TRUE) 

其中$A$1:$B$9是成绩表的范围。 (如果您复制公式,则$符号会告诉Excel不要移动引用)。
传递TRUE作为最后一个参数将导致Excel执行二进制search来查找值(只要数据已sorting)正是您想要的值。

转到Visual Basic编辑器,并插入此代码。 我不知道你使用的是什么版本的Excel,但是对于2007之前的版本,请转到工具,macros,Visual Basic编辑器。 对于2007版及更新版本,它在“开发”选项卡上,默认情况下未启用。

根据你想链接的方式,你可以在页面上添加一个button,或者从Worksheet_Calculate事件中调用它。

这假定你有单元格A2中的学生总分数,并将结果放在A2和B2中。

 Sub Calculate dim LetterGrade as string dim Superlative as string Select Case Cells(1,2) Case >= 89.500 LetterGrade="A+" Superlative ="Pass with Distinction" Case 84.500 to 89.490 LetterGrade="A" Superlative ="Pass with Distinction" Case 79.500 to 84.490 LetterGrade="A-" Superlative ="Pass with Distinction" Case 74.500 to 79.490 LetterGrade="B+" Superlative ="Pass with Merit" Case 69.500 to 74.490 LetterGrade="B" Superlative ="Pass with Merit" Case 64.500 to 69.490 LetterGrade="B-" Superlative ="Pass with Merit" case 59.500 to 64.490 LetterGrade="C+" Superlative ="Pass" Case 54.500 to 59.490 LetterGrade="C" Superlative ="Pass" Case 49.500 to 54.490 LetterGrade="C-" Superlative ="Pass" Case <= 49.490 LetterGrade="F" Superlative ="Specified Fail" End Select Cells(2, 1) = LetterGrade Cells(2, 2) = Superlative End Sub 

简单的解决办法是简单地将公式分成两个单元格

 =IF(O5>0.895,"A+",IF(O5>0.845,"A",IF(O5>0.795,"A-",<Other cell ref here>))) 

其他细胞:

 =IF(O5>0.745,"B+",IF(O5>0.695,"B",IF(O5>0.645,"B-",IF(O5>0.595,"C+",IF(O5>0.545,"C","D"))))) 

虽然我更喜欢简单和优雅的数值参数的Vlookup方法(Slaks解决scheme),但在非数字参数的情况下变得有价值的替代scheme是级联IF。

 =IF( Case1 , "Label 1", "" ) & IF( Case2 , "Label 2", "" ) & IF( Case3 , "Label 3", "" ) & 

….. 等等

例如,在这种情况下:

 = IF( O5 >= 89.5 , "A+" , "" ) & If( AND ( O5 < 89.5 , O5 >= 84.5 ) , "A" , "" ) & If( AND ( O5 < 84.5 , O5 >= 79.5 ) , "B+" , "" ) & 

…..等等等级。

VLOOKUP解决scheme似乎是最好的。 要添加一个VBA脚本,你可以调出Visual Basic工具栏,添加一个像Button这样的控件,然后双击它。 该事件的代码在Excel VBA环境中打开。 你可以在VB中添加代码,也许是这样的。

 Private Sub CommandButton1_Click() Cells(1, 2) = getValue(Cells(1, 1)) End Sub Private Function getValue(ByVal argMarks As Double) If argMarks > 89.5 And argMarks <= 100 Then getValue = "A+" If argMarks > 84.5 And argMarks <= 89.49 Then getValue = "A" . . and so on... End Function