この記事では、EXCELに入力している情報から差込印刷する方法について説明します。
しかも、一度VBAプログラムで作成しておけば、あとから差込位置を好きなように変えることができます。
帳票レイアウトが変更になっても大丈夫!!
VBAプログラムを変更せずに、差込位置を好きなように変えれます。
ちなみに、差込印刷とは、年賀状の宛名書きをイメージしてもらえるとわかりやすいです。
決まったレイアウト(はがき)に送りたい人それぞれの郵便番号、住所、氏名を書き込みます。
レイアウトは同じで、表示させる情報が異なるだけなので、その表示させる情報を切替えながら、印刷できます。
また、PDFファイルなので、受け取った相手は変更することができません。
この差込印刷を作成するには、以下の3つを用意する必要があります。
- 差込印刷する人の情報一覧
- 決まったレイアウト
- VBA(差込印刷する機能を作成する必要があります。)
それでは、EXCELで差込印刷(VBAを変更せずに差込位置を変えたい)を作成していきましょう。
困っている女性
困っている女性
解決する男性
困っている女性
◆ほかのEXCEL差込印刷の記事は、以下から参照してください。
◆差込PDFの記事は、以下から参照してください。
【EXCEL:VBA】差込PDFを作成したい(選択した行のみ)
【EXCEL:VBA】差込PDFを作成したい(VBAを変更せずに差込位置を変えたい)
【EXCEL:VBA】差込PDFを作成したい(VBAを変更せずに差込レイアウトを変えたい)
差込印刷に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.差込印刷する人の情報一覧を準備する
今回はサンプルとして、「従業員番号」、「氏名」、「生年月日」の3つのデータを利用して差込印刷する方法を説明します。
この記事を参考にすれば、あなたが印刷したい情報を印刷したいレイアウトに応用することができます。
「差込データ一覧」シートを作成する
- 「差込データ一覧」という名前のシートを作成します。
- 1行目にそれぞれの情報を差込したい位置(セル番地)を記入します。
- 2行目に「従業員番号」、「氏名」、「生年月日」、「選択」のタイトル行を作成します。
- 3行目以降には、実際に差込印刷したいデータを入力します。
- 差込印刷したい対象データ行の「選択」に1を入力します。(1でなくても、○でもOKです。)
なぜ、「選択」欄が必要なのかですが、印刷対象となる可能性のある情報を一覧化しておくと、便利だからです。
例えば、100人分のデータを用意してあるとして、今回はそのうちの女性分のみ、男性分のみ、30歳までの人のみ、40歳以上の人のみと
選択することができるからです。
都度、対象データ分のみに張り替える手間がなくなるからです。
こうしたデータの貼り替えって、ミスしてしまうリスクが増えてしまいます。
ミスなく、さっさと仕事を終わらせたいですよね。
2.決まったレイアウトを準備する
今回はサンプルとして、「従業員番号」、「氏名」、「生年月日」を差し込むレイアウトを作成しました。
「ひな形」シートを作成する
- 「ひな形」という名前のシートを作成します。
- B列にタイトル行を作成します。今回のサンプルでは、「従業員番号」、「氏名」、「生年月日」になります。
- C列には、差込する値を表示する欄を用意します。
※レイアウトは、好きにアレンジしても良いですが、「差込データ一覧」シートの差込位置を変更する必要があります。
3.VBAで差込印刷する機能を記入する
「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 |
'メイン処理 Public Sub MainProc() Dim nowRow As Integer Dim sashikomi1 As String Dim sashikomi2 As String Dim sashikomi3 As String nowRow = 2 With ThisWorkbook.Sheets("差込データ一覧") '①差込位置を取得する sashikomi1 = .Range("A1") sashikomi2 = .Range("B1") sashikomi3 = .Range("C1") Do While True '②現在行を次の行に変更する nowRow = nowRow + 1 '③従業員番号が空なら、ループを抜ける If .Range("A" & nowRow) = "" Then Exit Do '④選択に値が入力されていれば、差込印刷する If .Range("D" & nowRow) <> "" Then '⑤必要なデータをひな形に入力する ThisWorkbook.Sheets("ひな形").Range(sashikomi1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets("ひな形").Range(sashikomi2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets("ひな形").Range(sashikomi3) = .Range("C" & nowRow) '生年月日 '⑥ひな形シートを印刷する ThisWorkbook.Sheets("ひな形").PrintOut End If Loop End With MsgBox "完了" End Sub |
最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。
4.差込印刷の動かし方
それでは、差込印刷の動かし方を説明します。
「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックして差込印刷を実行します。
しばらく待つと、選択に1を入力した行を対象に、差込印刷されます。
うまく動きましたか?
次は、あなたの好きなレイアウトで、好きな情報を用意して、差込印刷してみましょう。
5.差込位置の変更の仕方
ひな形シートのレイアウトを変更する
それでは、ひな形シートのレイアウトを変更してみましょう。
変更前のひな形レイアウトは、各情報が横に並んでいます。
これを、上下に並ぶように変えてみます。
ひな形レイアウトの各情報の差込位置(セル番地)が以下のように変わりました。
- 従業員番号:B6 ⇒ C5
- 氏名 :C6 ⇒ C6
- 生年月日 :D6 ⇒ C7
差込データ一覧シートの各情報の差込位置(セル番地)を変更する
それでは、ひな形レイアウトの変更が終わりましたので、
次に、差込データ一覧シートの各情報の差込位置(セル番地)を変更します。
ひな形レイアウトに合わせて、A1~C1セルに入力されていた差込位置(セル番地)を変更しましょう。
これで、差込位置の変更は完了です。
VBAプログラムを変更する必要はありません。
それでは、うまく動くか試してみてください。
6.差込印刷のVBAプログラムの説明
それでは、差込レイアウトや表示させたい情報を変更できるようになるため、VBAプログラムを説明します。
①差込位置を取得する
1 2 3 4 |
'①差込位置を取得する sashikomi1 = .Range("A1") sashikomi2 = .Range("B1") sashikomi3 = .Range("C1") |
ここでは、「差込データ一覧」シートの1行目に入力されている各情報の差込位置(セル番地)を取得します。
変数「sashikomi1」には、従業員番号の差込位置(セル番地)を格納します。
変数「sashikomi2」には、氏名の差込位置(セル番地)を格納します。
変数「sashikomi3」には、生年月日の差込位置(セル番地)を格納します。
②現在行を次の行に変更する
1 2 |
'②現在行を次の行に変更する nowRow = nowRow + 1 |
ここでは、現在行を次の行に変更するため、変数「nowRow」に格納している値+1を、変数「nowRow」に格納しています。
ループ処理の外側で、変数「nowRow」には2が格納されています。
差込データは、3行目から入力されているので、ループ処理の内側に入ったときに変数「nowRow」を+1して、3を格納します。
もちろん、ループしてくると、さらに+1されて4が格納されます。
というように、対象行を3行目から順番に処理することになります。
③従業員番号が空なら、ループを抜ける
1 2 |
'③従業員番号が空なら、ループを抜ける If .Range("A" & nowRow) = "" Then Exit Do |
ここでは、A列(従業員番号)の対象行に値が入力されているかチェックしています。
変数「nowRow」に3が格納されている場合、セルA3に値が入力されているかチェックします。
従業員番号が入力されていない行が見つかると、差込印刷処理を終了します。
④選択に値が入力されていれば、差込印刷する
1 2 |
'④選択に値が入力されていれば、差込印刷する If .Range("D" & nowRow) <> "" Then |
ここでは、D列(選択)の対象行に値が入力されているかチェックしています。
変数「nowRow」に3が格納されている場合、セルD3に値が入力されているかチェックします。
選択が入力されている場合、差込印刷する処理を行います。
選択が入力されていない場合、次の行に処理が移ります。
⑤必要なデータをひな形に入力する
1 2 3 4 |
'⑤必要なデータをひな形に入力する ThisWorkbook.Sheets("ひな形").Range(sashikomi1) = .Range("A" & nowRow) '従業員番号 ThisWorkbook.Sheets("ひな形").Range(sashikomi2) = .Range("B" & nowRow) '氏名 ThisWorkbook.Sheets("ひな形").Range(sashikomi3) = .Range("C" & nowRow) '生年月日 |
ここでは、「ひな形」シートの各セルに、「差込データ一覧」シートの該当行の値をセットしています。
具体的には、「ひな形」シートの従業員番号を差込する位置(セル番地)に、「差込データ一覧」シートのA列(従業員番号)の対象行の値をセットします。
次に、「ひな形」シートの氏名を差込する位置(セル番地)に、「差込データ一覧」シートのB列(氏名)の対象行の値をセットします。
最後に、「ひな形」シートの生年月日を差込する位置(セル番地)に、「差込データ一覧」シートのC列(生年月日)の対象行の値をセットします。
差込位置は可変となっているので、sashikomi1~sashikomi3に格納されている値を利用して、セル番地を指定しています。
ひな形シートのレイアウトを変更した場合でも、VBAプログラムを変更する必要はありません。
⑥ひな形シートを印刷する
1 2 |
'⑥ひな形シートを印刷する ThisWorkbook.Sheets("ひな形").PrintOut |
ここでは、「ひな形」シートに入力された値で、印刷を行っています。
決まったレイアウトに差込された値で印刷されます。
このように、表示させる情報を変更しながら、印刷処理が行われます。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。