【Excel VBA】PDF出力/名前を付けて保存する方法!複数の保存先指定可!

【Excel VBA】PDF出力/名前を付けて保存する方法!複数の保存先指定可!

VBAで複数ブックをPDF出力/名前を付けて保存したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで複数ブックをまとめてPDF出力/名前を付けて保存したいが方法がよくわからない
・VBAでシートを指定した上複数ブックをPDF出力/名前を付けて保存したいが方法がよくわからない
・VBAでセル範囲指定した上複数ブックをPDF出力/名前を付けて保存したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAで複数ブックを開かないでPDF出力/名前を付けて保存する方法
・VBAでシートを指定した上複数ブックをPDF出力/名前を付けて保存する方法
・VBAでシートかつセル範囲を指定した上複数ブックをPDF出力/名前を付けて保存する方法

についてまとめます!

VBAで複数ブックをPDF出力/名前を付けて保存するイメージ

VBAで複数ブックをPDF出力/名前を付けて保存するイメージについて説明をします。

3シートあるエクセルブックを3つ用意します。
3シートあるエクセルブック

次にExcel側で対象ブックのパスとPDF保存先パスとファイル名一覧を作成します。
対象ブックのパスとPDF保存先パスとファイル名一覧を作成

VBAを実行すると、Excelリスト分のブックがPDF形式で出力/名前を付けて保存されます。
Excelリスト分のブックがPDF形式で出力/名前を付けて保存

さらにExcel側に列を追加し、シートを指定し、

VBAを実行すると選択したシートのみPDF形式で出力します。
選択したシートのみPDF形式で出力

さらにさらにセルの範囲を指定した上、

各シートをPDF形式で出力していきます。
PDF形式で出力

大量のPDFファイルを出力したいときに便利ですね!

それでは早速試してみましょう。

VBAで複数ブックをPDF出力/名前を付けて保存するメソッドについて

VBAでブックの全シートを複数ブックをPDF出力/名前を付けて保存する方法について説明をします。

Workbook.ExportAsFixedFormatメソッド数について

使うメソッドはWorkbook.ExportAsFixedFormatメソッドとなります。

ExportAsFixedFormat メソッドは、ブックを PDF または XPS 形式に出力することができます。

Workbook.ExportAsFixedFormat メソッドの構文と設定パラメータは以下の通りです。

構文

関数名 Dir
構文 object.ExportAsFixedFormat(Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExClassPtr)

設定パラメータ

今回は複数ブックをPDF出力/名前を付けて保存するので、パラメータに「Type:=xlTypePDF」を設定します。

名前 必須 / オプション データ型 説明
種類 必須 XlFixedFormatType xlTypePDF?または?xlTypeXPS?のいずれかを指定できます。
FileName 省略可能 バリアント型 保存するファイルの名前を示す文字列。 完全なパスを含めるか、Excel によって現在のフォルダーにファイルが保存されます。
Quality 省略可能 バリアント型 xlFixedFormatQuality?定数 (xlQualityStandard?または?xlQualityMinimum) のいずれかに設定できます。
IncludeDocProperties 省略可能 バリアント型 ドキュメント プロパティを含める必要があることを示す?場合は True?に設定するか、省略されたことを示す?場合は False に?設定します。
IgnorePrintAreas 省略可能 バリアント型 True?に設定すると、発行する場合に印刷範囲が無視されます。?False?に設定すると、発行時に設定された印刷領域が使用されます。
From 省略可能 バリアント型 発行を開始するページのページ番号を指定します。 この引数を省略すると、先頭のページから発行が開始されます。
To 省略可能 バリアント型 発行を終了するページの番号を指定します。 この引数を省略すると、最後のページまで発行します。
OpenAfterPublish 省略可能 バリアント型 True に設定?すると、発行後にビューアーにファイルが表示されます。?False?に設定すると、ファイルは発行されますが、表示されません。
FixedFormatExtClassPtr 省略可能 バリアント型 FixedFormatExt?クラスへのポインターです。

参照:https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.exportasfixedformat

VBAで複数ブックをPDF出力/名前を付けて保存する方法

VBAで複数ブックをPDF出力/名前を付けて保存する方法について説明をします。

サンプルブックを準備する

