Section F 連結5段階評価

 作成の基本方針
    ・各教科毎に中学3年間の5段階評価を記入するシートを準備する。
    ・1、2学期には、5段階の数値+補助評価(○、×、空白)の欄を設定する。
    ・選択教科は1〜4までとし、1年は2学期に、2,3年は3学期にA,B,Cで記入する。
    ・全教科の成績を連結したシートをマクロプログラムで作成する。
  末尾には、サンプルシートを掲げています。

 F-1 9教科および選択教科の成績表作成
   先ず、事前の準備として次のことをしましょう。
   1)新規のブックを開き、マスターテーブルの名簿欄(学年欄〜フリガナ欄までの4列)を、
     国語の場合「国語成績」とシートに名前を付けて準備して下さい。
   2)下記の図F-1に倣い、成績欄を追加します。
   3)成績を記入します。なお、補助評価の欄は、リスト入力で簡単に○、×、空白を入力
     できるようにしましょう。空白は入力の修正も兼ねます。
     リスト入力設定手順
      ・ リスト入力するセル全て(この例では、補助評価の記入セル全て)を選択して
        下さい。複数セルの選択は、Ctrlキー+クリックです。
      ・ データ/入力規則 を選択すると、次のダイアログが開きます。
        入力値の種類を「リスト」にして元の値欄に○と×と空白を半角のカンマで
        区切って入れます。空白は全角のスペースとします。

       

        リスト入力設定例
        

   4)成績の記入を終えたら表を選択し、「国語成績tbl」と名前を付けて登録します。
     なお、以下の点に注意して下さい。
    指定した表全体のセル範囲が正しい名前で登録されているか確認して下さい。
    確認する際の注意事項はC-1を参照して下さい。

   5)他の教科についても同様に、科目名を読み替えて準備して下さい。選択教科の成績に
     関しては、図F-2を参照して下さい。

                  図 F-1 「国語成績」表 

                 図 F-2 「選択教科1成績」表



 F-2 連結成績作成メインプログラム

    この連結では、通知表の記載順に左から教科成績を貼り付けます。
   サンプルでは、科目の並び順は次のように仮定しています。
    国語、社会、数学、理科、音楽、美術、保健体育、技術・家庭、英語、選択教科1,2,3,4
    成績の貼り付けは科目により列番号がずれること、連結表に科目名を記載することなど
   を考慮して、科目別に貼付用マクロプログラムを作成しておき、別途それらを順番にメイン
   プログラムのCall文で呼び出す方式とします。

 「連結成績作成main」マクロプログラム
   先にmainプログラムを見る方が全体像を把握し易いので、これについて説明します。
  なお、mainプログラムで呼び出されるプログラムのことをサブプログラムと云いますが、
  VBAではプログラムとは云わずにプロシージャ(手続き)と云う用語を用いています。
     「連結成績作成main」マクロプログラム
1   Sub 連結成績作成main()
2       Call 連結成績表作成準備
3       Call 国語成績貼付
4       Call 社会成績貼付
5       Call 数学成績貼付
6       Call 理科成績貼付
7       Call 音楽成績貼付
8       Call 美術成績貼付
9       Call 保健体育成績貼付
10      Call 技術家庭成績貼付
11      Call 英語成績貼付
12      Call 選択教科1成績貼付
13      Call 選択教科2成績貼付
14      Call 選択教科3成績貼付
15      Call 選択教科4成績貼付
16   End Sub

     連結成績作成main」マクロプログラムの解説
    1行目   :この例では、mainプログラムであることがマクロ名から一目瞭然である様、
           マクロ名末尾にmainと付けていますが、どちらでも構いません。
    2行目   :Call文は、その後ろに記述されたマクロプログラムを呼び出し実行します。
            呼び出したプログラムの実行を終えたら、すぐ下の行に実行が移ります。
           「連結成績作成準備」マクロは、「国語成績」シートから名簿欄をコピーする
           マクロですが、その詳細については後で説明します。
    なお、上のマクロプログラムには現れていませんが、下図に示すDeclarationsを押し、
   同図左最上段の1行目に示されたと同じ、Public宣言を記述する必要があります。

                  図 F-3 Public宣言
  

    Public宣言された変数(col;列、row;行を制御する変数)は、同一Module内で変数
   の値が共有
されます。このような宣言がされない場合には、例え同じ名前の変数でも
   マクロが異なれば記憶場所も異なり、全く別の変数と解釈されます。即ち、値の共有は
   されません。




 F-3 連結成績作成サブプログラム

 「連結成績表作成準備」マクロプログラム
   連結成績表作成準備マクロでは、先ず、ブックに新しいシートを一枚追加し、そのシート
  の名前を「連結成績」とします。次いで、「国語成績」シートから「名簿Tbl」の名前で登録
  されているセル範囲を参照し、それを「連結成績」シートに貼り付けます。

      「連結成績表作成準備」マクロプログラム
