Section K 各種記録と通信欄作成

 作成の基本方針
    ・「各種記録と通信欄−生徒名」のシート名で各生徒毎の各種記録と通信欄を作成。
    ・名簿欄表示画面上から、各種記録と通信欄ページを作成したい生徒のセル範囲を
     選択可能とした後、「所見欄一覧表.xls」ブックの「所見欄」シートから、該当生徒の
     所見を「各種記録と通信欄−生徒名」シートに転記する。

 K-1 各種記録と通信欄作成プログラム

   事前に、次のpublic宣言がされています。

    Public student_name As String, student_no As Integer
    Public grade As Integer, Class As Integer
    Public scase As Integer, wcase As Integer

   このマクロプログラムは、かなりの部分がセクションJのJ-3のマクロに重複しています。
  重複するコードについては、J-3の説明を参照下さい。

  「各種記録と通信欄作成」マクロプログラム
1   Sub 各種記録と通信欄作成()
2   Dim masterTbl As Range, sendTbl As Range, myRng As Range
3   Dim mySht As Worksheet, new_sheet_name As String
4   Dim syoken(3, 5) As String
5   '連結5段階評価.xlsの連結成績シートから読込
6   Workbooks.Open Filename:=ThisWorkbook.Path & "\連結5段階評価.xls"
7   Worksheets("連結成績").Activate   'シート名「連結成績」をアクティブシートにする
8   ' Tips A-003
9   myStr = "マウスで出力したい生徒番号のセル範囲を選択して、OKボタンを押してください"
10   On Error Resume Next
11      Set myRng = Application.InputBox(myStr, Type:=8)
12   On Error GoTo 0
13   If myRng Is Nothing Then
14      MsgBox "キャンセルされました"
15   End If
16   '
17   Set masterTbl = Range("連結成績")
18          '連結成績マスターテーブルと名付けた表のセル範囲をmasterTblにセット
19   Set activeRng = myRng 'インプットボックスで選択されたアクティブセルをactiveRngにセット
20   '選択範囲の取り出し
21   Workbooks("通知表.xls").Activate
22   Worksheets("表表紙").Activate
23   Range("B27") = activeRng.Address '絶対アドレスでセル範囲をB27セルに表示
24   If activeRng.Address Like "*:*" Then '選択人数複数の場合
25      Range("B28").Select
26      ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,FIND("":"",R[-1]C)-1)"
27                       '絶対アドレス範囲の前半分をB28セルに表示
28      Range("B29").Select
29      ActiveCell.FormulaR1C1 = "=RIGHT(R[-2]C,LEN(R[-2]C)-FIND("":"",R[-2]C))"
30                      '絶対アドレス範囲の後ろ半分をB29セルに表示
31      Range("C28").Select
32      ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(RC[-1],LEN(RC[-1])-3))"
33                        '絶対アドレスから行番号を取り出して数値化
34      ist = Range("C28") - 5 ' -5:絶対アドレス行番号から生徒番号を求める際の調整
35                       '連結成績の開始行を変更する時は修正必要
36      Range("C29").Select
37      ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(RC[-1],LEN(RC[-1])-3))"
38      iend = Range("C29") - 5
39   Else    '選択人数1人の場合
40      Range("C28").Select
41      ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(R[-1]C[-1],LEN(R[-1]C[-1])-3))"
42                       '絶対アドレスから行番号を取り出して数値化
43      ist = Range("C28") - 5
44      iend = ist
45   End If
46   Range("B27:C29").Select
47   Selection.ClearContents     '一時的なセル表示を消去
48   '
49   For k = ist To iend
50      If k <> ist Then
51         Workbooks("連結5段階評価.xls").Activate
52         Worksheets("連結成績").Activate 'シート名「連結成績」をアクティブシートにする
53         Set masterTbl = Range("連結成績")
54      End If
55      student_no = k
56                          '()内アドレスの内容をstudent_noに代入
57      grade = masterTbl.Cells(student_no + 2, 1).Value  '行番号+2は見出し分、
58                              '列番号1;masterTbl 内での相対列番号
59      Class = masterTbl.Cells(student_no + 2, 2).Value
60      student_name = masterTbl.Cells(student_no + 2, 4).Value
61      '
62      '各種記録と通信欄−生徒名として挿入
63      Workbooks("通知表.xls").Activate
64      Worksheets("各種記録と通信欄").Activate 'シート名「各種記録と通信欄」を
                                   'アクティブシートにする

65      Set mySht = Worksheets("各種記録と通信欄")
66      With Worksheets
67         mySht.Copy After:=.Item(.Count) 'ワークシート「各種記録と通信欄」を
                                '最末尾にコピー

68      End With
69      Set mySht = ActiveSheet
70      new_sheet_name = "各種記録と通信欄" & "−" & student_name
71      Sheets(mySht.name).name = new_sheet_name '"各種記録と通信欄" & student_name
72               'シート「mySht.Name」の名前を「各種記録と通信欄−生徒名」に変更
73      '
74      '所見欄から読込
75      Workbooks.Open Filename:=ThisWorkbook.Path & "\所見一覧表.xls"
76      Worksheets("所見欄").Activate  'シート名「所見欄」をアクティブシートにする
77      Set sendTbl = Range("所見欄")
78      For sems = 1 To 3         'sems=1,2,3:1学期,2学期,3学期
79         For j = 1 To 5         'j=1〜5:ひと学期分の所見欄が5行で構成されて
                             'いることに対応

80           syoken(sems, j) = sendTbl.Cells(3 + (j - 1) + 5 * (student_no - 1), 6 + (sems - 1))
81         Next
82      Next
83      '通信欄に書き込み
84      Workbooks("通知表.xls").Activate
85      Worksheets(new_sheet_name).Activate
86
               'シート名「各種記録と通信欄−生徒名」をアクティブシートにする
87      Set masterTbl = Range("通信欄")
88      For sems = 1 To 3          'sems=1,2,3:1学期,2学期,3学期
89         For j = 1 To 5
90            masterTbl.Cells(2 + (j - 1) + 5 * (sems - 1), 2) = syoken(sems, j)
91         Next
92      Next
93   Next 'k
94   Set MasterTbl = Nothing
95   Set sendTbl = Nothing
96   Set myRng = Nothing
97   End Sub

  各種記録と通信欄作成」マクロプログラムの解説
 5〜47行目  :セクションJのJ-3マクロプログラムに同じ。
 49〜72行目 :セクションJのJ-3マクロプログラムに同じ。
 74〜82行目 :所見欄一覧表からの読込
          78〜82行目:2重のFor〜Next文の外側ループは1〜3学期に対応、
                  内側ループは1人分の所見欄セル5行に対応しています。
                  78行目から分かる様に、所見欄データの有無に係わらず
                  3回繰り返すので、作成学期に応じて未記入となるべき所見
                  欄は空白のままとしておきます。
          80行目   :所見欄の内容をセル毎に、変数syoken(sems,j)に代入
 83〜92行目 :「各種記録と通信欄−生徒名」シートの通信欄に所見を記入

           
 K-2 各種記録と通信欄作成サンプルシート 

  以下にサンプルシートを掲げます。

         図 K-1 「通知表Readme」シートの各種記録と通信欄作成手順
 


     「各種記録と通信欄-生徒名」サンプルシートは、次のpdfファイルを参照下さい。
             sample_3p.pdfへのリンク

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