エクセル住所録リストから別のエクセルシートの表へ差し込み印刷するVBA

VBA差し込み印刷

エクセルシートに名簿や商品リストを一覧にまとめて順番に記載している事があり、このリストを別のエクセルシートで作成してある表などに移し替える「エクセルからエクセルへの差し込み印刷」をしたいと思ったことはありませんか?

実は意外と簡単で、繰り返し処理「For~Next」を使えば簡単にでき、1枚1枚自分で手入力しなくて済むので作業効率化できますよ。

エクセルからエクセル差し込み印刷

エクセルからエクセルへの差し込み印刷は難しそうに思えますが、日本語で次のように考えると簡単で、下記のような順番でVBAコードを書けば差し込み印刷ができます。

エクセル差し込み印刷のイメージです。

  1. リストの1番~リスト最終まで以下の作業(差し込み)を繰り返し行う
  2. リスト1番から必要な情報(名前や企業名など)を指定したセルに転記する
  3. 印刷を実行する
  4. 印刷が終わったら次のリスト2番以降も繰り返す

イメージはこのようになりますので、実際にエクセルからエクセルへの差し込み印刷の手順に従い、作成していきます。

ワークシートの準備

まず最初は、差し込み印刷をするデータ(住所録や顧客リストや商品リスト)を準備しましょう。

もちろん、すでに利用しているリストがあればそのまま使用でき、ここでは実際に使っている住所録を使いますので、エクセルからエクセルへの自動差し込み印刷をVBAで作るといっても、新たに何かすることはほぼありません。

唯一追加したのが、印刷を繰り返して行う為にリストの数を自動的に数える為の数式だけで、たまたま空いていたセル「A1」に記載しました。

エクセルからエクセルへ差し込み印刷
実際のデータの為ボカシています
リストの数を数える数式

=COUNT(A2:A700)+1

リストが入力されているセルA2~A700までの範囲で入力済みセルの数を数える、COUNT関数を使用していて「+1」にしているのはリストが2行目からスタートしている為です。

「+1」にする理由は、サンプル画像は518となっていますのでリストの数は518人となりますので、差し込み印刷は1人目~518人目となり、行数で言うと2行目から519行目ってことになりますね。

その為に「+1」を忘れると、一番最後の人(最終行のリスト)が印刷漏れになってしまうので、「+1」は必要なのです。

リストの準備は完了ですがもし結合セルが含まれている場合は、結合解除して1つのセルには1つの項目に整える必要があります。

コマンドボタンにVBAコードを記述

ここでは、ユーザーフォームにコマンドボタンを配置して、差し込み印刷用のVBAコードを書きます。

ここではサンプルとして、下記のように顧客IDはリストのA列、名前は列にあり、用紙に印刷する場所は用紙のA2とA3に指定します。

エクセルへ差し込み印刷
実データとは異なりますが分かりやすく省略しました

実際に利用している差し込み印刷のVBAコードは下記の通りで、参考になればご自由にコピペして活用していただいても構いません。

エクセルからエクセルへ差し込み印刷するVBA

Private Sub CommandButton1_Click()
msg = MsgBox(“印刷しますか?”, Buttons:=vbYesNo + vbExclamation)
If msg = vbYes Then
For i = 2 To Range(“A1”).Value
Sheets(“用紙”).Range(“A2”).Value = Cells(i, 1).Value
Sheets(“用紙”).Range(“A3”).Value = Cells(i, 2).Value
Worksheets(“用紙”).PrintOut FROM:=1, To:=1, COPIES:=1, COLLATE _
:=True
Next i
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. メッセージで印刷をするかしないかを選択させる
  3. 「はい」が押されたら
  4. 変数「i」を宣言して変数は2~セルA1の値まで
  5. シート名「用紙」のセルA2にセル(i行目の右に1列目)の値を記載する
  6. シート名「用紙」のセルA3にセル(i行目の右に2列目)の値を記載する
  7. シート名「用紙」を1ページ目から1ページ目までを1枚印刷する
  8. 変数iを繰り返す
  9. Ifステートメント終了
  10. マクロ終了

