はじめに
データベースからデータをワークシートに落としたとき、1ページに収まるのかどうか、何ページになるのか気になりますよね。また、落とし込んだデータを何とかページ内に収めるような操作を自動化できたら便利です。
そこで、Excel VBAで「ページ設定」と「印刷」の2つの操作を組み合わせて、データベースから取得したデータの作表・印刷処理を自動化するテクニックを紹介します。
1つはコードですべての処理を自動実行する方法、もう1つはユーザーフォームを使用し、いくつかの設定を選んで印刷を行う方法です。
なお、Excel 2007でも動作することを確認しています。
対象読者
Excel VBAを使ってマクロ(プログラム)を作ったことのある人、Visual Basicを使える人が対象です。
必要な環境
Excel 2000/2002/2003/2007が使用できる環境。
マクロ実行時の注意事項
Accessのデータベースファイル「msdata.mdb」を、マクロを実行するブックと同じフォルダにおいてください。
処理の流れ
このマクロは、次のような処理を実行します。
コードバージョン
- データベースを開きクエリを実行し、データをセルに転送します。
- インプットボックスを使用して表のタイトルを入力してもらいます。
- 罫線を設定するかどうかをメッセージボックスでユーザーに問い合わせ、罫線を設定します。
- データが入力されたセルのすべての列幅を計算し、A4サイズの用紙に収まるのかどうかを判断します。そして、その結果により用紙を縦で印刷するのか横で印刷するのか、また縮小印刷でページ内に収めて印刷するかどうかを決めます。
- 用紙を切り替えて印刷する処理は、引数を持ったSubプロシージャで、データベース処理はクエリ結果の総レコード数を返すFunctionプロシージャで作成します。
- 印刷設定では、
PageSetup
オブジェクトの各プロパティを使用して、上下左右のマージン設定やヘッダーの設定、用紙の方向やページ内に収める設定などを行います。
ユーザーフォームバージョン
- ユーザーフォームを使用して、複数のクエリをドロップダウンリストボックスで表示し、実行するクエリをユーザーに選んでもらうようにします。
- フレームコントロールとトグルボタンコントロールを組み合わせて、作成した表にオートフォーマットを設定できるようにします。
- 表のタイトルはテキストボックスで、その他の印刷設定をチェックボックスとスピンボタンコントロールを使い、ユーザーからの入力を受け付けるようにします。
- データベース処理、印刷方法の自動切換えは、コードバージョンで作成したプロシージャを呼び出して使用するようにします。
種類 | 内容 |
<Excel VBA> | AutoFitメソッドでセル幅をデータサイズに合わせる |
Widthプロパティでセル幅をポイント単位で取得する | |
PrintOutメソッドでワークシートを印刷する | |
PageSetupオブジェクトによるページ設定操作 | |
PaperSizeプロパティで用紙サイズを設定する | |
LeftMargin・RightMarginプロパティで余白設定 | |
CentimetersToPointsメソッドを使った単位換算処理 | |
Left・Right・CenterHeaderプロパティでヘッダー設定 | |
FitToPagesWideプロパティで印刷範囲をページ内に収める | |
Bordersオブジェクトによる罫線設定操作 | |
AutoFormatメソッドでオートフォーマットを設定する | |
PrintHeadingsプロパティで行列番号を印刷 | |
BlackAndWhiteプロパティで白黒印刷を設定 | |
<フォームとコントロール> | フレームのScrollBars・ScrollHeighプロパティで垂直スクロールバーを設定 |
スピンボタンのMin・Maxプロパティで動作範囲を設定 | |
トグルボタンを使ったラジオボタン動作処理 | |
<DAO> | CreateQueryDefメソッドによるクエリの実行 |
RecordCountプロパティでクエリ結果のレコード数を把握する | |
MoveFirst・MoveLast・MoveNextメソッドでカレントレコードを移動 | |
<VBA> | Round関数による小数点の桁丸め操作 |