この記事では、EXCELに入力している情報から差込PDFを作成する方法について説明します。
しかも、一度VBAプログラムで作成しておけば、差込するレイアウトを切替えながら差込PDFを作成することができます。
差込PDFとは、年賀状の宛名書きをイメージしてもらえるとわかりやすいです。
決まったレイアウト(はがき)に送りたい人それぞれの郵便番号、住所、氏名を書き込みます。
そして、紙に印刷するのではなく、1枚ずつをPDFファイルとして保存可能です。
PDFの便利なところは、印刷物とは違い、メールで相手に送ることができます。
また、PDFファイルなので、受け取った相手は変更することができません。
この差込PDFを作成するには、以下の3つを用意する必要があります。
- 差込PDFする人の情報一覧
- 決まったレイアウトを2つ
- VBA(差込PDFを作成する機能を作成する必要があります。)
それでは、EXCELで差込PDF(VBAを変更せずに差込レイアウトを変えたい)を作成していきましょう。
困っている女性
困っている女性
解決する男性
困っている女性
◆ほかの差込PDFの記事は、以下から参照してください。
【EXCEL:VBA】差込PDFを作成したい【EXCEL:VBA】EXCELの差し込み印刷でPDFファイルを出力する方法(対象を自在に変更可能)
【EXCEL:VBA】EXCELの差し込み印刷でPDFファイルを出力する方法(差込位置を自在に変更可能)
◆EXCEL差込印刷の記事は、以下から参照してください。
【EXCEL:VBA】差込印刷をしたい【EXCEL:VBA】差込印刷したい(選択した行のみ)
【EXCEL:VBA】差込印刷したい(VBAを変更せずに差込位置を変えたい)
差込PDFに必要なものを、1つ1つ順番に説明していきます。
もくじ
1.差込PDFする人の情報一覧を準備する
今回はサンプルとして、「従業員番号」、「氏名」、「生年月日」の3つのデータを利用して差込PDFを作成する方法を説明します。
「差込データ一覧」シートを作成する
- 「差込データ一覧」という名前のシートを作成します。
- 1行目に1つ目の「差込レイアウト」のそれぞれの情報を差込したい位置(セル番地)を記入します。
- 2行目に2つ目の「差込レイアウト」のそれぞれの情報を差込したい位置(セル番地)を記入します。
- 3行目に「従業員番号」、「氏名」、「生年月日」、「ひな形」、「選択」のタイトル行を作成します。
- 4行目以降には、実際に差込PDFを作成したいデータと差込レイアウトのシート名を入力します。
- 差込PDF作成したい対象データ行の「選択」に1を入力します。(1でなくても、○でもOKです。)
ここでは、男性は「ひな形A」、女性は「ひな形B」を指定しています。
D4セルからD8セルには、次に作成するひな形シートの名前を間違わずに入力しましょう。
2.決まったレイアウトを2つ準備する
今回はサンプルとして、「従業員番号」、「氏名」、「生年月日」を差し込むレイアウトを作成しました。
「ひな形A」シートを作成する
- 「ひな形A」という名前のシートを作成します。
- 5行目にタイトル行を作成します。今回のサンプルでは、「従業員番号」、「氏名」、「生年月日」になります。
- 6行目には、差込する値を表示する欄を用意します。
※レイアウトは、好きにアレンジしても良いですが、「差込データ一覧」シートの差込位置を変更する必要があります。
「ひな形B」シートを作成する
- 「ひな形B」という名前のシートを作成します。
- B列にタイトル行を作成します。今回のサンプルでは、「従業員番号」、「氏名」、「生年月日」になります。
- C列には、差込する値を表示する欄を用意します。
※レイアウトは、好きにアレンジしても良いですが、「差込データ一覧」シートの差込位置を変更する必要があります。
3.VBAで差込PDFを作成する機能を記入する
「Microsoft Visual Basic for Applications」を起動します。
標準モジュールを追加して、以下のソースを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
'メイン処理 Public Sub MainProc() Dim nowRow As Integer Dim sashikomiA1 As String Dim sashikomiA2 As String Dim sashikomiA3 As String Dim sashikomiB1 As String Dim sashikomiB2 As String Dim sashikomiB3 As String Dim hinagataName As String nowRow = 3 With ThisWorkbook.Sheets("差込データ一覧") '①差込位置を取得する sashikomiA1 = .Range("A1") 'ひな形A sashikomiA2 = .Range("B1") 'ひな形A sashikomiA3 = .Range("C1") 'ひな形A sashikomiB1 = .Range("A2") 'ひな形B sashikomiB2 = .Range("B2") 'ひな形B sashikomiB3 = .Range("C2") 'ひな形B Do While True '②現在行を次の行に変更する nowRow = nowRow + 1 '③従業員番号が空なら、ループを抜ける If .Range("A" & nowRow) = "" Then Exit Do '④選択に値が入力されていれば、差込PDFを作成する If .Range("E" & nowRow) <> "" Then '⑤必要なデータをひな形に入力する hinagataName = .Range("D" & nowRow) 'ひな形 If .Range("D" & nowRow) = "ひな形A" Then ThisWorkbook.Sheets(hinagataName).Range(sashikomiA1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets(hinagataName).Range(sashikomiA2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets(hinagataName).Range(sashikomiA3) = .Range("C" & nowRow) '生年月日 Else ThisWorkbook.Sheets(hinagataName).Range(sashikomiB1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets(hinagataName).Range(sashikomiB2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets(hinagataName).Range(sashikomiB3) = .Range("C" & nowRow) '生年月日 End If '⑥ひな形シートでPDFを作成する(作成PDFファイル名を指定する) Call CreatePdfFile(hinagataName, "D:\200_work\100_PDF\" & .Range("A" & nowRow) & ".pdf") End If Loop End With MsgBox "完了" End Sub '指定されたファイル名でPDFを作成する Public Sub CreatePdfFile(ByVal hinagataName As String, ByVal strFilePath As String) ThisWorkbook.Sheets(hinagataName).ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=strFilePath, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End Sub |
最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。
4.差込PDFの動かし方
それでは、差込PDFの動かし方を説明します。
「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックして差込PDFを実行します。
しばらく待つと、選択に1を入力した行を対象に、PDFファイルが3つ作成されます。
ひな形Aで作成されたPDF
それでは、「ひな形A」を指定して作成したPDFを見てみましょう。
各情報が横並びで表示されています。
ひな形Bで作成されたPDF
それでは、「ひな形A」を指定して作成したPDFを見てみましょう。
各情報が縦並びで表示されています。
うまく動きましたか?
次は、あなたの好きなレイアウトで、好きな情報を用意して、差込PDFを作成してみましょう。
5.差込PDFのVBAプログラムの説明
それでは、差込レイアウトや表示させたい情報を変更できるようになるため、VBAプログラムを説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
'メイン処理 Public Sub MainProc() Dim nowRow As Integer Dim sashikomiA1 As String Dim sashikomiA2 As String Dim sashikomiA3 As String Dim sashikomiB1 As String Dim sashikomiB2 As String Dim sashikomiB3 As String Dim hinagataName As String nowRow = 3 With ThisWorkbook.Sheets("差込データ一覧") '①差込位置を取得する sashikomiA1 = .Range("A1") 'ひな形A sashikomiA2 = .Range("B1") 'ひな形A sashikomiA3 = .Range("C1") 'ひな形A sashikomiB1 = .Range("A2") 'ひな形B sashikomiB2 = .Range("B2") 'ひな形B sashikomiB3 = .Range("C2") 'ひな形B Do While True '②現在行を次の行に変更する nowRow = nowRow + 1 '③従業員番号が空なら、ループを抜ける If .Range("A" & nowRow) = "" Then Exit Do '④選択に値が入力されていれば、差込PDFを作成する If .Range("E" & nowRow) <> "" Then '⑤必要なデータをひな形に入力する hinagataName = .Range("D" & nowRow) 'ひな形 If .Range("D" & nowRow) = "ひな形A" Then ThisWorkbook.Sheets(hinagataName).Range(sashikomiA1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets(hinagataName).Range(sashikomiA2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets(hinagataName).Range(sashikomiA3) = .Range("C" & nowRow) '生年月日 Else ThisWorkbook.Sheets(hinagataName).Range(sashikomiB1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets(hinagataName).Range(sashikomiB2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets(hinagataName).Range(sashikomiB3) = .Range("C" & nowRow) '生年月日 End If '⑥ひな形シートでPDFを作成する(作成PDFファイル名を指定する) Call CreatePdfFile(hinagataName, "D:\200_work\100_PDF\" & .Range("A" & nowRow) & ".pdf") End If Loop End With MsgBox "完了" End Sub |
①差込位置を取得する
ここでは、「差込データ一覧」シートの1行目と2行目に入力されている各情報の差込位置(セル番地)を取得します。
- 変数「sashikomiA1」には、「ひな形A」の従業員番号の差込位置(セル番地)を格納します。
- 変数「sashikomiA2」には、「ひな形A」の氏名の差込位置(セル番地)を格納します。
- 変数「sashikomiA3」には、「ひな形A」の生年月日の差込位置(セル番地)を格納します。
- 変数「sashikomiB1」には、「ひな形B」の従業員番号の差込位置(セル番地)を格納します。
- 変数「sashikomiB2」には、「ひな形B」の氏名の差込位置(セル番地)を格納します。
- 変数「sashikomiB3」には、「ひな形B」の生年月日の差込位置(セル番地)を格納します。
②現在行を次の行に変更する
ここでは、現在行を次の行に変更するため、変数「nowRow」に格納している値+1を、変数「nowRow」に格納しています。
ループ処理の外側で、変数「nowRow」には3が格納されています。
差込データは、4行目から入力されているので、ループ処理の内側に入ったときに変数「nowRow」を+1して、4を格納します。
もちろん、ループしてくると、さらに+1されて5が格納されます。
というように、対象行を4行目から順番に処理することになります。
③従業員番号が空なら、ループを抜ける
ここでは、A列(従業員番号)の対象行に値が入力されているかチェックしています。
変数「nowRow」に4が格納されている場合、セルA4に値が入力されているかチェックします。
従業員番号が入力されていない行が見つかると、差込PDF作成処理を終了します。
④選択に値が入力されていれば、差込PDFを作成する
ここでは、E列(選択)の対象行に値が入力されているかチェックしています。
変数「nowRow」に4が格納されている場合、セルE4に値が入力されているかチェックします。
選択が入力されている場合、差込PDFを作成する処理を行います。
選択が入力されていない場合、次の行に処理が移ります。
⑤必要なデータをひな形に入力する
ここでは、各行に入力されている「ひな形シート名」を変数「hinagataName」に格納しています。
次に、「ひな形シート名」が「ひな形A」かそれ以外かによって、各情報(従業員番号、氏名、生年月日)の差込位置(セル番地)を切替えます。
具体的には、「ひな形シート名」が「ひな形A」の場合は、sashikomiA1~sashikomiA3に格納されているセル番地を利用して、各情報の差込位置を指定しています。
また、「ひな形シート名」が「ひな形A」以外の場合は、sashikomiB1~sashikomiB3に格納されているセル番地を利用して、各情報の差込位置を指定しています。
差込対象のシート名は、変数「hinagataName」に格納されている値を利用して、指定しています。
ひな形シートのレイアウトを変更した場合でも、VBAプログラムを変更する必要はありません。
ただし、ひな形シート名を変更した場合は、該当するシート名にVBAプログラムを変更する必要があります。
⑥ひな形シートでPDFを作成する(作成PDFファイル名を指定する)
ここでは、「ひな形シート名」と「作成する差込PDFのパスとファイル名」を指定して、PDFファイルを作成しています。
ここで指定しているフォルダパスは、好きなフォルダパスに変更してください。
ちなみに、PDFファイル名は、「差込データ一覧」のA列(従業員番号)の値になります。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。