一覧表にある宛名を一括で封筒に印刷する

一覧表にある宛名を一括で 封筒に印刷する Excel VBA
一覧表にある宛名を一括で 封筒に印刷する

知り合い事務員さんからのお願い

1年間に積み立てて使わなかったお金を年度末に返金するのだけど、そのお金を入れる封筒を作成するのにEXCELに封筒を印刷するエリアを人数分作成し、ひとつひとつ手で印刷指示を掛けている、生産性の低い仕事をしている部長さんがいるのですけどどうにかなりませんか?

暇だからそんなやり方していても、何も感じないんだね。そもそも部長がそんなことしている会社ってどうなの?

最近フロッピーディスクで振込していた話題の山口県? の会社です。

私の会社もつい2,3ヶ月前までフロッピーディスクで給与振込してたのですよ。

えっ!

どんな会社なの?

とにかくアナログな会社です。

わかりました、つくりましょう。

お願いします。

一覧表にある宛名を一括で印刷するEXCELシートを作成する

  1. 封筒印刷する積立一覧表の作成
  2. 封筒印刷するためのEXCELシートの作成
  3. 封筒一括自動印刷プログラムの登録(VBA)

封筒印刷する積立金一覧表の作成

封筒イメージに直接入力しているデータを一覧表にします。積立金管理用に一覧表がある場合はそれを流用します。

封筒印刷するためのEXCELシートの作成

プリンターで封筒印刷するためのフォームを作成します。

封筒印刷書式の設定

①は封筒のタイトルをセットするセルとなります。

②は返金する社員の氏名をセットするセルとなります。

③は返金する金額をセットするセルとなります。

フォームが完成したら、印刷対象範囲を設定します。

プリンターからの出力設定

封筒はプリンターによって印刷設定が異なりますので、印刷するシートにあらかじめ設定しておきます。

ここでは長形4号の封筒を手差しトレイから印刷する設定をサンプルとして掲載していますが、印刷したい封筒やプリンターに応じた設定をして一旦保管して下さい。設定が正しいか否かを確認するためにテスト印刷してみて、きちんと印刷ができる状態を保存して下さい。プリンターや封筒サイズが変わらない限り再設定は必要ありません。

設定が完了したら、『共済金積立返金封筒印刷.xlsm』という名前で保存(Excelマクロ有効ブック)して下さい。

また、シート名は共済会積立金一覧表のシートは『共済会積立金一覧表』、封筒印刷用のシートは『返金用封筒」という名前で保存して下さい。

封筒一括自動印刷プログラム作成

宛名一覧表からの封筒を一括で自動印刷するためのプログラムを設定します。プログラムといっても20行にも満たない簡単なものです。

共済金積立返金封筒印刷.xlsmにプログラム(VBA)を記述する

共済金積立返金封筒印刷.xlsmにプログラム(VBA)を記述しますので、EXCELのリボンを『表示』>『マクロ』>『マクロの表示』の順にクリックします。すると下図のようなウィザードが開きますので、マクロ名に”封筒印刷”と入力します。するとウィザードの作成ボタンが押せるようになりますので、”作成(C)”ボタンをクリックします。

下図の画面が開いたら、プログラムを入力します。下のメモの内容をコピーして、”Sub 封筒印刷()”から”End Sub”に上書きでペーストして下さい。

 

Public 印刷対象行 As Variant
Sub 返金用封筒印刷()

Application.ScreenUpdating = False
For 印刷対象行 = 4 To Sheets(“共済会積立金一覧表”).UsedRange.Rows.Count
Call 封筒印刷
Next 印刷対象行

Sheets(“共済会積立金一覧表”).Activate
Cells(2, 1).Select
Application.ScreenUpdating = True

End Sub

Sub 封筒印刷()

Sheets(“返金用封筒”).Range(“A2”).Value = Sheets(“共済会積立金一覧表”).Cells(1, 1).Value ‘①

If Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value <> “” _
And Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value <> “合計” _
And Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 14).Value <> 0 Then

