Appendix 3 成績整理

  期末試験や学力試験などの成績を基に、個人成績データ、5教科総合成績ランキング表
 を作成した例を掲げています。

App-3.1 基礎データの準備
   先ず、事前の準備として次のことをしましょう。
   1)各教科の成績表を夫々、シート名「国語」、「数学」、「社会」、「理科」、「英語」の順に
     準備して下さい。
     学年、組、生徒番号、名前、点数を入力します。
   2)表中のSS、順位、累積数を求めて下さい。
       SS〜G6セルの内容は =10*(F6-$L$2)/$L$3+50
      順位〜H6セルの内容は =RANK(F6,$F$6:$F$155,0) 
                 なお、赤字155はサンプルデータの最終行(以下、同様)です。
     累積数〜I6セルの内容は =RANK(F6,$F$6:$F$155,1)
      7行目以下のセルについては、オートフィル機能を用いて求めます。
   3)成績表全体のセル範囲を「○○成績名簿表」の名前で登録して下さい。
   4)図App-3.1に倣い、所定のセルに平均値、標準偏差値を準備して下さい。
        平均値〜L2セルの内容は =AVERAGE(F6:F155)
     標準偏差値〜L3セルの内容は =STDEVA(F6:F155) (標本の標準偏差の意味です)
   5)得点分布グラフを描くための準備として、所定の区間、範囲に分けて累積人数、各階級
     毎の人数を下式を参照して求めます。中央値は数値データとして与えています。
     累積人数〜O6セルの内容は =FREQUENCY($F$6:$F$155,K6)
     人数   〜N6セルの内容は =$O6
             N7セルの内容は =$O7-$O6
     それ以下のセルについては、オートフィル機能を用いて求めます。
   6)中央値、人数の欄2列を全ての区間について選択し、横棒グラフを作成して下さい。
   以上、1)〜6)迄に関しては、5教科全てについて準備します。なお、生徒の名前は1年2組
   を除き、省略しました。

     図 App-3.1 国語成績表   (シート全体はこちら、国語成績整理.pdfへのリンク






   7)新たなシートに、「5教科合計」の名前を付けて下さい。
   8)合計点数の欄は、シート間にまたがる和の計算となります。
      合計点数〜F6セルの内容は =SUM(国語:英語!F6)
             7行目以下のセルについては、オートフィル機能を用いて求めます。
      その他の欄〜各科目の場合と同じです。
   9)完成した表を「五教科成績名簿表」として、登録して下さい。
  10)あらたなシートに「個人成績抜粋」の名前を付けて下さい。
  11)次ページ図App-3.3を参照して、見出し行のタイトルと罫線枠を準備して下さい。
  12)B4:L8の範囲「個人成績抜粋表」の名前で登録します。

   図 App-3.2 5教科合計成績表

 










App-3.2 個人成績データ
   ここでは、図App-3.3に示すような各生徒の成績表と全体に対する各生徒の得点の位置
  づけを表すグラフを想定しています。

    図 App-3.3 (シート全体はこちら、個人成績抜粋.pdfへのリンク



  上段の個人成績データ表は、App-3.1で準備した6つのシート全てを参照して、該当者の
 データを抜き出し作成しています。全生徒の個人表を一般操作で作成するにはかなりの時間
 を要し、ミスの誘発にも繋がります。「マクロの記録」もこの例では有効で無さそうです。以下
 には、マクロプログラムの例を紹介します。

 作成の基本方針
  ・見出し欄はあらかじめ所定の位置に作成済とする。
  ・「5教科合計」シートの表において、個人データ表を作成する生徒番号のセルを赤で塗り
   つぶす

  ・一括して複数生徒分の表を作成しない。

 プログラムのフロー
   1)「5教科合計」シートの「五教科成績名簿表」の見出しを除く3行目から走査を開始
     する(生徒番号欄が赤で塗りつぶされているセルが見つかる迄)。
   2)該当セルが見つかったら、学年〜順位の各データを夫々の変数名に代入する。
   3)各変数に代入されたデータを「個人成績抜粋表」に転記する。
     平均点、SSは小数点以下第1位まで表示(第2位四捨五入)
   以上は、5教科の合計に関する記述です。
   4)各科目について、上の1)、2)、3)と同様の操作を行なう。
     ただし、該当セルは、上の2)で代入されたクラス名、生徒番号に等しい生徒である
     ことを条件として捜す。
   5)最後に、表全体を選択して文字列のセンタリングを行なう。

  「個人成績抜粋」マクロプログラム
