VBAで宛名印刷の選択範囲だけを印刷する方法|For Each・Selection・PrintOutの使い方

宛名印刷を全件まとめて自動化するマクロは便利ですが、「今日の発送分だけ印刷したい」「特定の顧客だけ送りたい」というケースも少なくありません。そんなときに役立つのが、選択した行のデータだけを印刷する方法です。

この記事では、ユーザーが印刷したい行を選択してからマクロを実行する仕組みを、コードのポイントとともに解説します。

選択範囲だけ宛名印刷するには?

今回も「データ」シートと「印刷用シート」の2シート構成を使います。

  • 「データ」シート:氏名・郵便番号・住所などが一覧で入っているシート
  • 「印刷用シート」:1件分の宛名レイアウトを印刷するシート

操作の流れは「データシートで印刷したい行を選択 → マクロを実行 → 選んだ行だけ印刷」というシンプルな手順です。

Sub AddressPrinting_Selection()
    Dim wsData As Worksheet
    Dim wsTemplate As Worksheet
    Dim cell As Range

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

    Application.ScreenUpdating = False

    For Each cell In Selection.Columns(1).Cells
        If cell.Row > 1 Then  ' 1行目(タイトル行)は飛ばす
            wsTemplate.Range("A2").Value = wsData.Cells(cell.Row, 2).Value  ' 氏名
            wsTemplate.Range("A3").Value = wsData.Cells(cell.Row, 3).Value  ' 郵便番号
            wsTemplate.Range("A4").Value = wsData.Cells(cell.Row, 4).Value  ' 住所
            wsTemplate.PrintOut  ' 印刷を実行
        End If
    Next cell

    Application.ScreenUpdating = True
    MsgBox "選択された行の印刷が完了しました。"
End Sub

コードのポイントを理解するには?

For Each cell In Selection.Columns(1).Cells
選択した範囲の中でA列にある各セルを cell という変数に順番に格納して処理します。For Each は、複数のセルやオブジェクトを1件ずつ繰り返し処理する構文です。

If cell.Row > 1 Then
1行目のタイトル行が選択範囲に含まれていてもスキップします。データは2行目以降から始まる前提です。

転記と印刷のセット
指定された行のB列(氏名)・C列(郵便番号)・D列(住所)を印刷用シートに転記し、PrintOut で1件ずつ印刷します。

使用手順を確認するには?

操作は以下の3ステップです。

① 「データ」シートで印刷したい行(複数可)をマウスで選択する
② マクロを実行する
③ 選択した行のデータだけが印刷される

マクロをシート上のボタンに割り当てておくと、選択してワンクリックで印刷できるためさらに使いやすくなります。

まとめ

  • For Each cell In Selection.Columns(1).Cells で選択範囲のA列セルを1件ずつ処理する
  • If cell.Row > 1 でタイトル行をスキップする
  • 選択した行のデータを印刷用シートに転記→印刷の流れで繰り返す
  • 全件印刷マクロと組み合わせることで場面に応じた使い分けができる
  • ボタンに割り当てると選択→クリックだけで完結する使いやすいマクロになる

よくある質問

複数の離れた行(飛び飛びの行)を選択して印刷できますか?

できます。Ctrlキーを押しながら複数行を選択すると、選択した行だけが処理対象になります。For Each は離れたセル範囲にも対応しています。

タイトル行を選択してしまったら印刷されてしまいますか?

されません。If cell.Row > 1 の条件でタイトル行(1行目)は自動的にスキップされます。

印刷用シートのレイアウト(セルの位置)は変更できますか?

できます。wsTemplate.Range("A2") などのセル指定を、実際の印刷用シートのレイアウトに合わせて変更してください。列番号(2・3・4)もデータシートの構成に合わせて修正します。

印刷ではなくPDFで出力することもできますか?

できます。wsTemplate.PrintOut の代わりに wsTemplate.ExportAsFixedFormat を使うと、PDF形式での出力が可能です。ファイル名に氏名や連番を入れると件数が多い場合にも管理しやすくなります。

全件印刷マクロと選択印刷マクロをボタンで使い分けるにはどうすればいいですか?

シート上にボタンを2つ配置し、それぞれに別々のマクロを割り当てます。「全件印刷」ボタンと「選択印刷」ボタンを並べておくだけで、状況に応じてワンクリックで使い分けられます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール