9

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

我显然已经达到了 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 应用程序。

4

5 回答 5

21

VLOOKUP您可以通过制作单独的表格将下限映射到字母来更优雅地使用公式来做到这一点。映射表必须按等级编号升序排列。

例如:

桌子

AB
0 天
49.5℃-
54℃
59.5 C+
……

公式:

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

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

于 2010-03-17T19:47:25.980 回答
1

转到 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
于 2011-08-02T11:38:56.650 回答
0

虽然为了简单和优雅,我更喜欢数字参数的 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+" , "" ) &

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

于 2013-08-07T10:35:00.260 回答
0

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

=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")))))
于 2010-03-17T19:45:12.507 回答
-1

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
于 2010-03-18T08:32:06.740 回答