• 公開日:
  • 更新日:

フォルダ内のエクセルを一括で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