エクセルマクロを使って送付状を作成する方法【サンプルコード付き】
請求書や領収書を送付するときに添付する「送付状」の作成を自動化したい!
こんな要望にお応えします。
この記事では、送付状の作成から印刷を自動化するマクロの作り方を解説しています。
送付状の作成は一度しっかり雛形を作成してしまえば、「氏名」「宛先」「日付」などを編集するだけの単純作業になりがちです。
単純作業なのに作成件数が多くて時間がかかると悩んでいる方が多いのではないでしょうか。
私が勤めていた会社では、
送付状の作成は単純なルーティーン作業だから若手の仕事
とされていました。
ベテランがやろうが若手がやろうが作業量が変わるわけではないので時間のかかる仕事に変わりありません。
送付状自動印刷マクロを導入すれば、誰でも一瞬で大量の送付状を作成できるようになります。
送付状作成業務の効率をアップさせたい!という方は是非チェックしてみてください。
目次
送付状とは
送付状とは、郵送物に添付する一枚の書類のことです。
送付状には、郵送物の情報や目的を簡潔に記載します。
- 自分の会社情報
- 相手先の会社情報
- あいさつ文
- 郵送物の内容
送付状を見ただけで郵送物の内容と目的がすぐに理解できるよう作成することが重要です。
請求書を郵送するときに実際に使っている送付状がこちら
同封する書類が請求書や領収書の場合、送付状を添付する必要ない!という方がいらっしゃいますが、ビジネスマナーとして私はどんなときも必ず送付状を添付しています。
「〇〇の件に関する請求書です。」と一文添えるだけで相手への親切感が全然違います。
今まで送付状を添付したことがない!送付状を添付していなくても相手から指摘されたことがない!
こんな理由で送付状を添付していない方は相手先に好印象を与えるチャンスを逃している可能性があります。
次回の書類を郵送することがあったら送付状の添付にチャレンジしてみてください。
送付状自動印刷マクロとは
送付状自動印刷マクロは、
「氏名」「住所」「会社名」などの項目を編集し印刷する
この処理を自動で行います。
「宛先一覧」シートの情報を「送付状」シートに転記、
転記処理が完了するとすぐに印刷処理されます。
「送信日」や「No」情報から印刷件数を指定することができます。
宛先の異なる送付状をまとめて印刷することが可能です。
いろんな取引先に請求書や領収書を送付することがあって、大量の送付状が必要になる方におすすめです。
今回、サンプル事例として紹介している送付状は、「宛先」「送付資料」「記載事項」の編集を行う設定ですが、
「挨拶文」の内容を宛先によって変化させることも可能です。
業務内容に合わせた書類印刷作業の効率をアップさせるマクロを作ってほしい!という方は是非マメBlogにご相談ください。
>>> マメBlogへの問い合わせはこちら
送付状自動印刷マクロを使って非効率的な書類作成業務の効率をアップさせてみてください。
送付状自動印刷マクロの使い方
①送付状に必要な基本情報の入力
一番下の空白行に基本情報をどんどん追記していくだけで入力作業は完了です。
②印刷する送付状の指定
時間のかかる手順は、基本情報の入力作業です。
基本情報の入力作業も一旦入力してしまえば次回の入力はコピペで完了させることができます。
送付状自動印刷マクロのサンプルコード
下記のサンプルコードは、実際に導入している送付状自動印刷マクロに設定しているものと全く同じコードなのでコピペして使うことが可能です。
Sub 印刷マクロ()
'''Sheetの設定'''
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("宛先一覧")
Set Bsh = ThisWorkbook.Worksheets("送付状")
Dim Num1, Num2 As Long
Num1 = Ash.Cells(5, 17)
Num2 = Ash.Cells(5, 19)
''''''''''''''''転記番号を入力'''''''''''''''''''''''
For j = Num1 + 2 To Num2 + 2
''''''''''''''''印刷番号が入力されているときに実行'''''''''''''''''''''''
If Num1 <> 0 And Num2 <> 0 And Ash.Cells(j, 9) = "" Then
Bsh.Range(Bsh.Cells(2, 4), Bsh.Cells(7, 5)).ClearContents
Bsh.Range(Bsh.Cells(22, 3), Bsh.Cells(24, 4)).ClearContents
Bsh.Range(Bsh.Cells(28, 3), Bsh.Cells(30, 4)).ClearContents
'''''日付を転記'''''
Bsh.Cells(1, 8) = Ash.Cells(3, 17)
'''''郵便番号を転記'''''
Bsh.Cells(2, 4) = Ash.Cells(j, 7)
Bsh.Cells(2, 4).HorizontalAlignment = xlLeft
'''''住所を転記'''''
Bsh.Cells(3, 4) = Ash.Cells(j, 8)
Bsh.Cells(3, 4).HorizontalAlignment = xlLeft
'''''会社名を転記'''''
Bsh.Cells(4, 4) = Ash.Cells(j, 4)
Bsh.Cells(4, 4).HorizontalAlignment = xlLeft
'''''部署を転記'''''
Bsh.Cells(5, 4) = Ash.Cells(j, 5)
Bsh.Cells(5, 4).HorizontalAlignment = xlLeft
'''''氏名を転記'''''
Bsh.Cells(6, 4) = Ash.Cells(j, 6)
Bsh.Cells(6, 4).HorizontalAlignment = xlLeft
Bsh.Cells(6, 5) = "様"
'''''「宛先一覧」シートの送付資料①を転記'''''
If Ash.Cells(j, 10) <> "" Then
Bsh.Cells(22, 3) = "1)"
Bsh.Cells(22, 4) = Ash.Cells(j, 10)
Bsh.Cells(22, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートの送付資料②を転記'''''
If Ash.Cells(j, 11) <> "" Then
Bsh.Cells(23, 3) = "2)"
Bsh.Cells(23, 4) = Ash.Cells(j, 11)
Bsh.Cells(23, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートの送付資料③を転記'''''
If Ash.Cells(j, 12) <> "" Then
Bsh.Cells(24, 3) = "3)"
Bsh.Cells(24, 4) = Ash.Cells(j, 12)
Bsh.Cells(24, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ①を転記'''''
If Ash.Cells(j, 13) <> "" Then
Bsh.Cells(28, 3) = "1)"
Bsh.Cells(28, 4) = Ash.Cells(j, 13)
Bsh.Cells(28, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ②を転記'''''
If Ash.Cells(j, 14) <> "" Then
Bsh.Cells(29, 3) = "2)"
Bsh.Cells(29, 4) = Ash.Cells(j, 14)
Bsh.Cells(29, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ③を転記'''''
If Ash.Cells(j, 15) <> "" Then
Bsh.Cells(30, 3) = "3)"
Bsh.Cells(30, 4) = Ash.Cells(j, 15)
Bsh.Cells(30, 4).HorizontalAlignment = xlLeft
Else
End If
'''''''''「送付状」シートを選択
Bsh.Select
'''''''''印刷範囲を選択
ActiveSheet.PageSetup.PrintArea = ("A1:I40")
ActiveSheet.PrintPreview
'ActiveSheet.PrintOut
ElseIf Num1 <> 0 And Num2 <> 0 And Ash.Cells(j, 9) <> "" Then
Bsh.Range(Bsh.Cells(2, 4), Bsh.Cells(7, 5)).ClearContents
Bsh.Range(Bsh.Cells(22, 3), Bsh.Cells(24, 4)).ClearContents
Bsh.Range(Bsh.Cells(28, 3), Bsh.Cells(30, 4)).ClearContents
'''''日付を転記'''''
Bsh.Cells(1, 8) = Ash.Cells(3, 17)
'''''郵便番号を転記'''''
Bsh.Cells(2, 4) = Ash.Cells(j, 7)
Bsh.Cells(2, 4).HorizontalAlignment = xlLeft
'''''住所1を転記'''''
Bsh.Cells(3, 4) = Ash.Cells(j, 8)
Bsh.Cells(3, 4).HorizontalAlignment = xlLeft
'''''住所2を転記'''''
Bsh.Cells(4, 4) = Ash.Cells(j, 9)
Bsh.Cells(4, 4).HorizontalAlignment = xlLeft
'''''会社を転記'''''
Bsh.Cells(5, 4) = Ash.Cells(j, 4)
Bsh.Cells(5, 4).HorizontalAlignment = xlLeft
'''''部署を転記'''''
Bsh.Cells(6, 4) = Ash.Cells(j, 5)
Bsh.Cells(6, 4).HorizontalAlignment = xlLeft
'''''氏名を転記'''''
Bsh.Cells(7, 4) = Ash.Cells(j, 6)
Bsh.Cells(7, 4).HorizontalAlignment = xlLeft
Bsh.Cells(7, 5) = "様"
'''''「宛先一覧」シートの送付資料①を転記'''''
If Ash.Cells(j, 10) <> "" Then
Bsh.Cells(22, 3) = "1)"
Bsh.Cells(22, 4) = Ash.Cells(j, 10)
Bsh.Cells(22, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートの送付資料②を転記'''''
If Ash.Cells(j, 11) <> "" Then
Bsh.Cells(23, 3) = "2)"
Bsh.Cells(23, 4) = Ash.Cells(j, 11)
Bsh.Cells(23, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートの送付資料③を転記'''''
If Ash.Cells(j, 12) <> "" Then
Bsh.Cells(24, 3) = "3)"
Bsh.Cells(24, 4) = Ash.Cells(j, 12)
Bsh.Cells(24, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ①を転記'''''
If Ash.Cells(j, 13) <> "" Then
Bsh.Cells(28, 3) = "1)"
Bsh.Cells(28, 4) = Ash.Cells(j, 13)
Bsh.Cells(28, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ②を転記'''''
If Ash.Cells(j, 14) <> "" Then
Bsh.Cells(29, 3) = "2)"
Bsh.Cells(29, 4) = Ash.Cells(j, 14)
Bsh.Cells(29, 4).HorizontalAlignment = xlLeft
Else
End If
'''''「宛先一覧」シートのその他お知らせ③を転記'''''
If Ash.Cells(j, 15) <> "" Then
Bsh.Cells(30, 3) = "3)"
Bsh.Cells(30, 4) = Ash.Cells(j, 15)
Bsh.Cells(30, 4).HorizontalAlignment = xlLeft
Else
End If
'''''''''「送付状」シートを選択
Bsh.Select
'''''''''印刷範囲を選択
ActiveSheet.PageSetup.PrintArea = ("A1:I40")
ActiveSheet.PrintPreview
'ActiveSheet.PrintOut
End If
Next
End Sub
長いコードになっていますが、
「宛先一覧」シートの情報を転記する → 印刷する
というシンプルな処理を表現しているだけになります。
82行目と155行目のPrintOut処理にマスクをかけている理由は、
マスクをかけなければ印刷命令が実行され紙が出力されてしまいます。
マクロの設定方法
①VBAを開く
②標準モジュールを作成
③Module1にコードを記載
④ボタンの作成
⑤ボタンにマクロを登録
以上でマクロの設定は完了です。
ボタンにマクロを登録する方法は、最もシンプルなマクロの実行方法なので自由に扱えるようマスターしてみてください。
ほかにも、「セルのクリックでマクロを実行する方法」や「ユーザーフォームでマクロを実行する方法」などがあります。
ボタンにマクロを登録する方法より難易度は高めですが、仕事に応用しやすい方法です。
下記の記事では、「セルのクリックでマクロを実行する方法」を解説しています。
>>>「セルのクリックでマクロを実行する方法」の解説はこちら
是非いろんな「マクロの実行方法」を試してみてください。
送付状自動印刷マクロを導入して変わったこと
送付状作成マクロを導入してから以下のような環境の変化がありました。
- 資料作成のスピードが2倍以上早くなった
- 作業ミスがなくなったため無駄なミスプリントが減った
- 送付状作成以外の業務にもマクロを導入するようになった
作業量が多ければ多いほどマクロは効果を発揮します。
送付状自動印刷マクロの導入をきっかけに、職場内でいろんなエクセル業務にマクロを導入する雰囲気になりました。
その結果、デスクワーク全体の効率化が格段にアップすることに。
「書類を印刷する」「データ分析をする」といった内容で残業をする方がほぼいなくなりました。
デスクワークでの残業が多い方はマクロの導入を検討してみてはいかがでしょうか。
エクセル作業効率化マクロの導入方法
上記の記事から、マクロはエクセル作業の効率を格段にアップさせることが可能だとおわかりいただけたかと思います。
さっそくマクロを使って今抱えている業務の効率をアップさせたい!と考えたとき、どうやって導入していけば良いのでしょうか?
VBAに詳しい方であれば自分で好きなようにマクロを設定することができますが、VBA初心者の方はそうはいきません。
下記ではVBA初心者がマクロを導入する方法をご紹介します。
業務内容に合わせたマクロの開発依頼
最も手っ取り早くマクロを導入する方法は、
業務内容に合わせたマクロを開発してもらい、そのエクセルファイルをもらう
という方法です。
マクロ開発者に「どんな作業をしているのか」「どんな処理を自動化したいのか」を伝えるだけで、業務内容に合わせたマクロを開発してもらうことが可能。
マクロ初心者の方でも、現在使っているエクセルにマクロを導入できる方法です。
メリット
- マクロ開発に要する時間を省略できる
- 業務内容にぴったりのマクロを導入できる
デメリット
- 費用がかかる
マクロが設定されたエクセルファイルをダウンロード
ネットを検索すると、作業効率化マクロが設定されたエクセルファイルが数多く掲載されています。
業務内容にぴったりのデータを見つけることが出来ればすぐにマクロの導入が可能です。
メリット
- マクロ開発にかかる時間を省略することができる
- 手軽に効果化マクロを導入できる
- 無料、もしくは安価でマクロを導入できる
デメリット
- 業務内容にぴったりのマクロを見つけるのは難しい
- 多少のアレンジが必要になる
VBAの勉強を始める
VBAスキルを身に付けることによって、自ら作業効率化マクロを開発し導入するという方法があります。
VBAの勉強と聞いて感じることが、
- VBA(プログラミング)って難しそう
- スキルを身につけるのに時間がかかりそう
- 途中で挫折しそう
っていうネガティブなことが多いかと思います。
確かにプログラミングは初心者にとって身につけることが難しいスキルですが、VBAはプログラミングの中でも最も身に付けやすいプログラミングです。
なぜかというと、
VBAに関する教材がふんだんに販売されていて簡単に情報を取得できるから
です。
特におすすめなのが、プログラミングスクール【1st Step】という教材です。
仕事をしていてまとまった勉強時間を確保できない方でも効率よくVBAスキルを身につけることができます。
下記の記事では、プログラミングスクール【1st Step】のレビューを詳しく解説しています。
VBA学習に興味のある方は是非参考にしてみてください。
ほかにも、マメブログでは「素人でもすぐにvbAスキルを身につける方法」や仕事で役立つVBAの情報をメルマガで発信しています。
VBAスキルを身につけてエクセル作業の効率をアップさせたい!という方はぜひ参考にしてみてください。
>>> メルマガ登録画面はこちら
VBAスキルを身に付けるとエクセル作業だけでなく、仕事全体の効率をアップさせることに繋がります。
VBAというプログラミングの少しでも興味があるという方はVBA学習をスタートさせてみてはいかがでしょうか。
ディスカッション
コメント一覧
まだ、コメントがありません