以下の表は、セルC2に入力した値に応じてデータが抽出されるように作られています。


今回は、このセルC2の値を「A→B→C」のように好みの値に切り替えながら、このシートの印刷範囲の内容をPDFファイルにして自動で保存する仕組みを実現していきます。

※こちらで実現したファイルは記事の最後にて配布しています。
1. 開発手順
まず初めに、[開発]タブを選択し、[マクロ]を選択します。

表示された以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「ExportToPDF」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。

2. コードの記述(PDFファイル出力)
以下のコードを記述します。
Sub ExportToPDF()
Dim fPath As String
fPath = ThisWorkbook.Path
Worksheets("PDF出力").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=fPath & "\Sample.pdf"
End Sub
では、コードについて解説していきます。
Dim fPath As String
fPath = ThisWorkbook.Path
「fPath」という変数(入れ物)を用意し、現在開いているExcelファイルの保存先のフォルダのパスを「fPath」に格納しています。
そのため、取得されるパスは環境により異なります。
こちらの環境の場合は、以下のパスが取得されます。
A:\PDF出力

Worksheets("PDF出力").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=fPath & "\Sample.pdf"
「PDF出力」というシートの印刷範囲をPDF形式(Type:=xlTypePDF)で保存しています。
保存先とファイル名は、パスで指定します。
こちらでは以下のように、Excelファイルと同じ配下に「Sample.pdf」という名前で保存しています。
Filename:=fPath & "\Sample.pdf"
以上のコードを実行することで、以下のようにPDFファイルを作成することができます。

ただこのままでは、セルC2の値を手動で変更する必要があります。
そこで、次のように修正します。
3. コードの記述(引数の設定)
以下のように修正します。
Sub ExportToPDF(fName As String)
Dim fPath As String
fPath = ThisWorkbook.Path
Worksheets("PDF出力").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=fPath & "\" & fName & ".pdf"
End Sub
では、修正点について解説していきます。
Sub ExportToPDF(fName As String)
…
Filename:=fPath & "\" & fName & ".pdf"
ファイル名を「Sample.pdf」から「引数に指定した好みの名前」で保存できるように修正しています。
後は、セルC2の値を変更して、セルのC2の値を「ExportToPDF」の引数に指定して実行するという処理を繰り返します。

そこで、次のようなプロシージャを用意します。
4. コードの記述(差し込み実行)
以下のプロシージャを用意します。
Sub ExportAll()
Dim ws As Worksheet
Set ws = Worksheets("PDF出力")
Dim val As String
val = "A"
ws.Range("C2").Value = val
Call ExportToPDF(val)
val = "B"
ws.Range("C2").Value = val
Call ExportToPDF(val)
val = "C"
ws.Range("C2").Value = val
Call ExportToPDF(val)
End Sub
では、コードについて解説していきます。
Dim ws As Worksheet
Set ws = Worksheets("PDF出力")
「ws」という変数(入れ物)を用意し、「PDF出力」シートの情報を「ws」に割り当てています。
Dim val As String
val = "A"
ws.Range("C2").Value = val
Call ExportToPDF(val)
「val」という変数(入れ物)を用意し、「ws」シートのセルC2に入力したい1つ目の値(仮:A)を「val」に格納しています。
そして、「val」の値を「ws」シートのセルC2に格納した上で、最初に記述した「ExportToPDF」に「val」の値を渡して実行しています。
これで、1つ目のPDFファイルが作成されます。
val = "B"
ws.Range("C2").Value = val
Call ExportToPDF(val)
val = "C"
ws.Range("C2").Value = val
Call ExportToPDF(val)
こちらは、先ほどの処理と同様に、「B」という値、「C」という値でも実行しています。
5. 完成
以上の手順で完成です。
作成した「ExportAll」を実行するだけで、以下のように複数のPDFファイルが出力されます。

繰り返し似たような処理を実行する場合は、重複する処理の内容を1つのプロシージャ(ExportToPDF)にまとめておくことで、処理全体が見やすく保守しやすいコードになります。
▼サンプルファイル▼


















































































