【Excel VBA】複数のブックとシートを指定しPDF出力する方法!範囲指定も可!

VBAで複数のブックとシートを指定しPDF出力したいときはないでしょうか。

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

・VBAで複数のブックとシートを指定しPDF出力したいが方法がよくわからない
・VBAで複数のブックとシートを指定しさらにセル範囲指定した上PDF出力したいが方法がよくわからない

ですよね。

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

・VBAで複数のブックとシートを指定しPDF出力する方法
・VBAで複数のブックとシートを指定しさらにセル範囲指定した上PDF出力する方法

についてまとめます!

VBAで複数のブックとシートを指定しPDF出力するするイメージ

VBAで複数のブックとシートを指定しPDF出力するイメージについて説明をします。

前回の記事では特定の1シートだけしか選択ができませんでした。
【Excel VBA】複数ブックをPDF出力する方法!閉じたままでOK!

今回は、複数ブックと複数シートを指定対象にPDF出力していきます。

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

次にExcel側で対象ブックのパスとPDF保存先パスとファイル名、そして複数のシートをカンマ区切りで指定した一覧を作成します。

VBAを実行すると、Excelリスト分のブックとシートがPDF形式で出力します。

さらにExcel側に列を追加し、セルの範囲を指定すると、

各ブックの指定シートかつ指定範囲を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つ用意します。

 

PDF出力先リストを準備する

次にExcel側で対象ブックのパスとPDF保存先パスとファイル名、そして対象シートをカンマ区切りで入力した一覧を作成します。

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

VBAコード

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

Sub 複数ブックの複数指定シートをPDF出力する()

    Dim objWorkbook As Workbook
    Dim strPass As String
    Dim intEndrow As Integer
    Dim i As Integer
    Dim arrSheetname As Variant
    
    'マクロ実装ブックの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 = Excel.Application.Workbooks.Open(.Cells(i, 1).Value)
            
            
            'PDF出力したい複数のシート名をカンマ区切りで分割し配列にセットします。
            arrSheetname = Split(.Cells(i, 3), ",")
            
            '指定したシートを選択状態にします。
            ActiveWorkbook.Worksheets(arrSheetname).Select

            'PDFを出力します。
            objWorkbook.ActiveSheet.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を実行してみましょう。

PDFが生成され、開きましたね。

内容を確認すると、

3つのExcelブックと複数の指定シートがPDFに出力されていることが確認できましたね。

VBAの説明

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

PDF出力先のパスを指定します。B列を対象にしています。

strPass = .Cells(i, 2).Value

PDF出力対象ファイルをオブジェクトにセットします。

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

PDF出力したい複数のシート名をカンマ区切りで分割し配列にセットします。

arrSheetname = Split(.Cells(i, 3), ",")

指定したシートを選択状態にします。

ActiveWorkbook.Worksheets(arrSheetname).Select

タカヒロ
タカヒロ
複数シートの場合はグループ化された状態になります。

選択されたアクティブシートを対象にPDFを出力します。

objWorkbook.ActiveSheet.ExportAsFixedFormat _

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出力する方法について説明をします。

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

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

VBAコード

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

Sub 複数ブックの複数指定シートを範囲指定した上PDF出力する()

    Dim objWorkbook As Workbook
    Dim strPass As String
    Dim intEndrow As Integer
    Dim i As Integer
    Dim arrSheetname As Variant
    
    'マクロ実装ブックの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 = Excel.Application.Workbooks.Open(.Cells(i, 1).Value)
            
            
            'PDF出力したい複数のシート名をカンマ区切りで分割し配列にセットします。
            arrSheetname = Split(.Cells(i, 3), ",")
            
            '指定したシートを選択状態にします。
            ActiveWorkbook.Worksheets(arrSheetname).Select

            'PDFを出力します。
            objWorkbook.ActiveSheet.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が自動で開き、内容を確認すると、

選択シートに絞られ出力されていることが確認できましたね!

VBAの説明

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

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

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

タカヒロ
タカヒロ
前回と異なる点はWorksheetコレクション内の1シートを選択しましたが、今回はActiveSheetオブジェクトを対象にした点となります。このことにより、複数のシートを対象にすることができました。

VBAの実装手順

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

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

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

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

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

こちらで完了です。

VBAを実行する

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

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

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

さいごに

いかがでしょうか。

今回は、

・VBAで複数のブックとシートを指定しPDF出力する方法
・VBAで複数のブックとシートを指定しさらにセル範囲指定した上PDF出力する方法

についてまとめました。

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



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

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








コメントを残す

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