-1

我是一名教师,正在尝试创建一个评分表,我遇到的问题是作业使用不同的方案进行评分(即 % [1 - 100]、级别 [1 -4]、字母等级 [F - A])。我遇到的问题是我只想使用一种标记方案进行报告,并且需要根据标记的方案转换或计算其他标记方案。

我制作了一个包含学生姓名和作业的 Excel 工作表。然后工作表有 3 个其他列,一个代表每个方案“字母”、“级别”、每个方案的百分比列。现在,在任何给定时间,“方案”列之一中都会有一个值 - 我需要 excel 自动或通过宏将适当的值计算到其他单元格中。

例如,在同一张纸上有三个作业,每个作业都标有不同的方案。

Assignment 1 - %
Assignment 2 - Level 
Assignment 3 - Letter Grade

如何让 excel 检查存在哪个标记值,然后填充/计算另外两个相应的值。

Mike 在作业 1 上获得了 80% (%),但我希望 excel 同时用相应的值填充级别列和字母列作业 2 上的级别 3 excel 来计算相应的百分比和字母,同时为作业 3 上的字母 A 应计算相应的百分比和水平。

不知道这是否可能或有意义,但我尝试了 VLOOKUP 并没有成功,因为我必须手动完成所有操作 - 我的目标是自动化过程。

对不起,如果不清楚或令人困惑......但我已经在这两天没有运气,甚至不确定我正在做的事情是否可能。

4

2 回答 2

0

像这样创建一个表(如果您需要定义 +/- 分数,如“B+”等,您可以添加更多行)。这里的关键是按百分比升序对表格进行排序,每一行是相应级别/字母等级所需的最低分数。

在此处输入图像描述

然后,您可以VLOOKUP对这个表使用公式,就像这样来获得级别:

=VLOOKUP(F2,$A$1:$C$7,2,TRUE)

像这样,要获得字母等级:

=VLOOKUP(F2,$A$1:$C$7,3,TRUE)

在此处输入图像描述

这利用True了 VLOOKUP 函数中的参数,该参数将返回一个近似匹配(并假设数据按升序排序)。因此,当您输入“81%”之类的值时,它会返回不大于81% 的最近行,因此它将返回第 5 行的数据。同样,12% 将返回第 2 行的数据,75% 从第行返回4等

你的结果:

在此处输入图像描述

如果您不能 1:1 将 Level/Letter Grade 映射到 Percent 行,则可能需要使用两个表,但想法是相同的。

于 2017-01-11T21:53:15.190 回答
0

当然,首先应该评估一个评级系统到另一个评级系统的转换,然后假设这些算法在评级等级类型之间转换

一种可能的方法如下:

Option Explicit

Sub main()
    Dim grades As Variant, levels As Variant
    Dim cell As Range
    Dim index As Double

    grades = Array("F", "E", "D", "C", "B", "A")
    levels = Array(1, 2, 3, 4)

    For Each cell In Intersect(Range("A:C"), ActiveSheet.UsedRange).Offset(1).SpecialCells(xlCellTypeConstants)
        Select Case cell.Column
            Case 1 '%
                index = cell.value / 100
                cell.Offset(, 1).value = GetRate(index, levels)
                cell.Offset(, 2).value = GetRate(index, grades)
            Case 2 ' Level
                index = InStr(Join(levels, ""), cell.value) / Len(Join(levels, ""))
                cell.Offset(, -1).value = index * 100
                cell.Offset(, 1).value = GetRate(index, grades)
            Case 3
                index = InStr(Join(grades, ""), cell.value) / Len(Join(grades, ""))
                cell.Offset(, -2).value = index * 100
                cell.Offset(, -1).value = GetRate(index, levels)
        End Select
    Next
End Sub

Function GetRate(index As Double, rates As Variant)
    GetRate = rates(WorksheetFunction.Max(Round(index * (UBound(rates) - LBound(rates) + 1), 0) - 1, 0))
End Function

由于翻译算法的简单性,它不提供具有不同跨度的评分系统之间的双射关系,但它可以让您更接近您的目标

于 2017-01-11T21:51:24.627 回答