Excelで差し込み印刷をしたいけれど、Wordを使わずに完結させたい――そんな悩みを抱えている方は多いのではないでしょうか。
実は、ExcelのマクロVBAを活用すれば、データの差し込み印刷を自動化することが可能です。
リストのデータを1件ずつ読み込んで印刷する処理や、カンマ区切り(CSV)のデータを取り込んで帳票へ反映させる流れまで、マクロを使えばすべてを自動でこなせるようになります。
本記事では、「【Excel】エクセルで差し込み印刷をマクロで自動化する方法(データ差し込み・カンマ区切り)」というテーマで、基本的な仕組みから実際のコード例まで丁寧に解説していきます。
手作業による印刷ミスや時間のロスを減らしたい方は、ぜひ最後までお読みください。
ExcelマクロVBAで差し込み印刷を自動化するのが最も効率的な方法
それではまず、ExcelマクロVBAで差し込み印刷を自動化することがなぜ効率的なのか、という結論部分から解説していきます。
差し込み印刷とは、あらかじめ用意されたテンプレートに、リストのデータを1件ずつ埋め込んで印刷する機能のことです。
通常、差し込み印刷といえばWordとExcelを連携させる方法が一般的ですが、設定が複雑になりやすく、慣れていないと手間がかかります。
その点、ExcelのマクロVBAを使えば、Excel単体で完結するため、外部アプリとの連携不要で管理がシンプルになります。
具体的には、以下のような場面で大きな効果を発揮します。
| 活用シーン | 手動作業の場合 | マクロ自動化の場合 |
|---|---|---|
| 100件の案内状印刷 | 1件ずつコピー&貼り付けして印刷 | ボタン1つで全件自動印刷 |
| CSVデータの取り込み | 手動でカンマ区切りを整形 | マクロで自動読み込み・整形 |
| 宛名ラベルの作成 | 毎回テンプレートを書き換え | ループ処理で一括生成 |
| 印刷範囲の設定 | 毎回手動で設定 | コード内で固定・自動化 |
このように、マクロVBAを活用することで作業時間の大幅な短縮とヒューマンエラーの防止が期待できます。
また、一度コードを作成してしまえば、次回以降はボタンをクリックするだけで同じ処理を再現できるのも大きなメリットです。
ExcelマクロVBAによる差し込み印刷の自動化は、Wordとの連携が不要で、Excel単体で完結できる最もシンプルかつ効率的な方法です。
一度マクロを作成すれば、何度でも繰り返し使えるため、定期的に差し込み印刷を行う業務において特に効果が高いといえます。
差し込み印刷マクロの基本構造とVBAコードの作り方
続いては、差し込み印刷マクロの基本的な構造とVBAコードの作り方を確認していきます。
差し込み印刷をVBAで実現するためには、大きく分けて「データシート」と「テンプレートシート」の2つを用意するのが基本的な考え方です。
データシートには差し込む情報(名前・住所・金額など)をリスト形式で入力し、テンプレートシートには印刷レイアウトを作成しておきます。
マクロはデータシートの行を1行ずつ読み込み、テンプレートの対応するセルに値を書き込んでから印刷する、という処理をループで繰り返す構造になっています。
データシートとテンプレートシートの準備
まず、データシートは以下のような形式で作成するとマクロが書きやすくなります。
| 列A(名前) | 列B(住所) | 列C(金額) |
|---|---|---|
| 山田 太郎 | 東京都新宿区〇〇 | 10,000 |
| 鈴木 花子 | 大阪府梅田〇〇 | 15,000 |
テンプレートシートには、差し込む位置のセルを決めておき、そこにVBAから値を代入する形で設計します。
セルの参照先をあらかじめ決めておくことが、マクロをシンプルに保つポイントです。
基本的なVBAコードの構文
実際のVBAコードの基本的な構文は次のようになります。
Sub 差し込み印刷()
Dim ws差し込み As Worksheet
Dim wsテンプレ As Worksheet
Dim i As Long
Dim 最終行 As Long
Set ws差し込み = Sheets(“データ”)
Set wsテンプレ = Sheets(“テンプレート”)
最終行 = ws差し込み.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To 最終行
wsテンプレ.Range(“B2”) = ws差し込み.Cells(i, 1).Value ‘名前
wsテンプレ.Range(“B3”) = ws差し込み.Cells(i, 2).Value ‘住所
wsテンプレ.Range(“B4”) = ws差し込み.Cells(i, 3).Value ‘金額
wsテンプレ.PrintOut ‘印刷実行
Next i
End Sub
このコードは、データシートの2行目から最終行までをループし、1件ずつテンプレートに値を書き込んで印刷する基本的な処理です。
「最終行を自動取得する」コードを入れることで、データが増減しても修正不要になる点が実務でも便利なポイントです。
印刷プレビューで確認する方法
実際に印刷する前に、プレビューで確認したい場合は「PrintOut」を「PrintPreview」に変更するだけで対応できます。
テスト段階では必ずプレビューを使って、差し込まれるデータが正しく表示されているかを確認することをお勧めします。
また、印刷枚数が多い場合は先頭の数件だけを対象にループの範囲を絞ると、デバッグが効率的に進められます。
カンマ区切り(CSV)データを読み込んで差し込み印刷する方法
続いては、カンマ区切り(CSV)データを読み込んで差し込み印刷する方法を確認していきます。
実務では、基幹システムや他のアプリからエクスポートされたCSVファイルをそのまま使いたいというケースも少なくありません。
VBAでCSVファイルを読み込み、そのデータをテンプレートへ差し込む処理を組み込めば、より実用的な自動化が実現します。
CSVファイルを開いてデータを取得するVBAコード
CSVを読み込む方法としては、「Workbooks.Open」でCSVファイル自体を開いてしまう方法と、「Open文」でテキストとして読み込む方法の2通りがあります。
実務では扱いやすさの点から、Workbooks.Openを使ってCSVをExcelとして開き、データを取得する方法が初心者にも分かりやすくお勧めです。
Sub CSVから差し込み印刷()
Dim csvPath As String
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim wsテンプレ As Worksheet
Dim i As Long, 最終行 As Long
csvPath = “C:\Users\sample\Desktop\データ.csv”
Set wbCSV = Workbooks.Open(csvPath)
Set wsCSV = wbCSV.Sheets(1)
Set wsテンプレ = ThisWorkbook.Sheets(“テンプレート”)
最終行 = wsCSV.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To 最終行
wsテンプレ.Range(“B2”) = wsCSV.Cells(i, 1).Value
wsテンプレ.Range(“B3”) = wsCSV.Cells(i, 2).Value
wsテンプレ.Range(“B4”) = wsCSV.Cells(i, 3).Value
wsテンプレ.PrintOut
Next i
wbCSV.Close SaveChanges:=False
End Sub
このコードでは、CSVファイルを開いた後にデータを取得し、処理が終わったら「wbCSV.Close」でCSVを閉じています。
「SaveChanges:=False」を指定することで、CSVファイルを誤って上書き保存してしまうリスクを防ぐことができます。
カンマ区切りデータの文字化けを防ぐポイント
CSVファイルを扱う際によく起こるのが、日本語の文字化けの問題です。
これはCSVの文字コードとExcelの読み込み設定が一致していないことが原因で発生します。
文字化けを防ぐためには、CSVを保存する際に「UTF-8(BOM付き)」または「Shift-JIS」で統一することが重要です。
もしWorkbooks.Openでうまくいかない場合は、「Open文 + Line Input」でテキストとして読み込み、Split関数でカンマ区切りに分割する方法も有効です。
ファイルパスをダイアログで選択させる応用テクニック
毎回コード内のCSVパスを書き換えるのは手間がかかります。
そこで、Application.GetOpenFilenameを使ってファイル選択ダイアログを表示させると、ユーザーがどのCSVを使うかを都度選べるようになります。
csvPath = Application.GetOpenFilename(“CSVファイル,*.csv”)
If csvPath = “False” Then Exit Sub ‘「キャンセル」時は処理を終了
このように記述することで、ファイルパスをコードにべた書きしなくて済み、汎用性の高いマクロに仕上がります。
差し込み印刷マクロをさらに便利にする応用設定
続いては、差し込み印刷マクロをさらに便利にするための応用設定を確認していきます。
基本的なマクロが完成したら、実務での使い勝手をよりよくするための応用テクニックを加えてみましょう。
印刷せずPDFとして保存する方法
紙に印刷するのではなく、PDF形式で保存したいというニーズも増えています。
VBAではExportAsFixedFormatメソッドを使うことで、印刷の代わりにPDFとして自動保存することが可能です。
wsテンプレ.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=”C:\Users\sample\Desktop\” & ws差し込み.Cells(i, 1).Value & “.pdf”
上記のように差し込みデータの名前をファイル名に使うと、1件ずつ個別のPDFファイルとして保存されるため、後から管理しやすくなります。
ペーパーレス化を進めたい職場では特に有効な設定といえるでしょう。
エラー処理を入れてマクロを安定させる方法
データが空欄だったり、ファイルが存在しなかったりした場合にマクロが途中で止まることがあります。
そのような場面に備えて、「On Error GoTo」構文によるエラーハンドリングをマクロに組み込むことが実務上の必須対応です。
実務で使うマクロには必ずエラー処理を組み込みましょう。
On Error GoTo ErrHandlerを使い、エラーが発生した際には「MsgBox」でエラーメッセージを表示させ、マクロを安全に終了させる構造にしておくことが重要です。
ボタンにマクロを登録して使いやすくする方法
マクロを毎回VBAエディタから実行するのは手間がかかります。
Excelのシート上にフォームコントロールの「ボタン」を配置し、作成したマクロを登録しておくと、ボタンをクリックするだけで差し込み印刷が実行できる使いやすいツールに仕上がります。
ボタンの挿入は「開発タブ」→「挿入」→「フォームコントロール」の「ボタン(フォームコントロール)」から行えます。
開発タブが表示されていない場合は、「Excelのオプション」→「リボンのユーザー設定」から「開発」にチェックを入れると表示されるようになります。
まとめ
本記事では、「【Excel】エクセルで差し込み印刷をマクロで自動化する方法(データ差し込み・カンマ区切り)」というテーマで、マクロVBAを使った差し込み印刷の基本から応用まで解説してきました。
Excelマクロを使えば、WordとExcelを連携させる必要がなく、Excel単体で差し込み印刷を自動化できる点が最大の強みです。
データシートとテンプレートシートを分けて管理し、Forループで1件ずつ差し込みながら印刷するという基本構造を押さえることが、マクロ作成の第一歩になります。
CSVファイルを取り込む方法やPDF保存への応用、エラー処理の実装まで段階的に対応することで、実務でも安定して使えるマクロツールが完成します。
まずは小規模なデータでテストしながら、自分の業務に合った差し込み印刷マクロを作り上げてみてください。
繰り返しの印刷作業がボタン1つで完了するようになれば、日々の業務効率が大きく向上するはずです。