エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでPDF出力や印刷をする際のテクニックについて引き続きお伝えしていきます。

前回はこちらの記事。

エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
エクセルVBAでPDF出力や印刷をする際のテクニックについてお伝えしています。今回はエクセルVBAで印刷時のヘッダー、フッターの設定の方法と設定できる書式コード・VBAコードの一覧についてです。

エクセルVBAで印刷時のヘッダー・フッターの設定をする方法についてお伝えしてきました。

さて、今回は少し視点を変えまして、エクセルVBAで全てのシートをまとめてプレビューまたはPDF出力をする方法についてお伝えします。

今までは一つのシートしか対象にしていませんでしたからね…全部まとめてやっちゃいますよ。

どうぞよろしくお願いします!

スポンサーリンク

アクティブシートを印刷プレビューするVBAプログラム

アクティブシートのみを対象に印刷プレビューをするVBAプログラムはこちらです。

Sub outputPDF()

Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201604請求書_株式会社ホゲホゲ御中.pdf"

With ActiveSheet.PageSetup

    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    .CenterHorizontally = True
    .TopMargin = Application.CentimetersToPoints(1)
    .BottomMargin = Application.CentimetersToPoints(1)

End With

ActiveSheet.PrintPreview
'Activesheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力

End Sub

アクティブシートについて、PageSetupオブジェクトを使って出力設定を行いプレビューをするというプログラムですね(PDF出力はコメントアウトになっています)。

詳細についてはこちらの記事をご覧ください。

エクセルVBAで印刷時のページ中央配置と余白を設定する
エクセルVBAでPageSetupオブジェクトを使って印刷設定をページ中央配置にする方法、また上下左右のマージンを設定する方法についてお伝えします。また印刷プレビューの表示方法も紹介します。

当然ながら、例えばこちらのようにシートが複数ある場合でも

エクセルに複数のシートがある

実行すると当然ながらアクティブシートしかプレビューされません。

プレビューでアクティブシートしか表示されない

全てのシートを全部まとめてPDFにしたいのです。以降でその方法について解説をしていきます。

全てのシートをまとめてプレビューまたはPDF出力

皆さんが普通にエクセルで作業をされていて、全てのシートをまとめて印刷またはPDF出力するときはどうしていますか?

まずシート全てを選択してアクティブにしますよね?

VBAで動作させるときも同様で、印刷またはPDF出力をしたいシートを全て選択すればOKなのです。

では、それも踏まえてVBAプログラムを組んでみましょう。こちらです。

Sub outputPDF()

Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201604請求書_株式会社ホゲホゲ御中.pdf"

Dim ws As Worksheet
For Each ws In Worksheets

    With ws.PageSetup

        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .CenterHorizontally = True
        .TopMargin = Application.CentimetersToPoints(1)
        .BottomMargin = Application.CentimetersToPoints(1)

    End With

Next ws

Worksheets.Select
ActiveWorkbook.PrintPreview
'ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力

End Sub

以下ポイントを解説していきますね。

全てのワークシートについて繰り返す

7行目~20行目のFor Each~Next文ですが

For Each 変数 In Worksheets
‘処理
Next 変数

とすることで、ブックに存在するすべてのワークシートについて繰り返し処理ができます。

WorksheetsはWorksheetsコレクションといいまして、作業中のワークブックにあるすべてのWorksheetオブジェクトの集まりを表しています。

ですから、その中の全てのワークシートについて処理をすることができるというわけですね。

これで同一の出力設定を施すということを実現しています。

全てのワークシートを選択してアクティブにする

同様にWorksheetsコレクションを使うことで、全てのシートをアクティブにすることができます。

22行目の

Worksheets.Select

の部分です。

選択したシートをプレビューまたはPDF出力する

複数のシートをプレビューまたはPDF出力する場合は、対象となるシートを全て選択した上でワークブックに対してPrintPreviewまたはExportAsFixedFormatメソッドを実行します。

Workbookに対して、というのがポイントです。

つまり対象のシートが選択されている状態であれば、PDF出力する場合は

Workbookオブジェクト.PrintPreview

PDF出力する場合は

Workbookオブジェクト.ExportAsFixedFormat Type:=xlTypePDF, fileName:=ファイル名

とします。

上記プログラムでいうと23,24行目ですね。

実行結果

このプログラムを実行すると

全てのシートをプレビュー

とプレビュー表示されます。画像だとわかりづらいですが、「請求書②」のシートも2ページ目としてきっちりプレビューされています。

また、このプログラムが実行された後のワークブックの状態として

全てのシートが選択された

このように全てのシートが選択されている状態になっていますね。

まとめ

以上、エクセルVBAで全てのシートをまとめてプレビューまたはPDF出力をする方法についてお伝えしました。

まず、作業中のワークブックの全てのシートを表すWorksheetsコレクションですね。

これに対してFor~Each文による繰り返しをすることや、Selectメソッドを実行することをお伝えしました。

また最終的にプレビューをするまたはPDF出力する際には、全てのシートを選択した状態でワークブックに対してメソッドを実行することがポイントでした。

次回は、全てのワークシートではなくて、一部のワークシートを対象にした場合はどうするか、についてお伝えできればと思います。

429 Too Many Requests

どうぞお楽しみに!

連載目次:エクセルVBAでPDF出力と色々な印刷設定

エクセルで見積書や請求書などの帳票を作成する場合、印刷やPDF出力したいときがありますよね。このシリーズでは印刷やPDF出力をする方法、またその際の様々な設定やテクニックについてお伝えします。
  1. 初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム
  2. エクセルVBAで印刷時のページ中央配置と余白を設定する
  3. エクセルVBAで印刷範囲の設定をする方法とクリアをする方法
  4. エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
  5. エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法
  6. エクセルVBAで一部のワークシートのみ選択してPDFで出力する方法
タイトルとURLをコピーしました