1  Sub 個人成績抜粋()
2  Dim masterTbl As Range, masterTbl_3 As Range
3  Dim grade As Integer, class As Integer, student_no As Integer
4  Dim total As Integer, ranking As Integer, score As Integer
5  Dim student_name As String, subj As String, name_table As String
6     Sheets("5教科合計").Select
7     Set masterTbl = Range("五教科成績名簿表")
8     For i = 3 To masterTbl.Rows.Count
9           '見出しを除く3行目から最終行までの繰り返し
10          'iはmasterTbl内での相対的な行番号
11      If masterTbl.Cells(i, 3).Interior.ColorIndex = 3 _
12         And masterTbl.Cells(i, 3).Interior.Pattern = xlSolid Then
13         grade = masterTbl.Cells(i, 1)       '学年
14         class = masterTbl.Cells(i, 2)       '組
15         student_no = masterTbl.Cells(i, 3)    '生徒番号
16         student_name = masterTbl.Cells(i, 4)  '生徒氏名
17         total = masterTbl.Cells(i, 5)        '合計点
18         avetotal = Range("L2")           '合計平均点
19         ss = masterTbl.Cells(i, 6)          'SS
20         ranking = masterTbl.Cells(i, 7)       '順位
21         Exit For
22      End If
23     Next
24  '
25  Sheets("個人成績抜粋").Select
26  Set masterTbl = Range("個人成績抜粋表")
27  masterTbl.Cells(2, 1) = grade
28  masterTbl.Cells(2, 2) = class
29  masterTbl.Cells(2, 3) = student_no
30  masterTbl.Cells(2, 4) = student_name
31  '
32  Selection.Interior.ColorIndex = xlNone
33  Set masterTbl = Range("個人成績抜粋表")
34  masterTbl.Cells(2, 11) = total
35  masterTbl.Cells(3, 11) = avetotal
36  masterTbl.Cells(3, 11).Select
37  Selection.NumberFormatLocal = "0.0_ "
38  masterTbl.Cells(4, 11) = ss
39  masterTbl.Cells(4, 11).Select
40  Selection.NumberFormatLocal = "0.0_ "
41  masterTbl.Cells(5, 11) = ranking
42  For i = 1 To 5
43    If i = 1 Then
44       subj = "国語"
45       name_table = "国語成績名簿表"
46    ElseIf i = 2 Then
47       subj = "数学"
48       name_table = "数学成績名簿表"
49    ElseIf i = 3 Then
50       subj = "社会"
51       name_table = "社会成績名簿表"
52    ElseIf i = 4 Then
53       subj = "理科"
54       name_table = "理科成績名簿表"
55    Else
56       subj = "英語"
57       name_table = "英語成績名簿表"
58    End If
59    Sheets(subj).Select  ' 各科目成績転記
60    Set masterTbl_3 = Range(name_table)
61    '
62    For k = 3 To masterTbl_3.Rows.Count
63      If masterTbl_3.Cells(k, 2) = class And masterTbl_3.Cells(k, 3) = student_no Then
64         score = masterTbl_3.Cells(k, 5)
65         avescore = Range("L2")
66         ss = masterTbl_3.Cells(k, 6)
67         ranking = masterTbl_3.Cells(k, 7)
68         '
69         Sheets("個人成績抜粋").Select
70         masterTbl.Cells(2, 5 + i) = score
71         masterTbl.Cells(3, 5 + i) = avescore
72         masterTbl.Cells(3, 5 + i).Select
73         Selection.NumberFormatLocal = "0.0_ "
74         masterTbl.Cells(4, 5 + i) = ss
75         masterTbl.Cells(4, 5 + i).Select
76         Selection.NumberFormatLocal = "0.0_ "
77         masterTbl.Cells(5, 5 + i) = ranking
78     End If
79    Next
80  Next
81  '文字列センタリング
82  Range("B5:L8").Select
83  With Selection
84     .HorizontalAlignment = xlCenter
85     .VerticalAlignment = xlCenter
86  End With
87  Set masterTbl = Nothing   'オブジェクトの開放
88  Set masterTbl_3 = Nothing
89  End Sub


  科目別平均点&個人点グラフ作成
    このグラフは、棒グラフで各科目の平均点、折れ線グラフで個人の得点を表示しています。
   作成手順
   1)F5:K6のセルを選択し、先ず棒グラフを描きます。
   2)素点の棒グラフのみを選択し、右クリックし、メニューから「グラフの種類」を選びます。
     「折れ線グラフ」を指定して完成です。
   3)一度このグラフが描かれると、それ以降異なる生徒については、個人成績データ表が
    完成すると同時にグラフも自動的に切り替わります。

  合計得点分布、各科目得点分布グラフ
   App_3.1「基礎データの準備」の手順6)で描いた得点分布グラフを「個人成績抜粋」シート
  にコピーします。この全生徒の得点分布図に、個人得点を黄色の☆印で表示します。マウス
  を任意の横棒に近づけると中央値が表示されるので、それを頼りに☆印を移動します。
   事前に以下の準備をしておくと、作業が簡単になります。
    1)黄色の☆印6つを個人成績データ表の右横に作成しておいて下さい。
    2)10行目を選択し、表を含む形でウィンドウ/ウィンドウ枠の固定を選択して下さい。
      これは、表を参照しながら☆印を各グラフの所定の位置に移動するための準備です。
  なお、必要であれば右下の空いたスペースをコメント欄とします。

