サイトアイコン あきらちんの技術メモ

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

 

最後に

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

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

モバイルバージョンを終了