
Excel VBAで作業していると、
- 複数のPDFを1つにまとめたい
- シートごとに出力したPDFを結合したい
- 月次レポートを1つのPDFにしたい
という場面があります。
例えば、
売上.pdf
在庫.pdf
集計.pdf
を、
まとめ.pdf
この記事では、Excel VBAでPDFを結合する方法を例を挙げて説明します。
まず結論:VBAだけではPDF結合できない
ここが重要です。
Excel VBAには、
複数のPDFを結合する標準機能
がありません。
そのため、PDF結合をするには次のどちらかを使います。
方法① Adobe Acrobatを使う(本格的)
Adobe Acrobat(有料版)が入っていれば、
VBAからPDF結合ができます。
※ Adobe Readerではできません
方法② 最初からExcelでまとめてPDF化する(おすすめ)
もし元データがExcelなら、
PDFを後から結合する
よりも、
最初からまとめてPDF化する
方が簡単です。
この記事では両方紹介します。
方法① Adobe Acrobatを使ってPDFを結合する
サンプルコード
そのまま貼り付けて使えます。
Sub MergePDFs()
Dim AcroApp As Object
Dim MainPDF As Object
Dim TempPDF As Object
Dim files As Variant
Dim i As Long
' 結合するPDF一覧
files = Array( _
"C:\Test\1.pdf", _
"C:\Test\2.pdf", _
"C:\Test\3.pdf" _
)
' Acrobat起動
Set AcroApp = CreateObject("AcroExch.App")
Set MainPDF = CreateObject("AcroExch.PDDoc")
' 最初のPDFを開く
MainPDF.Open files(0)
' 2つ目以降を追加
For i = 1 To UBound(files)
Set TempPDF = CreateObject("AcroExch.PDDoc")
TempPDF.Open files(i)
MainPDF.InsertPages _
MainPDF.GetNumPages - 1, _
TempPDF, _
0, _
TempPDF.GetNumPages, _
True
TempPDF.Close
Next i
' 保存
MainPDF.Save 1, "C:\Test\merged.pdf"
' 終了
MainPDF.Close
AcroApp.Exit
End Sub
実行結果
次のPDFが
1.pdf
2.pdf
3.pdf
↓
merged.pdf
として結合されます。
コードのポイント
PDF一覧を指定
files = Array(
"C:\Test\1.pdf",
"C:\Test\2.pdf"
)
ここに結合したいPDFを並べます。
ページを追加
MainPDF.InsertPages
これがPDFを結合している部分です。
最後に保存
MainPDF.Save
これで1つのPDFになります。
注意点
Adobe Acrobat(有料)が必要
これは必須です。
Adobe Acrobat Reader では不可
です。
PDFファイルが開いていると失敗することがある
事前に閉じておきましょう。
方法② Excelで最初からまとめてPDF化する(おすすめ)
もし元データがExcelでそれをPDF化したいならこちらが簡単です。
コード例
Sub ExportAllSheetsToOnePDF()
Dim folderPath As String
folderPath = "C:\Test\"
Worksheets.Select
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=folderPath & "all.pdf"
End Sub
実行結果
複数シートが
all.pdf
として1つにまとまります。
どちらを使うべき?
| 方法 | おすすめ |
|---|---|
| 既にPDFがある | Acrobatで結合 |
| Excelデータから作る | まとめてPDF化 |
まとめ
Excel VBA単体では、
PDFを直接結合できない
ので、
- Adobe Acrobatを使う
または - 最初からまとめてPDF化する
のどちらかを使います。