Section L 通知表の印刷 |
作成の基本方針
・表表紙、裏表紙は通知表印刷時に作成する。
・学期の違いにより、裏表紙の修了証が無記名の場合(1,2学期)と記名の場合(3学期)
を選択、実行できる方式とする。
・名簿欄表示画面上から、印刷したい生徒のセル範囲を選択可能とする。
L-1 印刷学期選択用ユーザーフォーム
セクション末尾に掲げた「通知表Readme」シートの「通知表印刷の手順」にあるマクロ
ボタン「印刷実行」を押すと、次のユーザーフォームが表示されます。
図 L-1 印刷学期選択用ユーザーフォーム
このユーザーフォームは、下のマクロプログラムで表示されています。
1 Sub 印刷実行()
2 印刷学期選択.Show 'ユーザーフォームの表示
3 End Sub
2行目 :「印刷学期選択」のオブジェクト名が付いたユーザーフォームを表示しなさい。
図L-1に示された2つのケースから、該当するケースを確認し、右横のコマンドボタンを
押します。個々のコマンドボタンのクリック操作には、次のマクロが対応しています。
「wcase_1」コマンドボタン
1 Private Sub CommandButton1_Click()
2 wcase = 1 '一学期ニ学期通知表印刷
3 Unload 印刷学期選択 'ユーザーフォームの非表示
4 Call 通知表印刷
5 End Sub
「wcase_2」コマンドボタン
Private Sub CommandButton2_Click()
wcase = 2
'三学期通知表印刷
Unload 印刷学期選択 'ユーザーフォームの非表示
Call 通知表印刷
End Sub
「wcase_1」コマンドボタンの解説
2行目を除き、他のコードは全て同じなので、wcase_1についてのみ、説明します。
1行目と5行目 :コマンドボタンがクリックされたときの実行コードは、Private Sub〜End Sub
の間に記述します。
2行目 :変数wcaseに、何番目のマクロボタンを押したのかを記憶させます。この変数
は、4行目で呼び出す「通知表印刷」マクロプログムに引き渡すので、Public
宣言されます。
3行目 :図L-1に示したユーザーフォームを消します。
4行目 :「通知表印刷」マクロプログラムを呼び出し、実行します。
L-2 通知表印刷マクロプログラム
事前に、次のpublic宣言がされています。
Public student_name As String, student_no As Integer
Public grade As Integer, Class As Integer
Public scase As Integer, wcase As Integer
「通知表印刷」マクロプログラム
1 Sub 通知表印刷()
2 Dim masterTbl As Range, myRng As Range
3 '連結成績から読込
4 Workbooks.Open Filename:=ThisWorkbook.Path
& "\連結5段階評価.xls"
5 Worksheets("連結成績").Activate 'シート名「連結成績」をアクティブシートにする
6 ' Tips A-003
7 myStr = "マウスで出力したい生徒番号のセル範囲を選択して、OKボタンを押してください"
8 On Error Resume Next
9 Set myRng = Application.InputBox(myStr, Type:=8)
10 On Error GoTo 0
11 If myRng Is Nothing Then
12 MsgBox "キャンセルされました"
13 End If
14 '
15 Set masterTbl = Range("連結成績")
'連結成績と名付けた表のセル範囲をmasterTblにセット
16 Set activeRng = myRng 'インプットボックスで選択されたアクティブセルをactiveRngにセット
17 '選択範囲の取り出し
18 Workbooks("通知表.xls").Activate
19 Worksheets("表表紙").Activate
20 Range("B27") = activeRng.Address
'絶対アドレスの範囲をB27セルに表示
21 If activeRng.Address Like "*:*" Then '選択人数複数の場合
22 Range("B28").Select
23 ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,FIND("":"",R[-1]C)-1)"
24 '絶対アドレス範囲の前半分をB28セルに表示
25 Range("B29").Select
26 ActiveCell.FormulaR1C1 = "=RIGHT(R[-2]C,LEN(R[-2]C)-FIND("":"",R[-2]C))"
27 '絶対アドレス範囲の後ろ半分をB29セルに表示
28 Range("C28").Select
29 ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(RC[-1],LEN(RC[-1])-3))"
30 '絶対アドレスから行番号を取り出して数値化
31 ist = Range("C28")
- 5 ' -5:絶対アドレス行番号から生徒番号を求める際の調整
32 '連結成績の開始行を変更する時は修正必要
33 Range("C29").Select
34 ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(RC[-1],LEN(RC[-1])-3))"
35 iend = Range("C29")
- 5
36 Else '選択人数1人の場合
37 Range("C28").Select
38 ActiveCell.FormulaR1C1 = "=VALUE(RIGHT(R[-1]C[-1],LEN(R[-1]C[-1])-3))"
39 '絶対アドレスから行番号を取り出して数値化
40 ist = Range("C28")
- 5
41 iend = ist
42 End If
43 Range("B27:C29").Select
44 Selection.ClearContents '一時的なセル表示を消去
45 For i = ist To iend
46 student_no = i
47 grade = masterTbl.Cells(student_no
+ 2, 1).Value '行番号+2は見出し分、
48 '列番号1;masterTbl 内での相対列番号
49 Class = masterTbl.Cells(student_no
+ 2, 2).Value
50 student_name = masterTbl.Cells(student_no
+ 2, 4).Value
51 Call 表表紙作成
52 'ActiveWindow.SelectedSheets.PrintOut Copies:=1,
Collate:=True'アクティブシートの印刷
53 new_sheet_name = "5段階評価−"
& student_name
54 Worksheets(new_sheet_name).Activate
'「5段階評価−個人名」が既に出力分作成さ
55 'れていることを前提にシートをアクティブに切換
56 'ActiveWindow.SelectedSheets.PrintOut Copies:=1,
Collate:=True'アクティブシートの印刷
57 new_sheet_name = "各種記録と通信欄−"
& student_name
58 Worksheets(new_sheet_name).Activate
'「各種記録と通信欄−個人名」が既に出力分
59 '作成されていることを前提にシートをアクティブに切換
60 'ActiveWindow.SelectedSheets.PrintOut Copies:=1,
Collate:=True'アクティブシートの印刷
61 If wcase = 1 Then
62 Worksheets("無記名裏表紙").Activate
63 Else
64 Call 裏表紙作成
65 End If
66 'ActiveWindow.SelectedSheets.PrintOut Copies:=1,
Collate:=True'アクティブシートの印刷
67 Next
68 Set masterTbl = Nothing
69 Set myRng = Nothing
70 End Sub
「通知表印刷」マクロプログラムの解説
3〜44行目 :セクションJのJ-3プログラムに同じ。
51行目 :「表表紙作成」サブプログラムの呼び出し。
52,56,60,66行目:先頭の注釈行の印’を取ると、赤字の部分が有効となり、印刷が可能です。
ここでは、マクロプログラムの動きを理解する目的のためには、実行の度毎
の出力は煩わしいので、注釈の印’を付けています。本番印刷の際には、
この’を削除して下さい。
64行目 :3学期の場合のみ、修了証に学年、名前が記入されます。
「表表紙作成」マクロプログラム
1 Sub 表表紙作成() '一人毎の通知表作成
2 '表表紙に挿入
3 Windows("通知表.xls").Activate
4 Worksheets("表表紙").Activate
'シート名「表表紙」をアクティブシートにする
5 Range("E20") = " 第 "
& grade & " 年 " &
Class & " 組 "
6 Range("F20") = student_no
& "番 生徒氏名"
7 With Selection
8 .HorizontalAlignment = xlRight
9 .VerticalAlignment = xlCenter
10 End With
11 Range("G20") = student_name
12 With Selection
13 .HorizontalAlignment = xlCenter
14 .VerticalAlignment = xlCenter
15 End With
16 End Sub
「表表紙作成」マクロプログラムの解説
6〜10行目 :F20セルに「○番 生徒氏名」を水平方向右寄せ、高さ方向中央位置指定
11〜15行目 :G20セルに生徒氏名を表示し、水平方向中央寄せ、高さ方向中央位置指定
「裏表紙作成」マクロプログラム
1 Sub 裏表紙作成()
2 Dim myTbl As Range
3 Worksheets("裏表紙").Activate
'シート名「裏表紙」をアクティブシートにする
4 Set myTbl = Range("修了証Tbl")
5 '修了証Tblと名付けた表のセル範囲をmasterTblにセット
6 myTbl.Cells(14, 3) = grade '修了証Tbl内の相対行列番号
7 myTbl.Cells(8, 4) = student_name
8 Set myTbl = Nothing
9 End Sub
「裏表紙作成」マクロプログラムの解説
4〜7行目 :修了証の学年、氏名欄の記入
L-3 通知表印刷サンプルシート
以下にサンプルシートを掲げます。
図 L-2 「通知表Readme」シートの通知表印刷の手順
「表表紙」サンプルシートは、次のpdfファイルを参照下さい。sample_1p.pdfへのリンク
「裏表紙」サンプルシートは、次のpdfファイルを参照下さい。sample_4p.pdfへのリンク
索引
ページの先頭へ戻る
目次へ戻る