3シートあるエクセルブックを3つ用意します。

3シートあるエクセルブックを3つ用意

PDF出力/名前を付けて保存先リストを準備する

次にExcel側で対象ブックのパスとPDF保存先パスとファイル名一覧を作成します。
対象ブックのパスとPDF保存先パスとファイル名一覧を作成

このリストに沿って、Excelリスト分のブックがPDF形式で出力されます。

タカヒロ
タカヒロ
シートの位置は一番左端にするようお願いします。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 複数ブックを全シートPDF出力/名前を付けて保存する()

    Dim objExcelapp As New Excel.Application
    Dim objWorkbook As Workbook
    Dim strPass As String
    Dim intEndrow As Integer
    Dim i As Integer
    
    'マクロ実装ブックの1シート目を対象にします。
    With ThisWorkbook.Worksheets(1)
    
        'PDF出力/名前を付けて保存先リストの最終行を取得します。
        intEndrow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        '2行目から最終行まで処理を繰り返します。
        For i = 2 To intEndrow
        
            'PDF出力/名前を付けて保存先のパスを指定します。
            strPass = .Cells(i, 2).Value
            
            'PDF出力/名前を付けて保存対象ファイルをオブジェクトにセットします。
            Set objWorkbook = objExcelapp.Workbooks.Open(.Cells(i, 1).Value)
    
            'PDFを出力します。
            objWorkbook.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=strPass, _
                Quality:=xlQualityStandard, _
                OpenAfterPublish:=True
            
            'PDF出力/名前を付けて保存対象ファイルを閉じます。
            objWorkbook.Close Savechanges:=False

        Next i
    
    End With

    'オブジェクトを開放します。
    Set objWorkbook = Nothing
    Set objExcelapp = Nothing

End Sub

VBAを設定する

マクロ実装ブックの1シート目を対象にします。シート名を指定したい場合はシート番号「1」をシート名に変更してください。

With ThisWorkbook.Worksheets(1)

PDF出力/名前を付けて保存先リストの最終行を取得します。Excelブック1シート目のA列を対象としていますので、変更する場合は列番号「1」を別の列番号に変更してください。

intEndrow = .Cells(Rows.Count, 1).End(xlUp).Row

2行目から最終行まで処理を繰り返します。開始行が2行目でない場合は変更をしてください。

For i = 2 To intEndrow

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

Excelファイルは開くことなく、PDFが生成されました。

内容を確認すると、

3つのExcelブックすべてがPDFに出力/指定ファイル名でPDF保存されていることが確認できましたね!

タカヒロ
タカヒロ
Excelファイルは表示はされませんが、バックグラウンドでは開いて処理をしている状態になります。

VBAの説明

VBAについて説明をします。

PDF出力/名前を付けて保存先のパスを指定します。B列を対象にしています。

strPass = .Cells(i, 2).Value

PDF出力/名前を付けて保存対象ファイルをオブジェクトにセットします。

Set objWorkbook = objExcelapp.Workbooks.Open(.Cells(i, 1).Value)

PDFファイルのパスと名前を指定します。

Filename:=strPass, _

出力時の品質を指定します。xlQualityStandardは標準です。

Quality:=xlQualityStandard, _

PDF出力/名前を付けて保存後にオープンするよう指定しています。Trueに設定すると出力後にビューアが表示されます。

OpenAfterPublish:=True

PDF出力/名前を付けて保存対象ファイルを閉じます。

objWorkbook.Close Savechanges:=False

オブジェクトを開放します。

Set objWorkbook = Nothing
Set objExcelapp = Nothing

VBAで指定シートのPDFをを出力する方法

VBAで複数シートのPDFをを出力する方法について説明をします。

前回はすべてのシートが対象でしたが、次は出力したいシートを指定することができます。

PDF出力/名前を付けて保存先リストにシート列を追加する

PDF出力/名前を付けて保存先リストにシート列を追加し、指定したいシート名かシート位置番号を入力します。

