Accessお手本データベースのホームへ戻る

得意先を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-1qryPhoneBookSQLを入力します。(SQLを入力する代わりに、本書CD-ROMCH2-7.mdbからqryPhoneBookをインポートすることもできます。)フリガナ2のフィールドには、StrConv([フリガナ],8)関数が埋め込まれています。この関数では、全角カタカナを半角カタカナに変換します。全角カタカナを50音順に並べ替えしたとき、ガ、ギなどの濁音がカ、キと分離される不都合を回避しています。クエリをデザインビューに切り替えると、図5-7-2のように表示されます。クエリをqryPhoneBookの名称で保存して閉じます。

 

リスト5-7-1 qryPhoneBookSQL

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を選択します。次に、レイアウトタブをクリックしたら行列設定枠の列数を、サイズ枠の“実寸”のチェックを外して、印刷方向枠から“左から右へ”のラジオボタンをクリックします。最後に、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

 

ダウンロード (CH5-7.lzh)
Accessお手本データベースのホームへ戻る