EXCEL VBA で封筒印刷

はじめに

会社名やロゴが入った封筒を少量印刷したい場合に簡単にできる方法としてExcelで作成してみました。

年賀状印刷ソフトなどを利用すれば必要無いのですが、いろいろ応用できるのであると便利です。

ダウンロード

※ZIP圧縮形式なのでどこかに解凍してご利用ください。

ちょこっと解説

リストシート

このシートには宛先を入力します。

左側の名称は「長形3号」シートの宛名選択で利用するため必ず入力しておきます。

長形3号シート

左上の宛名選択はリストになっていて「リスト」シートが一覧でセットされていますので、印刷したい宛名を選択します。

宛名を選択すると上記の表示になります。

一番下のロゴは画像になっていますので、別のものに差し替えてご利用ください。

※画像がぼやける場合は、こちらを参考にしてみてください。

郵便番号・住所・氏名は、ActiveXコントロールとなっており、位置の微調整が可能です。

リボンの「開発」を選択し「デザインモード」をクリックして郵便番号などを選択し移動できます。

※開発タブが表示されていない場合は、こちらを参照して表示してください。

ちょこっと解説

宛名を選択した際に、ActiveXコントロールにデータを表示することが、ポイントです。

セルの値が変更になると”Worksheet_Change”イベントが動くのでこれを利用して該当セル(宛名選択リスト)に変化があった場合にだけ実行されるようにします。

また、VBAでExcelの関数は、”WorksheetFunction”を付けてVLookupを利用してます。

VBA

長形3号と角形2号で宛名リストのセルアドレスが変わりますので、18行目の

addr = "X2"

のX2を調整します。※角形2号の場合は、AP2です。

Private Sub cmdPrint_Click()
    On Error GoTo ErrHandler
    
    Sheets("長形3号").PrintOut Preview:=False
    
    Exit Sub
    
ErrHandler:
    MsgBox Err.Description
    
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrHandler
    
    Dim addr As String
    
    addr = "X2"
    
    With ActiveSheet
        If Target = .Range(addr) Then   'ドロップダウンリストの文字列を選択したら
            ' 郵便番号
            txtP1.Text = Left(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 2, False), 1)
            txtP2.Text = Mid(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 2, False), 2, 1)
            txtP3.Text = Right(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 2, False), 1)
            txtP4.Text = Left(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 3, False), 1)
            txtP5.Text = Mid(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 3, False), 2, 1)
            txtP6.Text = Mid(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 3, False), 3, 1)
            txtP7.Text = Right(WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 3, False), 1)
            ' 住所
            txtAddr1.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 4, False)
            txtAddr2.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 5, False)
            txtAddr3.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 6, False)
            ' 名前
            txtUser1.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 7, False)
            txtUser2.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 8, False)
        End If
    End With

    Exit Sub
    
ErrHandler:
    MsgBox Err.Description
End Sub

 

最後に

プリンタの手差し設定などプリンタごとに個別に指定する必要があります。また、プリンタごとに印字位置が異なったりしますので、微調整がめんどくさいところですが、一度設定するだけなのでなんとかがんばってください。

はがきのシートなども用意しておくと年賀状などにも利用できます。

EXCEL VBA で封筒印刷” に対して5件のコメントがあります。

  1. 斎藤 浩 より:

    フリーソフトを使わせて頂きたく考えております。
    住所、氏名を縦書き変更したい場合はどのようにしたらよろしいでしょうか。
    お手数をおかけしますが、ご返答の程、宜しくお願い致します。

    1. akiratin より:

      住所・氏名にActiveXコントロールを利用しているので変形させてMultilineプロパティをTrueにすることで縦書き風にすることは可能ですが、見栄えが良くないので縦書きの結合セルを用意してそこに住所・氏名をセットする方が良いと思います。
      サンプルのダウンロード先を別途メールしますのでご確認ください。

  2. りぼん より:

    フリーソフト、いつもありがとうございます。

    宛名の様と御中を選べるようにすることと、字体を変更することは難しいでしょうか?

    御手隙の際にご検討のほどお願いいたします。

    1. akiratin より:

      字体の変更は、デザインモードにしてActiveXコントロールのプロパティを表示しFONT項目を選択していただければ変更できます。

      現在は担当者名に直接入力するようにしてありますが、
      宛名の様と御中を選択できるようにしたいということでしょうか?

      やるとしたら、担当者名の右側セルでデータの入力規則をリストに設定して様と御中をセットすることで選択できるようになります。

      あとはVBAの編集になりますが、Worksheet_Changeイベントの以下の行を書き換えてあげれば実現可能です。

      txtUser2.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 8, False)

      txtUser2.Text = WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:H"), 8, False) & WorksheetFunction.VLookup(.Range(addr), Worksheets("リスト").Range("A:I"), 9, False)

      ※テストしていないので記述ミスがあったらごめんなさい。

  3. りぼん より:

    返信ありがとうございます。
    VBAは全く使ったことがないので、時間のあるときに試してみようと思います。

コメントを残す

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