この記事では、Excel VBAを利用して複数のドキュメントを指定の順番でPDFに結合して保存する方法を詳しく説明します。具体的なコードの例やその詳細な解説、そして応用例を通じて、一歩先のVBAスキルアップを目指しましょう。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本的な結合処理の流れ
複数のExcelドキュメントを指定の順番でPDFに結合するための基本的な手順は以下の通りです。
1. 必要なドキュメントを開く
2. 各ドキュメントをPDFとして一時的に保存する
3. 保存したPDFを結合する
4. 結合したPDFを最終的な保存場所に保存する
5. 一時的に保存したPDFと開いたExcelドキュメントを削除・閉じる
基本コードの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Sub CombinePDFsUsingVBA() Dim FileNames As Variant Dim I As Integer Dim AcrobatApp As Object Dim PDFsToCombine As Object ' ファイル選択ダイアログを表示して結合するファイルを選択 FileNames = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx", , , , True) ' Acrobatアプリケーションを開始 Set AcrobatApp = CreateObject("AcroExch.App") Set PDFsToCombine = CreateObject("AcroExch.PDDoc") ' 各ファイルを一時的にPDFとして保存し、結合 For I = LBound(FileNames) To UBound(FileNames) Dim TempPDF As Object Set TempPDF = CreateObject("AcroExch.PDDoc") ' ExcelファイルをPDFとして保存 ThisWorkbook.Sheets(I).ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileNames(I) & ".pdf" ' 保存したPDFを開く TempPDF.Open FileNames(I) & ".pdf" ' PDFを結合 PDFsToCombine.InsertPages PDFsToCombine.GetNumPages - 1, TempPDF, 0, TempPDF.GetNumPages, True TempPDF.Close Next I ' 結合したPDFを保存 PDFsToCombine.Save 1, "CombinedPDF.pdf" ' オブジェクトを解放 PDFsToCombine.Close AcrobatApp.Exit Set PDFsToCombine = Nothing Set AcrobatApp = Nothing End Sub |
コードの詳細解説
このコードでは、まずユーザに結合したいExcelドキュメントの選択を促すダイアログボックスを表示しています。選択されたファイルはFileNamesという配列に格納されます。
次に、Acrobatアプリケーションを起動しています。これは、PDFの結合を行うために必要です。PDFsToCombineというオブジェクトは、結合されたPDFを一時的に保持するためのものです。
ループ内で、各ExcelドキュメントをPDFとして一時的に保存しています。そして、この一時的に保存されたPDFを開き、PDFsToCombineに結合しています。
ループが終了した後、結合されたPDFを指定の場所に保存しています。最後に、使用したオブジェクトを解放しています。
応用例
1. 特定のシートだけを結合する
全てのシートを結合するのではなく、特定のシートだけを結合する場合の応用例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub CombineSpecificSheets() ' ... ' 基本コードと同じ部分は省略 ' ... ' 特定のシートをPDFとして保存 ThisWorkbook.Sheets("Sheet1").ExportAsFixedFormat Type:=xlTypePDF, FileName:="Sheet1.pdf" ThisWorkbook.Sheets("Sheet3").ExportAsFixedFormat Type:=xlTypePDF, FileName:="Sheet3.pdf" ' ... End Sub |
2. パスワードを設定したPDFを生成する
結合したPDFにパスワードを設定する応用例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub CombineWithPassword() ' ... ' 基本コードと同じ部分は省略 ' ... ' PDFにパスワードを設定して保存 PDFsToCombine.SetPassword "your_password" ' ... End Sub |
3. 特定のページ範囲だけを結合する
全ページを結合するのではなく、特定のページ範囲だけを結合する応用例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub CombineSpecificPages() ' ... ' 基本コードと同じ部分は省略 ' ... ' 特定のページ範囲だけを結合 PDFsToCombine.InsertPages 0, TempPDF, 1, 3, True ' 2ページ目から4ページ目までを結合 ' ... End Sub |
まとめ
Excel VBAを使用して複数のドキュメントを指定の順番でPDFに結合する方法は、業務効率化の大きな助けとなります。この記事で紹介した基本的なコードと応
用例を参考に、独自のカスタマイズや拡張を行って、より高度な業務処理を実現してみてください。
VBAも良いけどパワークエリも良い
VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。
クリックするとパワークエリの全11講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント