VBAで複数ブックをPDF出力/名前を付けて保存したいときはないでしょうか。
けど、そんな中で悩むことは、
・VBAでシートを指定した上複数ブックをPDF出力/名前を付けて保存したいが方法がよくわからない
・VBAでセル範囲指定した上複数ブックをPDF出力/名前を付けて保存したいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・VBAでシートを指定した上複数ブックをPDF出力/名前を付けて保存する方法
・VBAでシートかつセル範囲を指定した上複数ブックをPDF出力/名前を付けて保存する方法
についてまとめます!
もくじ
VBAで複数ブックをPDF出力/名前を付けて保存するイメージ
VBAで複数ブックをPDF出力/名前を付けて保存するイメージについて説明をします。
3シートあるエクセルブックを3つ用意します。
次にExcel側で対象ブックのパスとPDF保存先パスとファイル名一覧を作成します。
VBAを実行すると、Excelリスト分のブックがPDF形式で出力/名前を付けて保存されます。
さらにExcel側に列を追加し、シートを指定し、
VBAを実行すると選択したシートのみ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つ用意します。
PDF出力/名前を付けて保存先リストを準備する
次にExcel側で対象ブックのパスと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保存されていることが確認できましたね!
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出力/名前を付けて保存する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す