- 公開日:
- 更新日:
フォルダ内のエクセルを一括でPDF化する方法
大量のエクセルファイルを一気にPDF化したいとき、1つ1つファイルを開いて変換していたら、膨大な時間がかかってしまいます。
ここでは、フォルダ内のエクセルファイルを一括でPDFに変換する方法をご紹介します。
VBAのコードをコピーして、指定の場所に貼り付けるだけの簡単な作業で自動化できます。
開発タブを表示する
エクセルのVBAを使用するには、初期設定では表示されていない「開発」タブを表示させる必要があります。
開発タブを表示させる方法は、以下の通りです。
ファイルタブを選択します。
オプションを選択します。
「Excel のオプション」ダイアログボックスが表示されます。
リボンのユーザー設定を選択し、「開発」にチェックを入れ、OKボタンを押します。
開発タブが表示されました。
フォルダ内のエクセルをPDF化するVBAコード
フォルダ内にある全てのエクセルファイルを一括でPDF化したい場合は、以下のコードを利用してください。
Sub エクセル一括PDF化()
Dim ExcelFile, FileName, FilePath, ExcelPDF As String
Application.ScreenUpdating = False
ExcelFile = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")
FileName = Dir(ExcelFile)
FilePath = Replace(ExcelFile, FileName, "")
ExcelPDF = Dir(FilePath & "*.xlsx")
Do While ExcelPDF <> ""
Workbooks.Open FileName:=FilePath & ExcelPDF, ReadOnly:=True
ExcelPDF = Left(ExcelPDF, InStr(ExcelPDF, ".") - 1)
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=FilePath & ExcelPDF
ActiveWindow.Close
ExcelPDF = Dir()
Loop
Application.ScreenUpdating = True
End Sub
このコードは、「特定のフォルダの中にあるエクセルファイルを、1つずつ開いてPDFに変換する」というものです。
コードの詳細については以下の表をご参照ください。各項目がどのような動作をするのか解説しています。
項目 | 説明 |
---|---|
Application.ScreenUpdating | マクロの処理過程を見るかどうか True:マクロの処理過程を見る False:マクロの処理過程を見ない マクロが終了した後はTrueに戻す |
GetOpenFilename | 「ファイルを開く」ダイアログボックスを表示する |
Workbooks.ReadOnly | ファイルを読み取り専用で開くかどうか True:開く False:開かない |
ExportAsFixedFormat | エクセルのデータをPDFまたはXPS形式で出力するために使用する |
Type | 出力形式 xlTypePDF:PDF形式で出力 |
Filename | 出力ファイルの保存先とファイル名 |
以下の「フォルダ内のエクセルを一括でPDF化する方法」セクションでは、こちらのVBAコードを実際に使用して、フォルダ内のエクセルファイルをPDF化する方法を説明します。
フォルダ内のエクセルを一括でPDF化する方法
エクセルのVBAを使用して、フォルダ内のエクセルファイルを一括でPDF化する方法をご紹介します。
VBAを使用する前に新たにブックを作成し、マクロ有効ブックとして保存しておきましょう。新規ブックを作成し、ファイルタブを選択します。
名前を付けて保存、参照の順に選択します。
ブックの保存先(例:ダウンロード)、ファイル名(例:ブック1)を入力し、ファイルの種類、Excel マクロ有効ブック(*.xlsm)の順に選択します。
保存ボタンを押します。
エクセルの編集画面に戻り、開発タブ、Visual Basicの順に選択します。
「Microsoft Visual Basic for Applications」が起動します。挿入タブ、標準モジュールの順に選択します。
本記事「フォルダ内のエクセルをPDF化するVBAコード」セクションにあるコードをコピーし、モジュール内に貼り付けます。
Sub/ユーザーフォームの実行を選択します。
「ファイルを開く」ダイアログボックスが表示されます。フォルダがある場所(例:ダウンロード)、フォルダ(例:フォルダ1)の順に選択します。
エクセルのファイル(例:データ1)をどれか1つ選択し、開くボタンを押します。
少し待つと、エクセルファイルがすべてPDFに変換されます。フォルダにアクセスし、確認してみましょう。エクスプローラー、フォルダのある場所(例:ダウンロード)、フォルダ(例:フォルダ1)の順に選択します。
これでフォルダ内のエクセルファイルを一括でPDF化することができました。
一番左のシートのみPDF化したい場合
一括でPDF化するシートの範囲を全シートから一番左のシートのみとしたい場合は、下記のコードを使用します。
Sub エクセル一括PDF化()
Dim ExcelFile, FileName, FilePath, ExcelPDF As String
Application.ScreenUpdating = False
ExcelFile = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")
FileName = Dir(ExcelFile)
FilePath = Replace(ExcelFile, FileName, "")
ExcelPDF = Dir(FilePath & "*.xlsx")
Do While ExcelPDF <> ""
Workbooks.Open FileName:=FilePath & ExcelPDF, ReadOnly:=True
ExcelPDF = Left(ExcelPDF, InStr(ExcelPDF, ".") - 1)
' 一番左のシートをアクティブにする
Workbooks(ExcelPDF & ".xlsx").Worksheets(1).Activate
' アクティブシートをPDFにエクスポート
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=FilePath & ExcelPDF
ActiveWindow.Close
ExcelPDF = Dir()
Loop
Application.ScreenUpdating = True
End Sub
2シート目以降をPDF化したい場合
一括でPDF化するシートの範囲を全シートから2シート目以降としたい場合は、下記のコードを使用します。
Sub エクセル一括PDF化()
Dim ExcelFile, FileName, FilePath, ExcelPDF As String
Dim ws As Worksheet
Dim StartSheetIndex As Integer, EndSheetIndex As Integer
Application.ScreenUpdating = False
ExcelFile = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")
FileName = Dir(ExcelFile)
FilePath = Replace(ExcelFile, FileName, "")
ExcelPDF = Dir(FilePath & "*.xlsx")
Do While ExcelPDF <> ""
Workbooks.Open FileName:=FilePath & ExcelPDF, ReadOnly:=True
ExcelPDF = Left(ExcelPDF, InStr(ExcelPDF, ".") - 1)
With Workbooks(ExcelPDF & ".xlsx")
' 2シート目のインデックスを取得
StartSheetIndex = .Worksheets(2).Index
' 最後のシートのインデックスを取得
EndSheetIndex = .Worksheets.Count
' 2シート目以降を1つのPDFにエクスポート
.Worksheets(StartSheetIndex).Activate
.Worksheets(StartSheetIndex).PageSetup.PrintArea = ""
.Worksheets(StartSheetIndex).Select
For Each ws In .Worksheets
If ws.Index > StartSheetIndex Then
ws.Select (False)
End If
Next ws
.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=FilePath & ExcelPDF, _
From:=StartSheetIndex, _
To:=EndSheetIndex, _
Quality:=xlQualityStandard
End With
ActiveWindow.Close
ExcelPDF = Dir()
Loop
Application.ScreenUpdating = True
End Sub