エクセル住所録リストから別のエクセルシートの表へ差し込み印刷するVBA
エクセルシートに名簿や商品リストを一覧にまとめて順番に記載している事があり、このリストを別のエクセルシートで作成してある表などに移し替える「エクセルからエクセルへの差し込み印刷」をしたいと思ったことはありませんか?
実は意外と簡単で、繰り返し処理「For~Next」を使えば簡単にでき、1枚1枚自分で手入力しなくて済むので作業効率化できますよ。
エクセルからエクセル差し込み印刷
エクセルからエクセルへの差し込み印刷は難しそうに思えますが、日本語で次のように考えると簡単で、下記のような順番でVBAコードを書けば差し込み印刷ができます。
エクセル差し込み印刷のイメージです。
- リストの1番~リスト最終まで以下の作業(差し込み)を繰り返し行う
- リスト1番から必要な情報(名前や企業名など)を指定したセルに転記する
- 印刷を実行する
- 印刷が終わったら次のリスト2番以降も繰り返す
イメージはこのようになりますので、実際にエクセルからエクセルへの差し込み印刷の手順に従い、作成していきます。
ワークシートの準備
まず最初は、差し込み印刷をするデータ(住所録や顧客リストや商品リスト)を準備しましょう。
もちろん、すでに利用しているリストがあればそのまま使用でき、ここでは実際に使っている住所録を使いますので、エクセルからエクセルへの自動差し込み印刷をVBAで作るといっても、新たに何かすることはほぼありません。
唯一追加したのが、印刷を繰り返して行う為にリストの数を自動的に数える為の数式だけで、たまたま空いていたセル「A1」に記載しました。
=COUNT(A2:A700)+1
リストが入力されているセルA2~A700までの範囲で入力済みセルの数を数える、COUNT関数を使用していて「+1」にしているのはリストが2行目からスタートしている為です。
「+1」にする理由は、サンプル画像は518となっていますのでリストの数は518人となりますので、差し込み印刷は1人目~518人目となり、行数で言うと2行目から519行目ってことになりますね。
その為に「+1」を忘れると、一番最後の人(最終行のリスト)が印刷漏れになってしまうので、「+1」は必要なのです。
コマンドボタンにVBAコードを記述
ここでは、ユーザーフォームにコマンドボタンを配置して、差し込み印刷用のVBAコードを書きます。
ここではサンプルとして、下記のように顧客IDはリストのA列、名前は列にあり、用紙に印刷する場所は用紙のA2とA3に指定します。
実際に利用している差し込み印刷の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がクリックされたら
- メッセージで印刷をするかしないかを選択させる
- 「はい」が押されたら
- 変数「i」を宣言して変数は2~セルA1の値まで
- シート名「用紙」のセルA2にセル(i行目の右に1列目)の値を記載する
- シート名「用紙」のセルA3にセル(i行目の右に2列目)の値を記載する
- シート名「用紙」を1ページ目から1ページ目までを1枚印刷する
- 変数iを繰り返す
- Ifステートメント終了
- マクロ終了
いかがでしょうか?エクセルからエクセルへの差し込み印刷は、たったこれだけのVBAコードを書くだけで、ワンクリックするだけで518個のリストが自動で差し込み印刷できるので、ほかの作業をしている間に自動的に印刷してくれるので作業効率化できますよ。
差し込み印刷に使ったVBA
ここで紹介した「エクセルからエクセルへの差し込み印刷」では、様々なVBAコードを組み合わせて作っていますが、それぞれの詳細について省略しましたので、個別の内容については下記をご覧くださいませ。
「はい」「いいえ」をメッセージ表示選択
この「はい」「いいえ」を選択するVBAコードを1行追加するだけで、間違ってクリックした場合は「いいえ」を選択する事で差し込み印刷の作業をストップさせることができます。
その為に、2行目にはメッセージ関連のVBAコードで誤操作防止の「はい」「いいえ」を選択してから次の作業に入るようにしています。
条件分岐「IF」
3行目は「はい」が押された時にプログラムを実行して、「いいえ」が押されたら終了するというVBAコードを使っています。
If~Thenは頻繁に使う事になるので、マスターしておきたいVBAコードですね。
そして4行目からエクセルからエクセルへの差し込み印刷をするための重要なVBAコードで、1人目のデータを取得したら印刷して、次に2人目のデータを取得して印刷と、次々に繰り返す為の処理を書いています。
繰り返し処理もマスターすれば非常に便利で、できることが増えていくのでマスターしたいVBAコードです。
最後に登録人数は変化するので、常に同じ値ではありませんのでわざわざ数えて入力することは面倒です。
入力されているセルの値を取得して印刷開始・印刷終了・印刷枚数を自動的に割り当てできるようにしなくてはいけません。
こんな感じで、ひとつひとつバラバラになっているVBAコードを、つなぎ合わせてみたら、エクセルからエクセルへの差し込み印刷もできるようになりますよ。
皆様もぜひ挑戦してみてくださいね。
参考までに、残ながらVBAではプリンターの両面印刷の設定はできませんのでVBAでダイヤログボックスを呼び出して行いましょう。
両面印刷以外にも共有パソコンなどでは、一度設定しても最後に印刷したエクセルファイルのデータで印刷されてしまう事があります。
用紙サイズ・用紙の向き・余白の設定などは、決まっていると思うので印刷ボタンにVBAコードを追加して書き込んでおけば安心ですよ。
- プリンター自体の機能設定画面を一発表示
- 印刷プレビュー
- 印刷開始ページ・終了ページ・枚数設定(セル連動)
- 印刷範囲を指定する
- 用紙の向きを指定する
- 用紙サイズを指定する
- 印刷ページの余白を設定する
- ページ番号を自動付与(ヘッダー・フッターの設定)
- ヘッダーに日付や社名を自動表記
- 印刷倍率を指定する
- 印刷倍率を自動調整する
- VBA白黒印刷設定でインクやトナーを節約して印刷
- 印刷時にDIV/0!や#N/Aのエラー値は自動的に空欄変換
- エクセルからエクセルへ差し込み印刷
- 印刷枚数入力テキストボックス付きVBA印刷フォーム
- 入力漏れ自動チェック機能付き印刷コマンドボタン
差し込み印刷の元データ作成
住所録の作成
エクセルで管理している顧客名簿や住所録のデータを活用して、差し込み印刷を行う作成例をご紹介しましたが、そもそもの顧客名簿や住所録をどのように作っていますか?
データ入力はもちろん、検索やデータ修正が素早くできなければ、作業効率が上がりません。
ユーザーフォームを活用して全て一瞬で検索・修正ができるように住所録を作りませんか?
〇丸印なども付け加えて差し込み印刷(オートシェイプ)
カレンダーやテストの結果が表示されるセルの部分に〇印をつけて連続差し込み印刷なんて技もやってみたくなりませんか?
あらかじめ、リストに情報を付け加えて置けば、自動的に読み取って〇印つけられるようになりますよ!
- プリンター自体の機能設定画面を一発表示
- 印刷プレビュー
- 印刷開始ページ・終了ページ・枚数設定(セル連動)
- 印刷範囲を指定する
- 用紙の向きを指定する
- 用紙サイズを指定する
- 印刷ページの余白を設定する
- ページ番号を自動付与(ヘッダー・フッターの設定)
- ヘッダーに日付や社名を自動表記
- 印刷倍率を指定する
- 印刷倍率を自動調整する
- VBA白黒印刷設定でインクやトナーを節約して印刷
- 印刷時にDIV/0!や#N/Aのエラー値は自動的に空欄変換
- エクセルからエクセルへ差し込み印刷
- 印刷枚数入力テキストボックス付きVBA印刷フォーム
- 入力漏れ自動チェック機能付き印刷コマンドボタン
宛名などタックシールに印刷して貼り付ける作業してましたが、自動連続差し込み印刷ができたので、もう必要が無くなるので大幅な作業時間が短縮できました。
ここに記載したVBAコードはコピペして自由に使ってもらっても構いませんよ。