得意先を50音順にグループ化して電話帳を印刷するお手本データベース

図5-7-1 得意先を50音順にグループ化して電話帳を印刷した例
このサンプルデータベースは、得意先を50音順にグループ化して電話帳を印刷します。50音の見出しは、楕円で囲って簡単に検索できるようにしています。得意先は、1行間隔で背景色を付けて見易くしています。各ページのフッターにページの先頭と最後に印字される得意先名を“アリス亭-北冷マート”のように印字します。
サンプルデータベース(CH5-7.mdb)では、以下のノウハウを習得することができます。
◆ 得意先を50音順にグループ化する方法
◆ 全角のカタカナを半角のカタカナに変換する方法
◆ グループの見出しを楕円で囲む方法
◆ 1行間隔で背景色を付ける方法
◆ ページフッターにページの先頭と最後の得意先名を印刷する方法
◆ 得意先を2列で印刷する方法
● サンプルデータベースで使用するテーブル/クエリを準備するには
1 Access を起動したら作業フォルダに、新規データベースCH5-7.mdbを作成します。
2 メニューから外部データの取り込み、テーブルのリンクをクリックします。リンクのダイアログが表示されたら、Access のサンプルデータベース Northwind.mdbを選択してリンクボタンをクリックします。(Northwind.mdbは、デフォルトでは”C:\Program Files\Microsoft Office\Office\Samples”にインストールされます。)
3 テーブルのリンクのダイアログが表示されたら、すべて選択のボタンをクリックします。最後にOKボタンをクリックしてリンクを完了させます。
4 テーブルをリンクしたら、データベースウィンドウにNorthwind.mdbの全てのテーブルが表示されているか確認します。
5 データベースウィンドウからクエリ
をクリックして、一覧からデザインビューでクエリを作成するをダブルクリックします。テーブルのダイアログが表示されたら、閉じるのボタンをクリックします。メニューからSQLのアイコン
をクリックして、SQLビューを表示させます。SQLビューには、SELECT;が表示されていますので、削除してからリスト5-7-1のqryPhoneBookのSQLを入力します。(SQLを入力する代わりに、本書CD-ROMのCH2-7.mdbからqryPhoneBookをインポートすることもできます。)フリガナ2のフィールドには、StrConv([フリガナ],8)関数が埋め込まれています。この関数では、全角カタカナを半角カタカナに変換します。全角カタカナを50音順に並べ替えしたとき、ガ、ギなどの濁音がカ、キと分離される不都合を回避しています。クエリをデザインビューに切り替えると、図5-7-2のように表示されます。クエリをqryPhoneBookの名称で保存して閉じます。
リスト5-7-1 qryPhoneBookのSQL
|
SELECT StrConv([フリガナ],8) AS フリガナ2, 得意先.得意先名, 得意先.電話番号 FROM 得意先; |

図5-7-2 qryPhoneBookのデザインビュー
6 テーブルとクエリの準備ができたら、Access を終了させます。
● 電話帳を印刷するレポートを作成するには
1 Accessを起動したら作業フォルダに作成した CH5-7.mdbを開きます。
2 データベースウィンドウからレポート
をクリックしたら、新規作成ボタンをクリックします。レポートの新規作成ダイアログが表示されたら、一覧からレポートウィザードを選択します。基になるテーブル/クエリのコンボボックスからqryPhoneBookを選択したら、OKボタンをクリックします。ウィザードの指示に従って、詳細セクションに得意先名と電話番号のテキストボックスを配置します。テキストボックスのプロパティを表示させたら、コントロールの名前を”txtName”, “txtPhone”に書き替えます。
3 Accessの表示メニューからページヘッダー/フッターをクリックして、レポート上にページヘッダー/フッターを表示させます。ツールボックスからイメージのアイコン
をクリックして、ページヘッダーの中央に配置します。図の挿入のダイアログが表示されたら、サブフォルダー(CH5-7)からBackImage.gifを選択して貼り付けます。同様の手順で、サブフォルダからMyPhoneBook.gifを貼り付けます。イメージのコントロールをクリックして、■のサイズハンドラーを表示させたら、マウスをサイズハンドラー上に移動させて図5-7-3に示すようにサイズを調整します。
ツールボックスからテキストボックスのアイコン
をクリックしたら、イメージの左下に配置します。テキストボックスのプロパティを表示させたら、名前を”txtHeader”、可視を“いいえ”に設定します。このテキストボックスは、ページの先頭に印字される得意先名を退避するのに使用します。ツールボックスからテキストボックスのアイコン
をクリックしたら、イメージの右下に配置します。テキストボックスのプロパティを表示させたら、名前を”txtPage”に書き替えて、コントロールソースに=IIf([Page]>1,"Page " & [Page] & "/ " & [Pages],"")を設定します。また、文字配置を”右”に設定します。このテキストボックスは、電話帳のページ番号を9/99のように印字するのに使用します。(但し、1ページ目にはページ番号が印字されません)

図5-7-3 ページヘッダーにイメージとテキストボックスを配置した例
4 メニューから並べ替え/グループ化のアイコン
をクリックして、ダイアログを表示させます。フィールド/式のコンボボックスから“フリガナ2”、並べ替え順序のコンボボックスから”昇順”を選択します。グループプロパティのグループヘッダーを“はい”に設定してレポート上にフリガナ2のグループヘッダーを表示させます。

