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