くわしくは プライバシーポリシー をご確認ください。
Excelで「複数の書類を1枚ずつ自動で印刷したい」と思ったことはありませんか?
Wordには“差し込み印刷”機能がありますが、Excelには同じような機能がありません。
取引先ごとの見積書や、社員別の勤怠表などを1枚ずつ印刷するとなると、手作業では時間がかかってしまいますよね。
そこで便利なのが、マクロ(VBA)を使った連続印刷の自動化です。
あらかじめ一覧データとフォームを用意しておけば、ボタン1つでデータを差し替えながら連続印刷することができます。
この記事では、
-
マクロで印刷する方法(基本編)
-
マクロで値を変えながら連続印刷する方法
-
間違い防止の工夫(確認メッセージ・試し印刷)
-
配列を使って高速化する方法
まで、初心者でも実践できる手順で解説します。
最後に紹介する「マップ表を使った配列印刷」は、フォームや一覧の構成が変わっても柔軟に対応できる応用テクニックです。
→Excelマクロで印刷する方法まとめ|ボタン作成・連続印刷・設定の基本と応用を紹介
ポイント
-
C2
の値(見積番号)を順番に切り替えています。 -
Application.Calculate
で、XLOOKUPなどの数式を再計算。 -
その都度
PrintOut
で印刷。
●関数設定の例(フォームシート)
セル位置 | 数式例(一覧シートを参照) |
---|---|
C3 | =XLOOKUP($C$2,一覧!$A:$A,一覧!$B:$B,"") |
C4 | =XLOOKUP($C$2,一覧!$A:$A,一覧!$C:$C,"") |
E9 | =XLOOKUP($C$2,一覧!$A:$A,一覧!$G:$G,"") |
C2
に見積番号をセットすれば、ほかのセルも自動的に更新される仕組みです。
マクロでは、この C2
の値を順番に入れ替えて印刷します。
XLOOKUP や INDEX+MATCH 関数などの利用方法については以下の記事も参考になります
●コード②:プレビューを表示して確認する
一気に印刷してしまうのが不安な場合は、PrintOut
の部分を PrintPreview
に変えるだけで、
1件ずつ内容を確認してから印刷できます。
Sub PrintWithChange_Preview()
Dim i As Long
Dim lastRow As Long
lastRow = Sheets("一覧").Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
Sheets("フォーム").Range("C2").Value = Sheets("一覧").Cells(i, "A").Value
Application.Calculate
Sheets("フォーム").PrintPreview
Next i
End Sub
補足:確認メッセージを追加することも可能
1件ごとに「印刷しますか?」と確認する場合は、次のように書き換えます。
マクロ印刷の基本まとめ
-
一覧シートにデータ、フォームシートにレイアウトを作成。
-
マクロでキー(C2セルなど)を入れ替えながら印刷。
-
PrintPreview
で内容確認、PrintOut
で直接印刷。 -
関数を組み合わせれば、初心者でもすぐ試せる。
次の章では、間違いを防ぐための確認方法や試し印刷など、
「実務で使いやすくするための工夫」を紹介します。
マクロ印刷で間違いを防ぐための工夫
連続印刷マクロは便利ですが、設定を間違えると大量の誤印刷が発生してしまうおそれもあります。
そこで、安全に使うための確認機能をいくつか組み合わせておくと安心です。
●A:実行前にまとめて確認メッセージを出す
「印刷対象が全部で何件あるか」を事前に表示して、ユーザーに確認します。
Sub 間違い防止_一括確認メッセージ()
Dim wsF As Worksheet, wsD As Worksheet
Dim i As Long, lastRow As Long
Set wsF = Sheets("フォーム")
Set wsD = Sheets("一覧")
lastRow = wsD.Cells(wsD.Rows.Count, "A").End(xlUp).Row
If MsgBox("合計 " & (lastRow - 1) & " 件を印刷します。よろしいですか?", _
vbYesNo + vbQuestion) = vbNo Then
Exit Sub
else
For i = 2 To lastRow
wsF.Range("C2").Value = wsD.Cells(i, "A").Value
Application.Calculate
wsF.PrintOut
Next i
end if
End Sub
ポイント
-
MsgBox
で確認メッセージを出し、vbNo
なら途中で終了。 -
一括印刷の前に“本当にこの件数でよいか”を確認できます。
●B:1件ごとに印刷するか確認する(個別チェック)
1枚ずつ MsgBoxでYesなら印刷/Noならスキップ。
プレビューを出さないので、プレビュー側で印刷→コードでも印刷、という重複印刷が起きません。
Sub 間違い防止_都度確認() '英名: Print_Confirm_Each
Dim wsF As Worksheet, wsD As Worksheet
Dim i As Long, lastRow As Long
Dim keyVal As String
Set wsF = Sheets("フォーム")
Set wsD = Sheets("一覧")
lastRow = wsD.Cells(wsD.Rows.Count, "A").End(xlUp).Row
If lastRow < 2 Then
MsgBox "一覧に印刷対象データがありません。", vbExclamation
Exit Sub
End If
For i = 2 To lastRow
' ① キー(例:見積番号)をフォームへ反映
keyVal = CStr(wsD.Cells(i, "A").Value)
wsF.Range("C2").Value = keyVal
' ② 関数再計算(XLOOKUP/INDEX+MATCHなど)
Application.Calculate
' ③ 都度確認(Yes=印刷 / No=スキップ / Cancel=全体中止)
Select Case MsgBox( _
Prompt:="この内容を印刷しますか?" & vbCrLf & "見積番号: " & keyVal, _
Buttons:=vbYesNoCancel + vbQuestion, _
Title:="印刷確認 (" & (i - 1) & "件目)" _
)
Case vbYes
wsF.PrintOut
Case vbNo
' 何もしない(次へ)
Case vbCancel
Exit Sub
End Select
Next i
End Sub
「この内容を印刷しますか?」のメッセージに対して、3通りの選択肢があります。
選択肢 | 動作 |
---|---|
はい(Y) | 該当データを印刷します。 |
いいえ(N) | 何もせず、次のデータに進みます。 |
キャンセル | 印刷マクロ全体を停止します。 |
1件ずつ確認しながら印刷できるため、誤印刷を防ぎたい場合や、途中で内容を確認したい場合に便利です。
補足:プレビューを併用する場合の注意
このコードではプレビューを表示しないため、二重印刷の心配がありません。
もしプレビューを組み合わせると、プレビュー画面から印刷した際に
マクロの PrintOut
と重なって2回印刷される可能性があります。
プレビューを使いたい場合は、2章で紹介した「プレビュー表示」版コードを使い分けましょう。
●C:上位N件だけ試し印刷する(テスト用)
全件印刷する前に、まず3件ほど試し印刷して確認する方法も便利です。
Sub 試し印刷_上位3件だけ()
'変数の設定
Dim wsF As Worksheet, wsD As Worksheet
Dim i As Long, lastRow As Long, n As Long
'シート名代入
Set wsF = Sheets("フォーム")
Set wsD = Sheets("一覧")
'データ数を取得
lastRow = wsD.Cells(wsD.Rows.Count, "A").End(xlUp).Row
'テスト印刷の設定
n = 3 ' ←印刷件数を指定(ここでは3件)
'テスト印刷がデータ数より少ないか確認(エラー回避のため)
If lastRow - 1 < n Then n = lastRow - 1
'テスト印刷確認メッセージを表示
If MsgBox("上位 " & n & " 件のみ試し印刷します。よろしいですか?", _
vbYesNo + vbQuestion) = vbNo Then Exit Sub
'差し込み印刷開始
For i = 2 To 1 + n
wsF.Range("C2").Value = wsD.Cells(i, "A").Value
Application.Calculate
wsF.PrintOut
Next i
End Sub
上位N件のみ試し印刷を行う場合、実行すると下図のように確認メッセージが表示されます。
図:試し印刷マクロ実行時の確認メッセージ
上位3件だけ印刷する前に、確認ダイアログが表示されます。
「はい」を選ぶと3件分のみ印刷し、「いいえ」を選ぶとキャンセルされます。
ポイント
-
n の値を変えるだけで、試し印刷の件数を調整できます。
-
社内確認やレイアウトチェックにおすすめです。
ここまでのまとめ
方法 | 内容 | 安全性 | おすすめシーン |
---|---|---|---|
A | 一括確認メッセージ | ★★★ | 一度に印刷する前の最終確認 |
B | 1件ごとの確認 | ★★★★ | 内容を目視でチェックしたいとき |
C | 試し印刷(上位N件) | ★★ | テスト印刷・事前確認用 |
次の章では、一覧データを配列として一気に読み込み、
より高速かつ柔軟に印刷する「配列版の差し込み印刷マクロ」を紹介します。
フォームと一覧の列対応を自由に設定できる“マップ表”もあわせて解説します。
配列で一括読込 → 直接代入して高速に連続印刷する
なぜ配列?
一覧シートから1件ずつセル参照するより、いったん配列にまとめて読み込むほうが速く、印刷件数が多いほど効果が出ます。
やることはシンプル:
-
一覧を配列に読み込む
-
1行ずつフォームの決めセルへ代入
-
印刷(またはプレビュー)
配列については以下の記事をご参考ください。
→VBAの配列の基本と使い方まとめ|1次元・2次元・動的・Functionの戻り値まで徹底解説!
前提(固定配置)
-
「一覧」:A列=見積番号、B=取引先、C=担当、D=郵便、E=住所、F=件名、G=金額
-
「フォーム」:C2=見積番号、C3=取引先、C4=担当、C5=郵便、C6=住所、C7=件名、E9=金額
(セル番地はそのまま使えます/変える場合はコード内の対応箇所だけ調整)
コード①:プレビューで確認しながら(安全運用)
プレビューから印刷する運用なので二重印刷になりません(コード側では印刷していないため)。
コード②:確認なしで一気に印刷(慣れてから)
実際の運用ではまずプレビュー版で内容を確認し、
問題ないことを確認してから使用するのがおすすめです。
印刷範囲(Print_Area)は事前に設定しておくと安全です。
まとめ
この記事では、Excelで値を変更しながら連続印刷する方法を初心者向けに解説しました。
Wordの「差し込み印刷」に近い仕組みを、VBAマクロを使って再現できます。
今回のポイント
内容 | 解説 |
---|---|
① 基本の印刷マクロ | PrintOut や PrintPreview でシートを印刷・プレビューできる。 |
② 値を変えながら連続印刷 | 一覧シートのデータを順にフォームへ差し込み、自動で印刷可能。 |
③ 間違い防止の工夫 | 一括確認・都度確認・試し印刷などを組み合わせて安全に運用。 |
④ 配列で高速化(今回の新構成) | 一覧のデータを配列に一括読み込みし、フォームにまとめて転記。印刷件数が多い場合もスムーズ。 |
配列を使うメリット
一覧のセルを1件ずつ読み込むのではなく、
一度にすべてのデータを配列にまとめて読み込むことで処理速度が大幅にアップします。
フォームの決まったセルに順番に代入していくだけなので、
構造はシンプルながら実務でも安定して使える方法です。
PrintPreview
、すぐ印刷したい場合は
PrintOut
に切り替えるだけでOK。応用編(中級者向け)
フォームと一覧の項目対応を固定せず、
「どのセルにどのデータを入れるか」をマップ表で定義しておくと、
レイアウトが変わってもコードを修正せずに再利用できます。
詳しくは別記事:
「マップ表で柔軟に対応する自動印刷マクロ(VBA中級編)」 にて解説予定。
実務でのおすすめ構成
-
一覧シート:印刷対象のデータ(例:顧客一覧、社員名簿など)
-
フォームシート:印刷レイアウト(テンプレート)
-
マクロ:
-
検証段階 → プレビュー付き
-
実務運用 → 直接印刷 or 試し印刷版
-
この3要素を組み合わせれば、見積書・案内状・名札などの帳票をExcelだけで自動化できます。
最後に
Excelでも、少しのマクロを加えるだけで
一覧データを自動で差し替えながら印刷することができます。
まずはプレビュー付きで動作を確認し、慣れたら直接印刷へステップアップしましょう。
繰り返し作業を自動化すれば、業務時間をぐっと短縮できます。
【関連記事】
- Excelマクロで印刷する方法まとめ|ボタン作成・連続印刷・設定の基本と応用を紹介
- Excelでマクロを作るなら最初にやるべきVBAの基本設定とは?
- Excelマクロボタンが反応しない?原因と対処法まとめ
- VBAの配列の基本と使い方まとめ|1次元・2次元・動的・Functionの戻り値まで徹底解説!
※外部リンク※
- Worksheet.PrintOut メソッド (Excel) |Microsoft Learn
- Worksheet.PrintPreview メソッド (Excel) |Microsoft Learn
※参考書籍 (PR)※
※本ボックスにはアフィリエイトリンク(PR)が含まれます。
くわしくは プライバシーポリシー へ。