エクセルからエクセルへ差し込み印刷をする方法

VBA差し込み印刷 作成事例

エクセルで作っている住所録や顧客管理で葉書やお礼状などを作成する時に、宛名などをリストにしたかって順番に自動的に次々と印刷出来たら、いちいち自分で入力しなくていいので、作業効率化できますよね。

エクセルからワードで差し込み印刷は簡単にできるけど、エクセルからエクセルってどうやるんだろうって思いませんでしたか?

そこでVBAを使ってリストに従って順番に印刷できるようにしてみました。

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

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

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

スポンサーリンク

自動差し込みをつくろう

エクセルからエクセルへの差し込み印刷をVBAを使って自動連続でリストを差し替えながら印刷ってものすごく難しそうに思いますが、実はそんなに複雑なVBAコードはありませんよ。

印刷のイメージはこんな順番で考えて、そのままVBAコードに書き換えるだけですよ!

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

ワークシートの準備

住所録などすでに使っているエクセルファイルをそのまま使いますので、エクセルからエクセルへの自動差し込み印刷をVBAで作るといっても、新たに何かすることはほぼありません。

唯一追加したのが、印刷を繰り返して行う為のリストの数を把握する数式だけです。

エクセルからエクセルへ差し込み印刷
実際のデータの為ボカシています

追加したのはセルA1の数式で、A列にデータが入力されている数を数える式です。

リストの数を数えます

=COUNT(A2:A700)+1

+1にしているのはリストが2行目からスタートしている為です。

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

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

すでにユーザーフォームを使っている場合は、差し込み印刷用のコマンドボタンを1つ追加してください。

追加したコマンドボタンにVBAコードを書きますが、サンプルとして下記のように顧客IDと顧客名をリストより差し込みます。

顧客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

VBA解説
  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コードが必要だと思っていましたが、それほど難しいものではなかったので、今では無駄な作業が無くなってボタン1つで一瞬でできちゃうので重宝していますよ。

スポンサーリンク

差し込み印刷に使うVBAコード

実は、エクセルからエクセルへの差し込み印刷では、様々な印刷関連VBAコードを組み合わせて出来上がっています。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

印刷関連VBA
スポンサーリンク

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

住所録の作成

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

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

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

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

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

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

印刷関連VBA