-1

私は教師で、採点シートを作成しようとしていますが、課題が異なるスキーム (つまり、% [1 - 100]、レベル [1 -4]、Letter Grade [F - A]) を使用して採点されるという問題があります。私が抱えている問題は、1 つのマーキング スキームを使用してレポートしたいだけで、マーキングされているスキームに基づいて他のマーキング スキームを変換または計算する必要があることです。

生徒の名前と課題を含む Excel ワークシートを作成しました。シートには、各スキームの「文字」、「レベル」、各スキームのパーセンテージを表す 3 つの列があります。現在、いつでも「スキーム」列の1つに値が存在します。他のセルに適切な値を自動的に計算するか、マクロで計算する必要があります。

たとえば、同じシートに 3 つの割り当てがあり、それぞれが異なるスキームでマークされています。

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

どのマーク値が存在するかを確認し、他の2つの対応する値を入力/計算するにはどうすればよいですか。

マイクは割り当て 1 で 80% (%) を取得しましたが、レベル列と文字列に対応する値を入力すると同時に、割り当て 2 のレベル 3 で対応するパーセンテージと文字を計算し、同時に a課題 3 の文字 A 対応する % とレベルを計算する必要があります。

これが可能かどうかはわかりませんが、VLOOKUP を試してみましたが、すべて手動で行う必要があるため成功しませんでした。自動化されたプロセスを目指しています。

わかりにくかったり、わかりにくかったりしたら申し訳ありません...しかし、私は運がなく、私がやっていることさえ可能かどうかさえわからないまま、2日間これに取り組んできました。

4

2 に答える 2

0

もちろん、最初にある格付けシステムから別の格付けシステムへの変換を評価してから、それらのアルゴリズムが格付けグレードの種類間で移行すると想定する必要があります。

可能なアプローチの1つは次のとおりです。

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 に答える