我是老师并试图创建标记表我遇到的问题是使用不同的方案标记作业(即%[1 - 100],等级[1 -4],字母等级[F - A ])。我遇到的问题是我只想使用一种标记方案进行报告,并且需要根据标记方案转换或计算其他标记方案。
我制作了一张excel工作表,其中包含学生姓名和作业。然后该工作表有3个其他列,一个代表每个方案" Letter"," Level",每个方案的列百分比。现在,在任何特定时间,其中一个方案都会有价值。列 - 我需要excel自动或通过宏计算适当的值到其他单元格。
例如,有三个分配,每个分配在同一个工作表上标有不同的方案。
Assignment 1 - %
Assignment 2 - Level
Assignment 3 - Letter Grade
如何让excel检查存在哪个标记值,然后填充/计算其他两个相应的值。
迈克在作业1上获得了80%(%),但我希望excel在同一时间用相应的值填充级别列和字母列,在作业2上的级别3优于计算相应的百分比和字母,并且同时在作业3上的字母A的时间应该计算相应的百分比和水平。
不知道这是否可行或有意义,但我尝试了VLOOKUP并且没有成功,因为我必须手动完成所有操作 - 我的目标是实现自动化过程。
很抱歉,如果不清楚或令人困惑......但我已经在这两天没有运气,甚至不确定我能做什么是可能的。
答案 0 :(得分: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
由于翻译算法的简单性,它不提供具有不同跨度的评分系统之间的双射关系,但它可以让您更接近目标
答案 1 :(得分:0)
创建一个这样的表(如果需要定义+/-分数,如“B +”等,可以添加更多行)。这里的关键是按%递增表格,每行是相应级别/字母等级所需的最小分数。
然后,您可以对此表使用VLOOKUP
公式,如此获取级别:
=VLOOKUP(F2,$A$1:$C$7,2,TRUE)
就像这样,获得字母等级:
=VLOOKUP(F2,$A$1:$C$7,3,TRUE)
这利用了VLOOKUP函数中的True
参数,该参数将返回近似匹配(并假设数据按升序排序)。因此,当您输入类似“81%”的值时,它将返回不大于 81%的最近行,因此它将从第5行返回数据。同样,12%将从第2行,75%来自第4行,等等。
结果:
如果你不能1:1将Level / Letter Grade映射到Percent行,你可能需要使用两个表,但这个想法是相同的。