成績処理6


前回までの処理で、成績一覧表のもとになるテーブル(T_ichiran)ができあがる。

成績が登録されているテーブルから、このような一覧形式に変換すればレポート機能で自由に成績一覧表を作成できる。今回は説明のため単純化した内容になっているが、集計対象となる生徒名簿と成績情報があれば処理が可能である。

学校であれば、生徒名簿はクラス単位等で出席番号順に抽出が可能であろう。今回は全員が試験を受験した前提(一部欠席でもよいが)であるが、全科目欠席した生徒も含めて作成したければ、クラス等の在籍名簿を参照できるようにすればよい。ただし、実際に参照するのは生徒コードになるだろう。

さて、最初に説明した通り今回のような科目が固定(科目名と科目数)された内容では実際の学校現場では役に立たない。(時間と手間をかけてもよいなら別だが)
そこで、最後に科目や科目数に関係なく処理できる方法を示す。制約があるとすればAccessのテーブルのフィールド数の上限255だけである。事実上無制限である。

実際、月曜から金曜日(土曜日)まで30時間とか34時間の授業があるとして、全て1単位の授業であっても最大34科目である。主要科目の単位数は多くは3~5なので、どんなに多くても20科目程度処理できれば問題ない。小生が関係した学校で総合学科的なクラスで最大22科目というのが過去最大である。実際は選択科目が多いので、一覧表は虫食い状態に数値が並ぶことになる。以下にB4横用紙に今回のデータを印刷した場合の例を示す。

B4横用紙 30科目まで可能だが実質は多くが余白部分となる。            
実際は、氏名欄にはクラスや出席番号なども表示される。順位が必要なら別に処理する 。

どんな科目名・科目数でもこのフォーマットのレポートに収まるようにVBAを変更してみよう。これまでの内容が理解できていれば簡単である。変更するのは1か所だけである。

なぜ今回示した内容が科目名と科目数が固定されたかを考えれば明らかであろう。
新規テーブル(T_ichiran)を作成する際に、フィールド名を科目名、科目フィールド数を科目数にしたからである。

この部分を一般化すればよい。仮に25科目として、科目フィールドを記号化してkn1~kn25(科目ナンバー)にする。科目名は科目名テーブルを参照するのでフィールド名が科目名である必要はない。一般的には科目には科目コードがついているので、コード順に参照すれば確実に書き込みできる。

これで、レポートの成績データソースが一般化され、kn1~kn25となる。あとは見出しとなる科目名ラベルの変更だけである。ラベルはlb1~lb25とし、科目名が格納されたk_name(i)を参照してラベルcaptionを変更する処理をヘッダーフォーマット時イベントに記述すれば完成である。

説明が長くなったので、実際のコードは次回とする。
理解できた方は自分で挑戦してみらよいだろう。

,