図5-7-4 フリガナ2のグループヘッダーを追加
ツールボックスからテキストボックスのアイコン
をクリックして、フリガナ2のグループヘッダーの左側に配置します。テキストボックスのプロパティを表示させたら、名前を”txtLetter”に書き替えて、コントロールソースに=" " & Left([フリガナ2],1)を設定して50音の1文字が印字されるようにします。また、フォントサイズを”14”、フォント太さを”太字”に設定して強調印字します。
5 ツールボックスからテキストボックスのアイコン
をクリックして、ページフッターに配置します。テキストボックスを配置したら、幅をページ幅と同じぐらいになるように拡大します。テキストボックスのプロパティを表示させたら、名前を”txtFooter”に書き替えて、コントロールソースに=[txtHeader] & " - " & [txtName]を設定します。また、フォントサイズを”12”、フォント太さを”太字”に設定します。このテキストボックスは、ページの先頭と最後の得意先名を印字するのに使用します。

図5-7-5 ページフッターにページの先頭と最後の得意先名を印字するテキストボックスを配置した例
6 レポートのページヘッダー、フリガナ2ヘッダー、詳細、ページフッタのプロパティを表示させたら、コントロールの名前を”PageHeader”, “GroupHeader”, “Detail”, “PageFooter”に書き替えます。メニューからコードのアイコン
をクリックしてレポートモジュールを表示させます。CH5-7.mdbを開いたら、rptPhoneBookのレポートモジュールをコピーして貼り付けます。レポートモジュールのソースコードは、リスト5-7-2を参照してください。また、CH5-7.mdbを開いたら、モジュールbasLinkedTables, basMyLib, basWindowsCommonDialogをインポートしておいてください。
7 レポートをrptPhoneBookの名称で保存します。ファイルメニューからページ設定をクリックして、ページ設定のダイアログを表示させます。ページタブをクリックしたら、印刷の向きのオプションボタンから”縦”、用紙サイズのコンボボックスから”A4”を選択します。次に、レイアウトタブをクリックしたら行列設定枠の列数を”2”、サイズ枠の“実寸”のチェックを外して、印刷方向枠から“左から右へ”のラジオボタンをクリックします。最後に、OKボタンをクリックしてページ設定ダイアログを閉じます。
図5-7-6 印字の向き、用紙サイズを設定

図5-7-7 列数を2、実寸のチェックを外して、左から右に印字されるように設定
8 メニューから印刷プレビューのアイコン
をクリックして結果を確認します。50音順に得意先が2列に印字されることを確認します。ページ番号は2ページ目以降印字されます。詳細セクションには、1行間隔で背景色が付けられます。ページフッターには、ページの先頭/最後の得意先名が”アリス亭-北冷マート”のように印字されます。また、ページフッターは、偶数ページのとき左寄せ、奇数ページのとき右寄せされて印字されます。レポートが正常に印刷されることを確認したら、Access を終了させます。
NOTE:
|
ヘッダー/フッターに、詳細セクションの列幅より大きいコントロール(例えば、電話帳のイメージ)を配置するときは、ページ設定ダイアログのレイアウトタブから実寸をクリックしてチェックを外す必要があります。この場合、レポートの幅は、ヘッダー/フッターセクションの幅が適用されますが、詳細セクションの幅は、各列幅の合計が適用されます。 |
Sub PageHeader_Format()イベントの処理
このイベントは、ページヘッダーのフォーマット時に実行されます。このイベントでは、詳細セクションのtxtName(得意先名)をtxtHeaderに退避します。ページヘッダーのフォーマット時のイベントから、詳細セクションのtxtNameを参照したときは、ページの先頭に印字される得意先名が取得されます。
Sub GroupHeader_Format()イベントの処理
このイベントは、フリガナ2グループヘッダーのフォーマット時に実行されます。このイベントでは、楕円を描いて50音を囲みます。楕円を描くには、フォームのCircleメソッドを使用します。描写した、楕円を塗つぶすにはフォームのFillColorメソッドを使用します。
With Me
Me.FillColor = 14548991
Me.FillStyle = 0
Me.Circle (sngX, sngY), sngRadius, , , , 0.8
End With
Sub Detail_Format()イベントの処理
このイベントは、フォームの詳細セクションのフォーマット時に実行されます。このイベントでは、詳細セクションに1行間隔で背景色を付けて印刷します。
Sub PageFooter_Format()イベントの処理
このイベントは、ページフッターのフォーマット時に実行されます。このイベントでは、ページフッタに印字される得意先(ページの先頭/最後の得意先名)を、偶数ページなら左寄せ、奇数ページなら右寄せして印刷します。
Function IsEven()関数
この関数は、引数の値が偶数ならTrue、奇数ならFalseを返します。
リスト5-7-2 rptPhoneBookのレポートモジュール
|
Option Compare Database Option Explicit Const conGray = 14548991 Const conWhite = 16777215 Dim mfBackColor As Boolean Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Me.Section(0).BackColor = IIf(mfBackColor, conGray, conWhite) mfBackColor = Not mfBackColor End Sub Private Sub GroupHeader_Format(Cancel As Integer, FormatCount As Integer) Const TWIP = 567 ' tiwps per 1cm Dim sngX As Single Dim sngY As Single Dim sngRadius As Single
With Me sngX = TWIP / 2 sngY = .ScaleHeight / 2 sngRadius = .ScaleHeight / 2 Me.FillColor = 14548991 Me.FillStyle = 0 Me.Circle (sngX, sngY), sngRadius, , , , 0.8 End With mfBackColor = False End Sub Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer) Const acAlignLeft = 1 Const acAlignRight = 3 Me.txtFooter.TextAlign = IIf(IsEven(Me.Page), acAlignLeft, acAlignRight) End Sub Private Sub PageHeader_Format(Cancel As Integer, FormatCount As Integer) Me.txtHeader = Me.txtName End Sub Private Function IsEven(intValue As Integer) As Boolean IsEven = (intValue Mod 2 = 0) End Function |