App-3.3 五教科総合成績ランキング
  ここでは、下に示すような5教科総合成績順位の一覧表を作成します。作業内容は、成績
 上位者から先頭に並べ替えるソートです。なお、名前欄が空欄のセルは、基礎データの準備
 で名前の入力を省略したセルです。

    図 App-3.4 5教科総合成績ランキング表


  事前準備
  ・シート名「5教科合計ランキング」を新たに用意する。
  ・見出しなどの常に記入文字が固定されているセルは、事前に入力済としておく。
  ・B4:I604のセル範囲(余裕を持って600行300人のランキングまで対応可能)を選択し、
   「合計ランキング表」の名前で登録する。

  作成の基本方針  
  ・表示項目は、順位、名前の他、5教科合計および各科目の素点(上段)、SS(下段)とする。
  ・1位から何位までのランキング表とするかは、所定のセル(F2)に事前に与える。
  ・既存のランキング表がある場合でも支障の無いようセル内容のクリアー、罫線の削除を
   考慮する。
  
  プログラムのフロー
   1)「5教科合計」シートの「五教科成績名簿表」の順位を基に、順位1位から走査する。
     複数の生徒が同順位となる場合もあるので、常に表の最初から最後までを走査する。
   2)初回のループにおいて、既存ランキング表のセル内容をクリアー、罫線を削除する。
   3)必要データの転記をする。コードは、殆ど「個人成績抜粋」マクロプログラムに同じ。
   4)1名追加される毎に、罫線の記入、文字列のセンタリングを行なう。
    

   「五教科総合成績ランキング」マクロプログラム
