【Excelマクロ】VBAで宛名印刷を自動化

宛名印刷をなぜ自動化するのか?

宛名印刷は、ビジネスでもプライベートでも意外と登場頻度が高い業務です。たとえば、年賀状、ダイレクトメール、請求書など、送り先の氏名や住所をExcelで管理していて、それをWordや印刷ソフトに手作業で転記しているというケースがあります。

しかし、毎回手作業で印刷設定を行い、宛名を差し替える作業は、手間がかかるうえにミスも発生しやすいです。そんなときに役立つのが、ExcelとVBAを使った宛名印刷の自動化です。

今回は、印刷用シート作成からVBAコードの書き方、実行手順まで丁寧にご紹介していきます。

実現するための準備

自動化には、最低限、次の2つのシートを用意するだけで十分です。

  • 「データ」シート:氏名や住所などの情報を一覧で管理
  • 「印刷用シート」:1件分の宛名を表示し印刷するためのシート

この2シートを使って、データを1行ずつ印刷用シートに転記しながら、順に印刷していくのが今回の流れです。

全体像

今回のマクロの目的はとてもシンプルです。

  • 住所データを1件ずつ印刷用シートに表示しながら印刷する
  • 手作業によるコピー&ペーストをなくす
  • 時間短縮とミスの防止につなげる

Excelの力を借りて、繰り返しの作業を自動で行うのが狙いです。

データを整える

「データ」シートには、次のような表形式で情報を入力しておきます。

A列B列C列D列
No氏名郵便番号住所
1山田太郎123-4567東京都新宿区〇〇
2佐藤花子987-6543神奈川県横浜市△△

1行目がタイトル行となり、2行目以降にデータを入力していきます。

コードの例

Sub Address_print()

    Dim i As Long
    Dim lastRow As Long
    Dim wsData As Worksheet
    Dim wsTemplate As Worksheet

    Set wsData = Worksheets("データ")
    Set wsTemplate = Worksheets("印刷用シート")

    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row

    Application.ScreenUpdating = False

    For i = 2 To lastRow
        ' 印刷用シートに転記
        wsTemplate.Range("A2").Value = wsData.Cells(i, 2).Value ' 氏名
        wsTemplate.Range("A3").Value = wsData.Cells(i, 3).Value ' 郵便番号
        wsTemplate.Range("A4").Value = wsData.Cells(i, 4).Value ' 住所

        ' 印刷実行
        wsTemplate.PrintOut
    Next i

    Application.ScreenUpdating = True
    MsgBox "印刷が完了しました。"

End Sub

コードの説明

印刷用シートには請求書などのテンプレートがあると想定しており、そのうち、A2には氏名、A3には郵便番号、A4には住所を入れるようなテンプレートになっています。

それぞれに対して、内容を入れ、その後、印刷をするところまで自動化しています。

  • wsData:データシート
  • wsTemplate:印刷用シートシート
  • For i = 2 To lastRow:2行目から最終行まで繰り返し処理
  • PrintOut:1件ずつ印刷実行

マクロの実行の例

マクロの実行は、開発タブからも作業はできますが、設定をしないと開発タブはないので、自分だけで使う場合はいいですが、他の方にも利用してもらうのであれば、ボタンを使うと便利です。

  • Excelの「開発」タブからボタンを挿入
  • 「宛名印刷」マクロを割り当てる
  • あとはボタンをクリックするだけで印刷が始まります

事前に印刷範囲や用紙サイズ、プリンタ設定も確認しておきましょう。

応用:PDFで出力したい場合

印刷ではなくPDF保存したい場合、以下のように書き換えます。

wsTemplate.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="C:\出力\" & wsData.Cells(i, 2).Value & ".pdf"

これにより、宛名ごとに個別のPDFファイルとして保存されます。 保存先のフォルダは事前に作成しておきましょう。

トラブルシューティング

  • 印刷されない:シート名やセル位置が間違っていないか確認
  • PDFが上書きされる:ファイル名に日付や番号を付加して同じ名前にならないようにする
  • 印刷が遅い:大量印刷時はApplication.PrintCommunication = Falseを入れておく
    ※これは印刷するたびに、元の設定に戻るため、設定を入れている場合にはその設定が元に戻らないようにするための処理です。入れておくことで、処理が元に戻ることなく動作が続きます。

まとめ

宛名印刷を手作業で行っていると、毎回同じ作業に時間を取られてしまいます。

VBAを活用すれば、

  • 請求書などの作業を一瞬で終わらせられる
  • ミスがなくなることで信頼性が上がる
  • 作業時間を他の業務に回せる

という大きなメリットが得られます。

まずはこの基本の仕組みから始めて、次第に自社の業務に合ったカスタマイズに挑戦してみてください。

コメント