Sheets(“返金用封筒”).Range(“A4”).Value = Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value ‘②
Sheets(“返金用封筒”).Range(“A5”).Value = Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 14).Value ‘③
Sheets(“返金用封筒”).PrintOut ActivePrinter = “RICOH SP C840M JPN RPCS on Ne00:” ‘④
End If

End Sub

プログラムの説明

一括自動印刷プログラムは2つのプログラム(サブルーチン)で構成しています。

無理に2つにする必要はないのですが… その理由は後の方で分かります。

ひとつめは”返金用封筒印刷()”というサブルーチンで、主な機能は共済会積立金一覧表のどの行からどの行までを印刷するかをコントロールしています。

サンプルで掲載した一覧表の有効範囲は4行目から22行目までですが、有効範囲の終わりはデータが増える可能性があるため、固定できませんので、使用している最終行Sheets(“共済会積立金一覧表”).UsedRange.Rows.Countまでを対象としてデータを読み込むといった内容を記述しています。

そして、4行目から使用している最終行になるまでサブルーチン”封筒印刷”を繰り返し実行します。 『CALL サブルーチン名』と記述することで、別のプログラムを実行することができます。

For 印刷対象行 = 4 To Sheets(“共済会積立金一覧表”).UsedRange.Rows.Count 
Call 封筒印刷
Next 印刷対象行
ふたつめは”封筒印刷()”というサブルーチンですが、主な機能は封筒印刷書式を設定したシート”返金用封筒”に一覧表にある①封筒のタイトル、②氏名、③返金金額をセットし、プリンターに印刷指示を出す④といった内容を記述しています。

Sheets(“返金用封筒”).Range(“A2”).Value = Sheets(“共済会積立金一覧表”).Cells(1, 1).Value ‘①

If Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value <> “” _
And Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value <> “合計” _
And Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 14).Value <> 0 Then

Sheets(“返金用封筒”).Range(“A4”).Value = Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 1).Value ‘②
Sheets(“返金用封筒”).Range(“A5”).Value = Sheets(“共済会積立金一覧表”).Cells(印刷対象行, 14).Value ‘③
Sheets(“返金用封筒”).PrintOut ActivePrinter = “RICOH SP C840M JPN RPCS on Ne00:” ‘④
End If

印刷する命令が条件文(IF文)の中にありますが、これは氏名が空白でなく、合計行でなく、返金金額が0でないことが印刷対象となるので、その条件を指定しています。

プリンターに印刷指示を出す④の記述について、通常使用するプリンターが封筒印刷できないプリンターであるケースも考えられるので、封筒印刷できるプリンター(黄色のマーカー部分)を指定しています。

封筒印刷に使うプリンターの部分は何を記述すればいいのかと疑問に思うかもしれませんので、その情報を確認する方法を以下に説明します。

まず、封筒印刷するプリンターをコントロールパネルで”通常使うプリンターに設定”にして下さい。

次にVBAで ”MsgBox Application.ActivePrinter” と記述し、実行してみて下さい。

すると、以下のようなメッセージボックスが表示されますので、この情報を黄色のマーカー部分に記述します。

一括自動印刷用ボタンの設置

プログラムの入力が完了したら、一括自動印刷用『返金用封筒印刷』ボタンを設置します。

  • EXCELのリボンを『開発』>『挿入』>『ボタン(フォームコントロール)』の順にクリックします。
  • ボタンのサイズをマウスをドラッグして決めます。

  • マクロ登録のウィザードが開くので、”返金用封筒印刷”を選択し、『OK』ボタンをクリックします。

 

 

 

  • ボタンの名称を『返金用封筒印刷』に変更します。変更はカーソルをボタンの上に持っていき、マウスの右クリックボタンを押して、ウィザードを表示します。表示されたウィザードメニューから『テキストの編集』をクリックするとテキストが編集できるようになりますので、”返金用封筒印刷”と入力して下さい。

出来上がり

印刷用ボタンを押すと返金対象となる全員分の封筒が一括で印刷されます。

ありがとうございました。

これで少しは生産性が上がるといいのですけど…

高い給料もらってるのだから

タイトルとURLをコピーしました