Excel中的嵌套IF语句[超过7个允许限制]

Excel中的嵌套IF语句[超过7个允许限制],excel,vba,if-statement,nested,worksheet-function,Excel,Vba,If Statement,Nested,Worksheet Function,我试图创建一个电子表格,根据学生的分数自动给他们打分 我显然达到了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>

我试图创建一个电子表格,根据学生的分数自动给他们打分

我显然达到了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"))))))))
我在网上读到,我可以创建一个VBA脚本并分配它,但我对VBA一无所知……因此,如果有人能帮我为此编写一个VBA,那就太棒了

它仍然没有达到C级,任何低于C级的都应该获得D分

这是我试图创建的评分方案…:

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语言的理解非常有限(我不喜欢它)…如果这太繁琐,我想创建一个小型php/mysql应用程序。

一个简单的解决方案是将公式分成两个单元格

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

使用
VLOOKUP
公式,通过将下界映射到字母,可以更优雅地实现这一点。映射表必须按等级编号升序排序

例如:

桌子 其中
$A$1:$B$9
是成绩表的范围。(如果复制公式,
$
符号告诉Excel不要移动引用)。

TRUE
作为最后一个参数传递将导致Excel执行二进制搜索以查找值,这(只要数据已排序)正是您希望它执行的操作。

VLOOKUP解决方案似乎是最好的。要添加VBA脚本,可以打开Visual Basic工具栏,添加按钮之类的控件,然后双击它。该事件的代码将在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
Private子命令按钮1\u单击()
单元格(1,2)=getValue(单元格(1,1))
端接头
私有函数getValue(ByVal argMarks为Double)

如果argMarks>89.5和argMarks 84.5以及argMarks,请转到Visual Basic编辑器,并插入此代码。我不知道您正在使用哪个版本的Excel,但对于2007年之前的版本,请转到工具、宏、Visual Basic编辑器。对于版本2007和更新版本,它位于默认情况下未启用的“开发”选项卡上

根据您想要链接它的方式,您可以向页面添加一个按钮,或者从工作表\u 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
子计算
暗字母等级为字符串
像弦一样暗的最高级
选择案例单元格(1,2)
案例>=89.500
LetterGrade=“A+”
最高级=“以优异成绩通过”
案例84.500至89.490
LetterGrade=“A”
最高级=“以优异成绩通过”
案例79.500至84.490
LetterGrade=“A-”
最高级=“以优异成绩通过”
案例74.500至79.490
LetterGrade=“B+”
最高级=“以优异成绩通过”
案例69.500至74.490
LetterGrade=“B”
最高级=“以优异成绩通过”
案例64.500至69.490
LetterGrade=“B-”
最高级=“以优异成绩通过”
案例59.500至64.490
LetterGrade=“C+”
最高级=“通过”
案例54.500至59.490
LetterGrade=“C”
最高级=“通过”
案例49.500至54.490
LetterGrade=“C-”
最高级=“通过”

Case虽然我更喜欢数值参数的Vlookup方法(Slaks解决方案),以简单和优雅为目的,但在非数值参数的情况下,一种有价值的替代方法是串联IFs

=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+" , "" ) &
=IF(O5>=89.5,“A+”,“”)和
如果(和(O5<89.5,O5>=84.5),“A”和
如果(和(O5<84.5,O5>=79.5),“B+”,“”)&

。。。。。其他级别也是如此。

hmmm那太好了……但我想把所有内容都放在一个单元格中……但我必须说,我并不是这么想的:)。这个想法很聪明,但需要隐藏单元格并记住它们为什么被隐藏,而且不能轻松复制粘贴……获得89.495分的人能得到什么分数?在这种情况下,只指定下限比指定范围更好。我也测试了这个。。。非常好用:)谢谢你。我一直在想vlookup,但它吓坏了我,所以我不想麻烦了:P.谢谢你。那么你应该通过点击空复选框来接受这个答案。@Alks:这是正确的答案-你应该点击复选框来表示你接受这个答案。
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( 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+" , "" ) &