1  Sub 五教科合計ランキング()
2  Dim masterTbl_1 As Range, masterTbl_2 As Range, masterTbl_3 As Range
3  Dim grade As Integer, class As Integer, student_no As Integer
4  Dim total As Integer, ranking As Integer, score As Integer
5  Dim irow As Integer
6  Dim student_name As String, subj As String, name_table As String
7  Dim myAdr As String
8    total_rank = 1
9    irow = 0
10   Sheets("5教科合計ランキング").Select
11   end_ranking = Range("F2")   'F2セルに代入された数値順位までのランキング
12   While total_rank <= end_ranking
13     Sheets("5教科合計").Select
14     Set masterTbl_1 = Range("五教科成績名簿表")
15     ic = 0
16     For i = 3 To masterTbl_1.Rows.Count
17              '見出しを除く3行目から最終行までの繰り返し
18              'iはmasterTbl内での相対的な行番号
19       If masterTbl_1.Cells(i, 7) = total_rank Then
20         ic = ic + 1
21         irow = irow + 1
22         class = masterTbl_1.Cells(i, 2)         '組
23         student_no = masterTbl_1.Cells(i, 3)     '生徒番号
24         student_name = masterTbl_1.Cells(i, 4)   '生徒氏名
25         total = masterTbl_1.Cells(i, 5)         '合計点
26         ss = masterTbl_1.Cells(i, 6)           'SS
27         ranking = masterTbl_1.Cells(i, 7)        '順位
28         '
29         Sheets("5教科合計ランキング").Select
30         If total_rank = 1 And ic=1 Then
31           Range("B5:I604").Select '既存ランキング表600行分のセル内容クリアー
32           Selection.ClearContents
33           '既存ランキング表の罫線クリアー
34           Selection.Borders(xlEdgeLeft).LineStyle = xlNone
35           Selection.Borders(xlEdgeBottom).LineStyle = xlNone
36           Selection.Borders(xlEdgeRight).LineStyle = xlNone
37           Selection.Borders(xlInsideVertical).LineStyle = xlNone
38           Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
39        End If
40        Set masterTbl_2 = Range("合計ランキング表")
41           '600行300人分登録,必要最小限の最大値=(合計人数×2+1)行分登録
42        masterTbl_2.Cells(2 * irow, 1) = ranking
43        masterTbl_2.Cells(2 * irow, 2) = student_name
44        masterTbl_2.Cells(2 * irow, 3) = total
45        masterTbl_2.Cells(2 * irow + 1, 3) = ss
46        masterTbl_2.Cells(2 * irow + 1, 3).Select
47        Selection.NumberFormatLocal = "0.0_ "
48        For j = 1 To 5
49          If j = 1 Then
50            subj = "国語"
51            name_table = "国語成績名簿表"
52          ElseIf j = 2 Then
53            subj = "数学"
54            name_table = "数学成績名簿表"
55          ElseIf j = 3 Then
56            subj = "社会"
57            name_table = "社会成績名簿表"
58          ElseIf j = 4 Then
59            subj = "理科"
60            name_table = "理科成績名簿表"
61          Else
62            subj = "英語"
63            name_table = "英語成績名簿表"
64          End If
65          Sheets(subj).Select  ' 各科目成績転記
66          Set masterTbl_3 = Range(name_table)
67          For k = 3 To masterTbl_2.Rows.Count
68            If masterTbl_3.Cells(k, 2) = class And masterTbl_3.Cells(k, 3) _
                  = student_no Then
69              score = masterTbl_3.Cells(k, 5)
70              avescore = Range("L2")
71              ss = masterTbl_3.Cells(k, 6)
72              ranking = masterTbl_3.Cells(k, 7)
73              '
74              Sheets("5教科合計ランキング").Select
75              masterTbl_2.Cells(2 * irow, 3 + j) = score
76              masterTbl_2.Cells(2 * irow + 1, 3 + j) = ss
77              masterTbl_2.Cells(2 * irow + 1, 3 + j).Select
78              Selection.NumberFormatLocal = "0.0_ "
79            End If
80          Next
81        Next
82        '罫線記入
83        ins = 2 * irow + 3
84        myAdr = "B" & CStr(ins) & ":" & "I" & CStr(ins + 1) 'Tips A044
85        Range(myAdr).Select
86        With Selection.Borders(xlEdgeLeft)
87          .LineStyle = xlContinuous
88          .Weight = xlThin
89          .ColorIndex = xlAutomatic
90        End With
91        With Selection.Borders(xlEdgeTop)
92          .LineStyle = xlContinuous
93          .Weight = xlThin
94          .ColorIndex = xlAutomatic
95        End With
96        With Selection.Borders(xlEdgeBottom)
97          .LineStyle = xlContinuous
98          .Weight = xlThin
99          .ColorIndex = xlAutomatic
100       End With
101       With Selection.Borders(xlEdgeRight)
102         .LineStyle = xlContinuous
103         .Weight = xlThin
104         .ColorIndex = xlAutomatic
105       End With
106       With Selection.Borders(xlInsideVertical)
107         .LineStyle = xlContinuous
108         .Weight = xlThin
109         .ColorIndex = xlAutomatic
110       End With
111       Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
112       '文字列センタリング
113       With Selection
114         .HorizontalAlignment = xlCenter
115         .VerticalAlignment = xlCenter
116       End With
117       myAdr = "B" & CStr(ins) & ":" & "B" & CStr(ins + 1) 'Tips A044
118       Range(myAdr).Select
119       Selection.Merge
120       myAdr = "C" & CStr(ins) & ":" & "C" & CStr(ins + 1) 'Tips A044
121       Range(myAdr).Select
122       Selection.Merge
123     End If
124    Next
125    total_rank = total_rank + ic
126  Wend
127  Set masterTbl_1 = Nothing 'オブジェクトの開放
128  Set masterTbl_2 = Nothing
129  Set masterTbl_3 = Nothing
130 End Sub   





App-3.4 成績整理Readme シート
   
  「個人成績抜粋Readme」シート
    





  「五教科合計ランキングReadme」シート
 


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