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 _
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAで複数のブックとシートを指定しさらにセル範囲指定した上PDF出力する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す