Excel VBAを使って、複数のシートを条件ごとに異なる印刷範囲・余白・書式でPDF出力する方法を紹介します。
今回のマクロでは、各シートのB2またはC4に入力されている店番を確認し、対象となるシートだけをPDFとして出力します。
シートごとにレイアウトが違う帳票をまとめてPDF化したい場合や、印刷プレビューでは時間がかかる処理を自動化したい場合に便利です。
このマクロでできること
- 複数のシートを順番に確認する。
- 対象となる店番が入っているシートだけをPDF出力する。
- B2に店番があるシートは
A1:T60をPDF出力する。 - C4に店番があるシートは
A1:M46をPDF出力する。 - シートごとに余白やフォントサイズを変更する。
- 除外したいシートはPDF出力しない。
事前に確認するシート構成
このマクロでは、次のようなシート構成を想定しています。
| シート名・種類 | 役割 |
|---|---|
| データ | 対象となる店番を管理するシート。 |
| 帳票シート | B2またはC4に店番が入っているPDF出力対象のシート。 |
| データ1・データ2・データ3 | PDF出力から除外するシート。 |
このマクロで行う処理
- 処理速度を上げるために画面更新を停止する。
- 「データ」シートから対象となる店番を取得する。
- すべてのワークシートを順番に確認する。
- 除外シートはスキップする。
- B2またはC4の店番を確認する。
- 対象の店番であれば、印刷範囲を設定する。
- シートごとに余白・フォントサイズなどを調整する。
ExportAsFixedFormatでPDFとして出力する。- 最後に画面更新や計算設定を元に戻す。
メイン処理のVBAコード
まずは、複数のシートを確認して、条件に合うシートだけをPDF出力するメイン処理です。
PDFの結合処理はここでは行わず、対象シートを個別PDFとして出力するところまでにしています。
除外シートを判定する関数
PDF出力したくないシートを判定するための関数です。
「データ」シートや作業用シートなど、PDF化したくないシートを除外できます。
条件ごとの印刷範囲を設定する
このマクロでは、B2に店番がある場合と、C4に店番がある場合で、PDF出力する範囲を変えています。
| 判定セル | PDF出力範囲 | 主な用途 |
|---|---|---|
| B2 | A1:T60 |
横に広い帳票 |
| C4 | A1:M46 |
比較的コンパクトな帳票 |
PDF出力処理
PDF出力には、Excel VBAの ExportAsFixedFormat を使います。
この処理により、指定した印刷範囲をPDFファイルとして保存できます。
書式設定のポイント
PDF出力前に、フォントサイズや余白、中央揃えなどを設定します。
- B2の店番シートでは、特定範囲のフォントサイズを変更する。
- S列の幅を自動調整する。
- シートの種類に応じて余白を変える。
- A4縦向きでPDF出力する。
エラー時にExcelの設定を元に戻す
このマクロでは、処理を速くするために画面更新や自動計算を一時的に停止します。
ただし、途中でエラーが発生した場合でも、最後に必ず設定を元に戻すようにしておくことが重要です。
Application.ScreenUpdating = False やApplication.Calculation = xlCalculationManual を使う場合は、処理終了時に必ず元に戻してください。エラーで途中停止すると、Excelの表示や計算設定が変わったままになることがあります。
主な変数の役割
| 変数名 | 役割 |
|---|---|
ws |
現在処理しているワークシート。 |
dataSheet |
対象となる店番を取得するデータシート。 |
fukuokaShops |
対象店番を格納するDictionary。 |
printRange |
PDF出力する印刷範囲。 |
excludeSheets |
PDF出力しないシート名のリスト。 |
pdfPath |
PDFの保存先パス。 |
複数PDFを1つにまとめたい場合
このページでは、複数シートを条件ごとに個別PDFとして出力するところまでを紹介しました。
作成した複数PDFを1つにまとめたい場合は、PDF結合用の処理が別途必要です。
Windowsの copy /b コマンドを使った簡易連結方法については、別記事で紹介しています。
このページでは、PDFの結合処理は詳しく扱いません。
PDF結合まで詳しく説明すると、PDF出力の記事とPDF連結の記事の内容が重なってしまうためです。
このページは「複数シートを個別PDFとして出力する方法」に絞っています。
まとめ
Excel VBAを使うと、複数のシートを条件ごとに判定し、異なる印刷範囲や書式でPDF出力できます。
今回の方法では、B2に店番があるシートは A1:T60、C4に店番があるシートは A1:M46 のように、シートの形式に応じてPDF出力範囲を変えています。
PDFを1つにまとめる処理は別記事に分けることで、このページでは「PDF出力」だけに集中でき、読みやすい構成になります。


コメント