Excel VBA|異なる書式の複数シートをPDF出力する方法

スポンサーリンク
この記事は約5分で読めます。

Excel VBAを使って、複数のシートを条件ごとに異なる印刷範囲・余白・書式でPDF出力する方法を紹介します。

今回のマクロでは、各シートのB2またはC4に入力されている店番を確認し、対象となるシートだけをPDFとして出力します。

シートごとにレイアウトが違う帳票をまとめてPDF化したい場合や、印刷プレビューでは時間がかかる処理を自動化したい場合に便利です。

このマクロでできること

  • 複数のシートを順番に確認する。
  • 対象となる店番が入っているシートだけをPDF出力する。
  • B2に店番があるシートは A1:T60 をPDF出力する。
  • C4に店番があるシートは A1:M46 をPDF出力する。
  • シートごとに余白やフォントサイズを変更する。
  • 除外したいシートはPDF出力しない。

事前に確認するシート構成

このマクロでは、次のようなシート構成を想定しています。

シート名・種類 役割
データ 対象となる店番を管理するシート。
帳票シート B2またはC4に店番が入っているPDF出力対象のシート。
データ1・データ2・データ3 PDF出力から除外するシート。

このマクロで行う処理

  1. 処理速度を上げるために画面更新を停止する。
  2. 「データ」シートから対象となる店番を取得する。
  3. すべてのワークシートを順番に確認する。
  4. 除外シートはスキップする。
  5. B2またはC4の店番を確認する。
  6. 対象の店番であれば、印刷範囲を設定する。
  7. シートごとに余白・フォントサイズなどを調整する。
  8. ExportAsFixedFormat でPDFとして出力する。
  9. 最後に画面更新や計算設定を元に戻す。

メイン処理の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出力」だけに集中でき、読みやすい構成になります。

コメント

タイトルとURLをコピーしました