1   Sub 連結成績表作成準備()
2   Dim mySht As Worksheet, colnum As Integer
3   Sheets("国語成績").Select
4   Sheets.Add             'ワークシート追加
5   Set mySht = ActiveSheet
6   Sheets(mySht.Name).Name = "連結成績"
7                      'シート「mySht.Name」の名前を連結成績に変更
8   '文字列入力
9   Range("D2") = "連結成績表"
10  '名簿貼付
11  Sheets("国語成績").Select
12  Application.Goto Reference:="名簿Tbl"
13  Selection.Copy
14  Sheets("連結成績").Select
15  row = 4
16  col = 2
17  Cells(row, col).Select
18  ActiveSheet.Paste
19  Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
20     SkipBlanks:=False, Transpose:=False   '列幅のコピー
21  ' 次の成績貼付セル
22  colnum = 5
23  col = col + colnum
24  End Sub

      連結成績表作成準備」マクロプログラムの解説
 4行目   :ワークシートの追加です。この状態では、追加シート名は「国語成績(2)」と
        なり、追加されたシートがアクティブシートに切り替わります。
 5,6行目  :5行目でアクティブシートを一旦、worksheet変数myShtにセットし、6行目で
        アクティブシートの名前をmyShtの名前「国語成績(2)」から「連結成績」に変更
        します。5,6行目をまとめて1行で次のように書き換えることもできます。
            Sheets(ActiveSheet.Name).Name = "連結成績"
 12〜14行目:12行目では直前のシートに登録されている「名簿Tbl」を参照し、13行目でそれ
         をコピーし、14行目でコピー先をシート名「連結成績」と指示しています。
 17〜20行目:17行目は参照した「名簿Tbl」の貼付先セルの選択で、表の左上隅セル位置を
         指定しています。18行目は貼付指示、19,20行目は列幅のコピーです。この2行
         無しで単にコピーした場合には、セルの列幅はコピーされません。
         列幅のコピーの一般操作は、コピー元のセル範囲を選択し、編集/コピーを選び、
         コピー先の(4,2)セルを選択して、
          編集/形式を選択して貼付を選択しダイアログにて「列幅」を選びOK押下
         ここでは、この一般操作の「マクロの記録」を利用しています。
 22、23行目:次の科目の成績欄を貼り付けるための列番号colがあらかじめ、ここで準備され
         ます。23行目右辺のcolは、「名簿Tbl」を貼り付けた左端の列番号の値であり、
         colnumは「名簿Tbl」の列数です。それらを加えた値7が変数colのメモリに上書き
         されます。7は、R1C1形式で表した次に貼り付けるべき表の左端列番号です。

   「国語成績貼付」マクロプログラム
    以下に、国語成績貼付マクロプログラムを掲げます。左記の「連結成績表準備」マクロ
   でまとめて貼り付けることも可能ですが、科目順の並びが国語が先頭にならない場合を
   考慮して、分離しています。
    なお、9教科の残り科目「社会成績貼付」から「英語成績貼付」までは、成績欄の列数、
   書式は同じです。従って、下のマクロで科目名のみ該当教科名に読み替えることになり
   ます。

     「国語成績貼付」マクロプログラム
1   Sub 国語成績貼付()
2   Dim colnum As Integer
3   Cells(row - 1, col + 7) = "国語"    
4   Sheets("国語成績").Select
5   Application.Goto Reference:="国語成績Tbl"
6   Selection.Copy
7   Sheets("連結成績").Select
8   Cells(row, col).Select        '=Range("G4").Select
9   ActiveSheet.Paste
10  Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
11  SkipBlanks:=False, Transpose:=False
12  colnum = 15
13  col = col + colnum
14  End Sub

     「国語成績貼付」マクロプログラムの解説
 3行目   :文字列「国語」を国語の成績欄の真上、列幅中央を目安にセルを選択し、
        表示します。
 8行目   :row, colがpublic宣言されているので、その前の「連結成績表作成準備」マクロ
        プログラムの15行目のrowと23行目のcolで代入された値を引き継ぎます。row
        をpublic宣言したのは、連結成績の貼付位置を変更した場合でも、「連結成績表
        作成準備」マクロの15行目の修正だけで済ますためです。このようにすると、
        後続の各教科の成績貼付マクロを修正する必要はありません。

   「選択教科1成績貼付」マクロプログラム
  
選択教科では、成績欄の列数が前9教科より少ないので、教科名の貼付位置がずれます。
  その他は9教科のマクロに同じです。
  選択教科2〜4は、選択教科1に同じです。ただし、選択教科4では下記コードの12、13行目
 の貼付準備は不要です。従って、選択教科1のマクロのみ示します。


   「選択教科1成績貼付」マクロプログラム

1   
Sub  選択教科1成績貼付()
2   
Dim colnum As Integer
3   Cells(row - 1, col) = "選択教科1"
4   Sheets("選択教科1成績").Select
5   Application.Goto Reference:="選択教科1成績Tbl"
6   Selection.Copy
7   Sheets("連結成績").Select
8   Cells(row, col).Select
9   ActiveSheet.Paste
10  Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
11  SkipBlanks:=
False, Transpose:=False
12  colnum = 3
13  col = col + colnum
14  
End Sub

   「選択教科1成績貼付」マクロプログラムの解説
  9教科の場合と異なるコードについてのみ示します。
 3行目  :Cellsの()内が(row-1,col+7) から(row-1,col)に変わっています。
 12行目 :colnumが5から3に変わっています。


 F-4 連結5段階評価サンプルシート 
 
    「成績表Readme」シート
  
  
   「連結成績」シート 


   「国語成績」シートおよび「選択教科1」シートについては、先に掲げた図F-1、図F-2を
  参照して下さい。

索引
ページの先頭へ戻る
目次へ戻る