いかがでしょうか?エクセルからエクセルへの差し込み印刷は、たったこれだけのVBAコードを書くだけで、ワンクリックするだけで518個のリストが自動で差し込み印刷できるので、ほかの作業をしている間に自動的に印刷してくれるので作業効率化できますよ。

差し込み印刷に使ったVBA

ここで紹介した「エクセルからエクセルへの差し込み印刷」では、様々なVBAコードを組み合わせて作っていますが、それぞれの詳細について省略しましたので、個別の内容については下記をご覧くださいませ。

「はい」「いいえ」をメッセージ表示選択

この「はい」「いいえ」を選択するVBAコードを1行追加するだけで、間違ってクリックした場合は「いいえ」を選択する事で差し込み印刷の作業をストップさせることができます。

その為に、2行目にはメッセージ関連のVBAコードで誤操作防止の「はい」「いいえ」を選択してから次の作業に入るようにしています。

ビックリマーク付きにしたら目立ちますね

条件分岐「IF」

3行目は「はい」が押された時にプログラムを実行して、「いいえ」が押されたら終了するというVBAコードを使っています。

If~Thenは頻繁に使う事になるので、マスターしておきたいVBAコードですね。

あわせて読みたい
If~Thenもし~だったらのIF関数をVBAにする方法 エクセルのワークシートのセルに直接IF関数の数式を書きたくないと思って、IF関数の代わりにVBAコードを使ってできないものかと調べたらここにたどり着いたのすよね。 V...

そして4行目からエクセルからエクセルへの差し込み印刷をするための重要なVBAコードで、1人目のデータを取得したら印刷して、次に2人目のデータを取得して印刷と、次々に繰り返す為の処理を書いています。

繰り返し処理もマスターすれば非常に便利で、できることが増えていくのでマスターしたいVBAコードです。

最後に登録人数は変化するので、常に同じ値ではありませんのでわざわざ数えて入力することは面倒です。

入力されているセルの値を取得して印刷開始・印刷終了・印刷枚数を自動的に割り当てできるようにしなくてはいけません。

こんな感じで、ひとつひとつバラバラになっているVBAコードを、つなぎ合わせてみたら、エクセルからエクセルへの差し込み印刷もできるようになりますよ。

とりっぷぼうる
とりっぷぼうる

皆様もぜひ挑戦してみてくださいね。

参考までに、残ながらVBAではプリンターの両面印刷の設定はできませんのでVBAでダイヤログボックスを呼び出して行いましょう。

両面印刷以外にも共有パソコンなどでは、一度設定しても最後に印刷したエクセルファイルのデータで印刷されてしまう事があります。

用紙サイズ・用紙の向き・余白の設定などは、決まっていると思うので印刷ボタンにVBAコードを追加して書き込んでおけば安心ですよ。

印刷関連VBA

差し込み印刷の元データ作成

住所録の作成

エクセルで管理している顧客名簿や住所録のデータを活用して、差し込み印刷を行う作成例をご紹介しましたが、そもそもの顧客名簿や住所録をどのように作っていますか?

データ入力はもちろん、検索やデータ修正が素早くできなければ、作業効率が上がりません。

ユーザーフォームを活用して全て一瞬で検索・修正ができるように住所録を作りませんか? 

〇丸印なども付け加えて差し込み印刷(オートシェイプ)

カレンダーやテストの結果が表示されるセルの部分に〇印をつけて連続差し込み印刷なんて技もやってみたくなりませんか?

あらかじめ、リストに情報を付け加えて置けば、自動的に読み取って〇印つけられるようになりますよ!

印刷関連VBA
とりっぷぼうる
とりっぷぼうる

宛名などタックシールに印刷して貼り付ける作業してましたが、自動連続差し込み印刷ができたので、もう必要が無くなるので大幅な作業時間が短縮できました。

ここに記載したVBAコードはコピペして自由に使ってもらっても構いませんよ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!