数値に対する判定について

採点、また品質検査での測定などを行なった場合には、その数値により何らかの判定を行ないたくなりますよね!
そこで入力フォームに入力した数値の判定を行なう方法について紹介します。
1.判定基準の設定:
次のように判定を行なうようにしますので「登録台帳」シートに下表を作成ください。図1
この採点では、100点満点としています。
2.次に判定レベルを書き込める列を「採点表」、及び「個別の学生」のシートに挿入ください。
図2
判定結果の書込み列を挿入したため、国語、英語、備考の列番号ズレましたのでプログラム中の列番号の修正が必要となります。
国語(6→7)、英語(7→9)、備考(8→11)
3.プログラム中の列番号の修正を行ないましょう。
「CommandButton1_Clic()」及び「ListBox1_Click()」のプロシージャ内のセルの列番号の修正が必要です。
例えば、CommandButton1_Clic()のプロシージャ内に書かれている「国語」の「Cells(5+n, 6).Value=TextBox5.Value」を「Cells(5+n, 7). Value=TextBox5.Value」のようにすべて書き換える必要があります。
【参考】書換えが発生した場合の対応方法として参考までに「置換」方法について説明しておきます。
但し、プログラムが長文、又は複雑な場合には、他のプロシージャ内に同じものがあれば置換を行なってしまったりしてしまうことがありますので、要注意くだ さい。
「編集」のメニューの「置換」を使用する方法です。
図3
「置換」を選択を行なうと下図のような画面が表示されます。図4
画面の「対象」の項目をチェックすると検索の範囲を設定することができます。
カレントプロシージャ:カーソルで特定したプロシージャ内の置換
カ レントモジュール:カーソルで特定したプロシージャが存在する特定のユーザーフォーム内、又は標準モジュールフォルダー内の特定モジュール内のすべてのプ ロシージャ内の置換。
カレントプロジェクト:このファイル内で作成されているすべてのプログラムを対象としって置換されます。
選択された文字列:ドラッグして文字列を選択しすると、かすれた文字表示が鮮明になり、○にチェックマークが付き ます。この選択範囲内のみで置換が行なわれます。
今回、置換操作で行なう場合。
最初は画面右の「すべて置換」でなく「置換」で一つ一つ確認しながら実行された方が良いでしょう。
図5
今回は、簡単なプログラムですのでカレントプロジェクトで問題ありませんが、今後複雑になった場合には対象の選択範囲を注意して選択ください。
4.採点入力時に判定レベルを表示するために入力フォームにテキストボックスを追加致します。
図6
テキストボックス3を削除していれば、テキストボックス8、9、10と表示されているかもしれません。
削除した場合、その番号が飛ばされる場合がありますので識別番号に注意ください。
これらのテキストボックスには評価判定結果を自動で書き込むだけなのでプロパティの「TabStop」を「False」にしておきましょう。
5.判定のためのプログラムを書いて行きましょう。
1)先ずどのプロシージャに書き込めば良いか:
例えば数学の点数を書き込めば、判定基準のどのレベルかを比較照合し、判定レベルをテキストボックス3に書き込ませます。
数値を書き込みが完了すると言う ことはテキストボックス4のカーソルが次に移動すると言うことなのでプロシージャのイベントの「Exit」に書き込めば良いと言うことになります。
2)プロシージャの画面を表示させましょう。
前に説明致しましたようにテキストボックス4を右クリックしてメニューの「コードの表示」を選択しますと「Change」のプロシージャ画面が表示されま す。図7
「Change」の右端の▼をクリックして「Exit」を選択し、「Exit」のプロシージャ画面を表示させます。図8
3)このプロシージャに次のようにプログラムします。図9
「If TextBox4.Value <> "" Then」:
この不等号式(<>)は、テキストボックス4が空白でないならば以下のプログラムを実行しなさいとの条件を付けています。
この条件がなけれ ば、テキストボックス4が空白の状態でカーソルを次に移動させた場合には、空白は「0」と見なしテキストボックス3の判定に「不可」が表示されます。
TextBox4の前に「Val」の数値への変換関数を忘れないようにしましょう。
テキストボックス5、テキストボックス6の「Exit」のプロシージャに同様なプログラムを作成します。
上図の赤下線部のテキストの番号がそれぞれ のテキストボックスに応じた番号に書き換える必要がります。
下図のようになります。
図17
6.「書込み」コマンドボタンのプロシージャを表示させ、判定をエクセルに書き込ませます。
下図のように追記します。
図10
学生シートへの書込みプログラムも同様です。
図11図12
4)エクセル上の「入力開始」ボタンのプロシージャにも次のように追記修正を行ないます。図13
7.以上で判定を行なうプログラムは終了しましたので、プログラムを実行してみましょう。
例えば下図のように入力してみます。採点結果を入力したら右側の判定のテキストボックスに判定結果が表示されるのが分かります。図14
書込みボタンをクリックすると「採点表」、及び「中村」のシートに書き込まれています。図15図16
【参考】
1.登録台帳シートに「判定基準」表作成のメリットは、
 1)プログラムが簡略して書くことができます。
    For n = 1 To 4
    If Val(TextBox4.Value) >= .Cells(4 + n, 11).Value Then
        TextBox3.Value = .Cells(4 + n, 9).Value
        Exit For
    End If
    Next
判定基準表を作成しない場合、上記プログラムは次のように書かなければなりません。
    If Val(TextBox4.Value) >=80 Then
        TextBox3.Value="優"

    ElseIf Val(TextBox4.Value) >=60 Then
        TextBox3.Value="良"

    ElseIf Val(TextBox4.Value) >=40 Then
        TextBox3.Value="可"
    ElseIf Val(TextBox4.Value) >=0 Then
        TextBox3.Value="不可"
    End If
このようにプログラムしても良いのですが、次の2)項の判定基準、ランク名の変更時にデメリッ トが生じます。
 2)プログラムで分かりますように判定基準の数値、ランク名がプログラム中にありません。
従って、判定基準の数値、ランク名を変更したい場合にはこの表を修正することで対応ができます。
2.ランクレベルの判定プログラムについて。
通常であれば、Val(TextBox4.Value)が上限値と下限値の間と書く必要があるのではと考えられるのではないでしょうか。、
例えば次のように
With Worksheets("登録台帳")
If TextBox4.Value <> "" Then
    For n = 1 To 4
    If Val(TextBox4.Value) < .Cells(4 + n, 7).Value _
        And
Val(TextBox4.Value) >= .Cells(4 + n, 11).Value Then
        TextBox3.Value = .Cells(4 + n, 9).Value
        Exit For
    End If
    Next
End If
End With
プログラム内では下限値のみ使用しておりますが、前に説明致しましたようにプログラムは書かれた順番に判定して行きます。
TextBox4の値がn=1の場合には80点以上ですか?
80点以上であれば、「優」で繰り返しを終了します。
80点以上でなければ(80点より小さいことが決定)n=2で60点以上ですか?
60点以上あらば「良」で繰り返しを終了します。
60点以上でなければ(60点より小さいことが決定)n=3で判定を行ないます。
このようにプログラムの流れで判定を繰り返して行くので、上限値の判定プログラムは不要となっています。
  If Val(TextBox4.Value) < .Cells(4 + n, 7).Value _
        And
Val(TextBox4.Value) >= .Cells(4 + n, 11).Value Then
と判定プログラムを書いてもプログラムとして実行されます。
どうしてもこのようなプログラムを書きたい場合には、100点満点の場合上限判定に等号式が無いために判定できません。
条件表の上限点数を101点のように大きめに修正しておけば問題ありません。

以上で採点結果に対する評価判定する方法を紹介いたしました   
次に評価判定の結果、「不可」に対しては特別の管理を行なうために入力時の見落としを避けたい場合などに判定が不可であることを強調又は注意喚起したいと 考えたとしましょう。
その方法としてテキストボックスに「不可」が表示されるとそのテキストボックスの背景を赤くなるようにする。又ユーザーフォームで注意喚起を促すようにす る方法について次ページで紹介致します。
   
次ページへ

サイドバータイトル
inserted by FC2 system