以下のフォーマットの氏名の部分(○○ ○○)に、隣の「名簿」シートの100人分の氏名を1つずつ入力してPDFファイルで出力する必要があるとします。

この作業を1件ずつ行うのは、かなり大変です。
ということで今回は、100人分のPDFファイルを自動で出力する仕組みの実現方法について解説していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。
1. 開発準備
以下の2つのシートを元に作成していきます。

こちらでは、「名簿」シートの各行の氏名を1つずつ、「修了証」シートの「○○ ○○」が入力されたセルに入力して、PDFファイルで保存する流れを自動化します。
出力されるPDFファイルの名前は、「(対象氏名).pdf」とします。
まず初めに、[開発]タブを選択し、[マクロ]を選択します。

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

次に表示される以下の画面の「Sub 一括PDF出力」から「End Sub」の間にコードを記述します。
「Option Explicit」は、VBEの設定次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

2. コードの記述
以下のコードを記述します。
Sub 一括PDF出力()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("修了証")
Set ws2 = Worksheets("名簿")
Dim i As Long, sPath As String
For i = 3 To 102
sPath = "A:\出力\" & ws2.Cells(i, "B").Value & ".pdf"
ws1.Range("C3").Value = _
ws2.Cells(i, "B").Value
ws1.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPath
Next i
End Sub
では、コードについて解説していきます。
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("修了証")
Set ws2 = Worksheets("名簿")
「ws1」という変数に「修了証」シートの情報、「ws2」という変数に「名簿」シートの情報を割り当てています。
Dim i As Long, sPath As String
For i = 3 To 102
'省略
Next i
「名簿」シートの3行目から102行目の氏名に対し、1つずつPDFファイルを出力する処理を行っています。

sPath = "A:\出力\" & ws2.Cells(i, "B").Value & ".pdf"
各行の氏名に対し、「sPath」という変数に、保存先の情報とPDFファイルの名前を指定しています。
こちらでは、Aドライブの中の出力フォルダのパスに、「名簿」シートの該当行のB列の氏名を加え、最後に「.pdf」と拡張子を加えています。

保存先を変更する場合は、ここのパスを変更します。
ws1.Range("C3").Value = _
ws2.Cells(i, "B").Value
ws1.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPath
「修了証」シートのセルC3(セルが結合されている場合は左上のセル)に、「名簿」シートの該当行の氏名を入力しています。

そして、「修了証」シートの印刷範囲をPDFファイルで出力しています。
PDFファイルの出力ではなく印刷したい場合は、以下のように指定します。
ws1.PrintOut
3. 完成
左上のリストから「一括PDF出力」を選択し、実行ボタンを押すことで、100人分のPDFファイルが出力されます。


▼サンプルファイル▼


































































































































