【问题标题】:Nested IF statements in Excel [Over the 7 allowed limit]Excel 中的嵌套 IF 语句 [超过 7 个允许的限制]
【发布时间】:2011-01-28 17:58:50
【问题描述】:

我正在尝试创建一个电子表格,它会根据学生的分数自动给他们打分。

我显然已经达到 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 级,任何更低的都应该被授予 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 应用程序而是。

【问题讨论】:

  • 获得 89.495 的人能获得什么成绩?在这种情况下,最好只指定下限而不是范围。

标签: excel vba if-statement nested worksheet-function


【解决方案1】:

您可以使用VLOOKUP 公式更优雅地做到这一点,方法是制作单独的表格将下限映射到字母。映射表必须按年级升序排列。

例如:

表格

A B
0 天
49.5℃-
54℃
59.5 C+
……

公式:

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

其中$A$1:$B$9 是成绩表的范围。 ($ 符号告诉 Excel 在复制公式时不要移动引用)。
TRUE 作为最后一个参数传递将导致 Excel 执行二进制搜索以查找值,这(只要数据已排序)正是您希望它执行的操作。

【讨论】:

  • 我也测试过这个...效果很好:) 谢谢。我正在考虑 vlookup,但它吓坏了我,所以没有打扰:P。谢谢大家。
  • 那么你应该通过点击空心检查来接受这个答案。
  • @Alks:这是正确的答案 - 您应该单击复选标记以表示您接受答案。
【解决方案2】:

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

根据您想要链接它的方式,您可以向页面添加一个按钮,或从 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

【讨论】:

    【解决方案3】:

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

    =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")))))
    

    【讨论】:

    • 嗯,那太好了……但我想把它全部放在一个单元格中……但我必须说,我没有那样想 :)。
    • 聪明的想法,但需要隐藏单元格并记住它们隐藏的原因,并且无法轻松复制粘贴...
    【解决方案4】:

    虽然出于简单和优雅的考虑,我更喜欢数字参数的 Vlookup 方法(Slaks 解决方案),但在非数字参数的情况下变得有价值的替代方法是连接 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+" , "" ) &
    

    .....等等其他级别。

    【讨论】:

      【解决方案5】:

      VLOOKUP 解决方案似乎是最好的。要添加 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
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2021-01-10
        • 2015-04-03
        • 2020-12-27
        相关资源
        最近更新 更多