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 については何も知りません。

それはまだ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 言語の理解は絶対に最小限です (好きではありません)。

4

5 に答える 5

21

VLOOKUP個別のテーブルマッピングの下限を文字に設定することで、数式を使用してこれをはるかにエレガントに行うことができます。マッピングテーブルは、グレード番号の昇順で並べ替える必要があります。

例えば:

テーブル

AB
0 D
49.5 C-
54 C
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 Editor に移動し、このコードを挿入します。お使いの Excel のバージョンはわかりませんが、2007 年より前のバージョンの場合は、[ツール]、[マクロ]、[Visual Basic Editor] の順に移動してください。バージョン 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

簡単な解決策は、数式を2つのセルに分割することです。

=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 ツールバーを表示し、ボタンなどのコントロールを追加してからダブルクリックします。そのイベントのコードが 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 に答える