タカヒロ
タカヒロ
シート位置番号は左端のシートから数えていきます。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 複数ブックの特定シートをPDF出力/名前を付けて保存する()

    Dim objExcelapp As New Excel.Application
    Dim objWorkbook As Workbook
    Dim strPass As String
    Dim intEndrow As Integer
    Dim i As Integer
    
    'マクロ実装ブックの1シート目を対象にします。
    With ThisWorkbook.Worksheets(1)
    
        'PDF出力/名前を付けて保存先リストの最終行を取得します。
        intEndrow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        '2行目から最終行まで処理を繰り返します。
        For i = 2 To intEndrow
        
            'PDF出力/名前を付けて保存先のパスを指定します。
            strPass = .Cells(i, 2).Value
            
            'PDF出力/名前を付けて保存対象ファイルをオブジェクトにセットします。
            Set objWorkbook = objExcelapp.Workbooks.Open(.Cells(i, 1).Value)

            'PDFを出力します。
            objWorkbook.Worksheets(.Cells(i, 3).Value).ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=strPass, _
                Quality:=xlQualityStandard, _
                OpenAfterPublish:=True
            
            'PDF出力/名前を付けて保存対象ファイルを閉じます。
            objWorkbook.Close Savechanges:=False

        Next i
    
    End With

    'オブジェクトを開放します。
    Set objWorkbook = Nothing
    Set objExcelapp = Nothing

End Sub

VBAを実行する

VBAを実行してみましょう。

PDFが自動で開き、内容を確認すると、

選択したシートがPDFに出力/指定ファイル名でPDF保存されていることが確認できましたね!

VBAの説明

VBAについて説明をします。

指定したシート名およびシート位置番号をWorksheetsコレクションの引数に指定し、対象シートを出力するようにしています。

objWorkbook.Worksheets(.Cells(i, 3).Value).ExportAsFixedFormat

VBAで指定シートを範囲指定した上PDF出力/名前を付けて保存する方法

VBAで指定シートを範囲指定した上PDF出力/名前を付けて保存する方法について説明をします。

サンプルでは3つのブックを以下のセルの範囲に絞り、PDF出力/名前を付けて保存していきます。

セル範囲
A1:C2
A2:C5
A1:C10

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 複数ブックを特定シートを範囲指定した上PDF出力/名前を付けて保存する()

    Dim objExcelapp As New Excel.Application
    Dim objWorkbook As Workbook
    Dim strPass As String
    Dim intEndrow As Integer
    Dim i As Integer
    
    'マクロ実装ブックの1シート目を対象にします。
    With ThisWorkbook.Worksheets(1)
    
        'PDF出力/名前を付けて保存先リストの最終行を取得します。
        intEndrow = .Cells(Rows.Count, 1).End(xlUp).Row
        
        '2行目から最終行まで処理を繰り返します。
        For i = 2 To intEndrow
        
            'PDF出力/名前を付けて保存先のパスを指定します。
            strPass = .Cells(i, 2).Value
            
            'PDF出力/名前を付けて保存対象ファイルをオブジェクトにセットします。
            Set objWorkbook = objExcelapp.Workbooks.Open(.Cells(i, 1).Value)
strRange = "A1:B2"
            'PDFを出力します。
            objWorkbook.Worksheets(.Cells(i, 3).Value).Range(.Cells(i, 4).Value).ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=strPass, _
                Quality:=xlQualityStandard, _
                OpenAfterPublish:=True
            
            'PDF出力/名前を付けて保存対象ファイルを閉じます。
            objWorkbook.Close Savechanges:=False

        Next i
    
    End With

    'オブジェクトを開放します。
    Set objWorkbook = Nothing
    Set objExcelapp = Nothing

End Sub

VBAを実行する

VBAを実行してみましょう。

PDFが自動で開き、内容を確認すると、

選択シートに絞られ出力/指定ファイル名でPDF保存されていることが確認できましたね!

VBAの説明

VBAについて説明をします。

PDF出力/名前を付けて保存する対象にRangeを加え、セルの範囲を引数に指定することにより、セルの範囲に絞り込むことができます。

objWorkbook.Worksheets(.Cells(i, 3).Value).Range(.Cells(i, 4).Value).ExportAsFixedFormat _

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAで複数ブックを開かないでPDF出力/名前を付けて保存する方法
・VBAでシートを指定した上複数ブックをPDF出力/名前を付けて保存する方法
・VBAでシートかつセル範囲を指定した上複数ブックをPDF出力/名前を付けて保存する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です