日報メールを半自動化!?――ExcelとVBAで作成するメール作成マクロとは働く価値を上げる“VBA/GAS”術(11)

時間のかかる業務の代表「メール作成」。中には、定期的かつ毎回同じようなフォーマットで作成、送信するメールもあるのではないでしょうか。今回は、日報を例に、Excelに記入したことを基にメールを作成するVBAを紹介します。

» 2018年10月02日 05時00分 公開
[高橋宣成プランノーツ]

Excel VBAとGAS

 業務で発生するちょっとした面倒くさい業務。特定の操作を繰り返すだけなので、今のままでもいいけど、楽になったらいいなと思うこともあるのではないでしょうか。例えば業務を自動化すると時間が空くため、他の業務に時間を充てたり、残業時間を減らしたりできるかもしれません。

 本連載「働く価値を上げる“VBA/GAS術”」では、業務を効率化する手段として「Microsoft Excel」(マイクロソフトエクセル)で使える「VBA」(Visual Basic for Applications)と「G Suite」の「GAS」(Google Apps Script)の使い方を説明し、よくある業務課題の解決策を紹介します。

Excel VBAで日報メールの自動作成マクロを作成する

 仕事の中で、書類作成業務とともに時間がかかる業務の代表が「メール」ではないでしょうか。多くの人は、仕事で社内や取引先と毎日たくさんのメールをやりとりしています。

 その中には、定期的かつ毎回同じようなフォーマットで作成、送信するメールもあるのではないでしょうか。例えば、日報や定期的に発生する依頼、期限をお知らせするリマインドなどが挙げられます。

 そのようなメールの作成も、大体の内容や手順が決まっていれば、マクロ化できます。定期的に発生するメール作成は、1回当たりが小さな時短でも、日々積み重なると大きな差を生み出します。

 今回は、日報メールを題材にして、「Excelに記載した内容を基にMicrosoft Outlook(以下、Outlook)でメールの下書きを作成する」マクロの作り方を解説します。なお、以下の記事で紹介した命令については本記事では詳しく紹介しませんので、都度参照してください。

日報メールの元データとなるExcelシート

 では準備として、Excelファイルに日報メールの元データを2つのシートに用意します。

 まず、1つ目が「フォーマット」シートです。このシートには、日報メールを作成する際に必要な、「送信先アドレス」「件名」「宛名」「本文の書き出し」「締めの文章」などを記載します。

図1 フォーマットシート

 なお、B3セルの件名欄は、現在の日付が挿入されるように、以下のExcel関数を入力しています。

="日報 [" & B1 & "] : " & TEXT(TODAY(), "yyyy/mm/dd(ddd)")

 2つ目のシートは「レポート」シートです。日報には、時間帯別の活動内容を記載することがあるので、それらの情報をこのシートに表形式で記載します。

図2 レポートシート

 日報は、日々変わるので、メール作成のマクロを動作させる前に、当日の活動内容に更新します。

Outlookライブラリの参照設定

 もう一つの準備として、Outlookライブラリの参照設定を行います。これを設定することで、Outlook関連の各種オブジェクトやメンバーが、自動メンバー表示などに表示されるようになります。

 ライブラリの参照設定を行うには、まずVBEのメニューの「ツール」から「参照設定」を選択します。

図3 VBEのツールメニューから参照設定を選択

 次に、たくさんのライブラリが列挙されている「参照設定」ダイアログの中から「Microsoft Outlook 16.0 Object Library」にチェックを入れて、「OK」をクリックします。

図4 参照設定ダイアログでOutlookライブラリを参照設定する

 これで、Outlookライブラリの参照設定は完了です。下記のようにOutlookライブラリの構成要素に、自動メンバー表示からアクセス可能です。

図5 自動メンバー表示でOutlookライブラリの構成要素にアクセス

 これで事前準備は完了です。

日報メールの自動作成マクロ

 下記は、Excelの2つのシートを基にOutlookで下書きを作成するプロシージャ「Sub 日報メール作成()」です。

  1. Sub 日報メール作成()
  2. 'レポート部分の生成
  3. Dim report As String: report = ""
  4. Dim i As Long: i = 2
  5. With Sheet2
  6. Do While .Cells(i, 1).Value <> ""
  7. report = report & .Cells(i, 1).Value & "/"
  8. report = report & .Cells(i, 2).Value & "/"
  9. report = report & .Cells(i, 3).Value & "<br>"
  10. i = i + 1
  11. Loop
  12. End With
  13. 'メールの各要素の生成
  14. With Sheet1
  15. Dim myTo As String: myTo = .Range("B2").Value
  16. Dim mySubject As String: mySubject = .Range("B3").Value
  17. Dim myBody As String: myBody = ""
  18. myBody = myBody & .Range("B4").Value & "<br>" '宛名"
  19. myBody = myBody & convertLf(.Range("B5").Value) & "<br>" '書き出し
  20. myBody = myBody & report 'レポート
  21. myBody = myBody & convertLf(.Range("B6").Value) '締め
  22. End With
  23. '下書き作成
  24. Dim olApp As Outlook.Application
  25. Set olApp = New Outlook.Application
  26. Dim myMail As MailItem
  27. Set myMail = olApp.CreateItem(olMailItem)
  28. With myMail
  29. .To = myTo
  30. .Subject = mySubject
  31. .Display
  32. .HTMLBody = myBody & .HTMLBody
  33. End With
  34. End Sub

 「Sub 日報メール作成()」を実行すると、下記のようなメールの下書きがOutlookに作成されます。

図6 マクロで作成したメール下書き

 下記は、処理の大まかな流れです。

  1. 「レポート」シートからレポート部分の文字列を生成
  2. メールの送信先アドレス、件名、本文を文字列として生成
  3. Outlook.Applicationオブジェクトの生成
  4. MailItemオブジェクトの処理
    ┣MailItemオブジェクトの生成
    ┣送信先アドレス、件名の設定
    ┣下書きとして表示
    ┗本文の追加

 また、上記プロシージャ内で使用している「Function」プロシージャ「convertLf()」は下記になります。

  1. Function convertLf(ByVal str As String) As String
  2. convertLf = Replace(str, vbLf, "<br>")
  3. End Function

 今回作成するメールはHTMLメールです。従って、メール上の「改行」は、Excelのセル内部の改行コード「LF(ラインフィード)」ではなく、HTMLのbrタグで表現する必要があります。

 Functionプロシージャ「convertLf()」は、与えられた文字列内の改行コード「LF」を、brタグに置換して返すものです。

OutlookApplicationオブジェクトとその生成

 VBAによるOutlookの操作方法を中心に、ポイントを解説します。

 今回は、Outlookアプリケーションを用意し、VBAから操作します。それを行っているのが、下記です。

Dim olApp As Outlook.Application
Set olApp = New Outlook.Application

 これにより、新しい「OutlookApplication」オブジェクトが生成され、「olApp」という変数名で扱えるようになります。

CreateItemメソッドでMailItemオブジェクトを作成する

 続いて、下記のステートメントを解説します。

Set myMail = olApp.CreateItem(olMailItem)

 「CreateItem」メソッドは、OutlookApplicationオブジェクト上に、新しく「Outlookアイテム」を作るメソッドです。

OutlookApplicationオブジェクト.CreateItem(アイテムタイプ)

 CreateItemメソッドで作成できるアイテムには、幾つかの種類があります。どの種類のアイテムを作成するかは、下記の表の引数に与える値で決定します。

アイテムの種類 オブジェクト 定数名
メール MailItem olMailItem 0
予定 AppointmentItem olAppointmentItem 1
連絡先 ContactItem olContactItem 2
タスク TaskItem olTaskItem 3

 今回は、新しいメールを作成するので、引数として指定する定数は「olMailItem」、生成されるオブジェクトは「MailItem」オブジェクトになります。

MailItemオブジェクトのプロパティを設定する

 作成したMailItemオブジェクトについて、送信先アドレス、件名、本文などを指定し、入力している部分が下記です。

With myMail
    .To = myTo
    .Subject = mySubject
    .Display
    .HTMLBody = myBody & .HTMLBody
End With

 「To」プロパティ、「Subject」プロパティ、「HTMLBody」プロパティはそれぞれ、MailItemオブジェクトの送信先アドレス、件名、HTML本文を指定するプロパティです。同様に、「CC」プロパティや「BCC」プロパティなども存在しています。

MailItemオブジェクトを表示する

 もろもろの設定が完了したら、そのMailItemオブジェクトを下書きとして表示します。その処理を行うのが、「Display」メソッドです。

MailItemオブジェクト.Display

 プロシージャ「Sub 日報メール作成()」では、Displayメソッドの後に、HTML本文を指定するHTMLBodyプロパティを指定しています。この順番に違和感を覚えるかもしれませんが、これは「既定の署名」を表示するためです。

 Displayメソッドが実行されると、自動でHTML本文に既定の署名が呼び出される特性があります。しかし、HTMLBodyによりHTML本文に値が入った状態で、Displayメソッドを実行しても署名は反映されません。そのため、一度Displayメソッドを実行し、既定の署名をHTML本文に表示させてから、HTMLBodyでメール本文を挿入しています。

マクロ全体を確認

 解説は以上です。再度、プロシージャ「Sub 日報メール作成()」の内容を確認しましょう。

  1. Sub 日報メール作成()
  2. 'レポート部分の生成
  3. Dim report As String: report = ""
  4. Dim i As Long: i = 2
  5. With Sheet2
  6. Do While .Cells(i, 1).Value <> ""
  7. report = report & .Cells(i, 1).Value & "/"
  8. report = report & .Cells(i, 2).Value & "/"
  9. report = report & .Cells(i, 3).Value & "<br>"
  10. i = i + 1
  11. Loop
  12. End With
  13. 'メールの各要素の生成
  14. With Sheet1
  15. Dim myTo As String: myTo = .Range("B2").Value
  16. Dim mySubject As String: mySubject = .Range("B3").Value
  17. Dim myBody As String: myBody = ""
  18. myBody = myBody & .Range("B4").Value & "<br>" '宛名"
  19. myBody = myBody & convertLf(.Range("B5").Value) & "<br>" '書き出し
  20. myBody = myBody & report 'レポート
  21. myBody = myBody & convertLf(.Range("B6").Value) '締め
  22. End With
  23. '下書き作成
  24. Dim olApp As Outlook.Application
  25. Set olApp = New Outlook.Application
  26. Dim myMail As MailItem
  27. Set myMail = olApp.CreateItem(olMailItem)
  28. With myMail
  29. .To = myTo
  30. .Subject = mySubject
  31. .Display
  32. .HTMLBody = myBody & .HTMLBody
  33. End With
  34. End Sub

次回は

 今回は、Excel VBAで日報メールの下書き作成マクロを作成しました。1回当たりは小さな作業の効率化でも、毎日のように積み重なると大きな差を生み出します。ぜひ、活用してみてください。

 次回は、日報メールの下書き作成マクロをGASで作成する方法を紹介します。

鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬯ョ�ヲ�ス�ョ髯キ�サ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス鬯ッ�ッ�ス�ィ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ髣費ソス�ス�・�ス�ス�ス�ウ�ス�ス�ス�ィ�ス�ス�ス�ス髯懶ス」�ス�、�ス�ス�ス�ク�ス�ス�ス�イ鬯ゥ蠅捺��ス�ソ�ス�ス�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ鬯ゥ蟶壽桶�ス�ュ鬮ョ�」�ス�ソ�ス�ス�ス�ス�ス�ィ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ謫セ�ス�エ�ス�ス隶難ス」�守「托スュ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�シ鬯ゥ蟷「�ス�「髫エ荳サ�ス隶捺サゑスソ�ス邵コ�、�つ€鬯ッ�ョ�ス�ヲ�ス�ス�ス�ェ鬩包スカ闔ィ�ス�ス�ヲ�ス�エ�ス縺、ツ€髯キ闌ィ�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ェ�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�イ鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬮ッ�キ�ス�キ�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス New

著者プロフィール

高橋宣成

プランノーツ 代表取締役

「ITを活用して日本の『働く』の価値を高める」をテーマに、ExcelやVBA、G Suite、Google Apps Script、クラウドなどによる企業または個人事業主向けのシステムおよびツールの開発やコンサルティング、セミナー講師などを務める。「IT×働き方」をテーマに運営するブログ「いつも隣にITのお仕事」は月間60万PV達成。

書籍紹介

ExcelVBAを実務で使い倒す技術

高橋宣成著 秀和システム 1800円(税別)

動くコードが書けたその先、つまり「ExcelVBAを実務で使う」という目的に特化した実践書。ExcelVBAを楽に効果的に使いこなし続けるための知恵と知識、そしてそのためのビジョンと踏み出す勇気を提供する1冊。


詳解! Google Apps Script完全入門 ~Google Apps & G Suiteの最新プログラミングガイド~

高橋宣成著 秀和システム 2600円(税別)

Google Apps Scriptの完全入門書として、JavaScriptの基本から自作ライブラリまでを徹底解説。これ一冊だけで基礎から実践まで体系的にマスターできます。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Coding Edge 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー

髫エ蟷「�ス�ャ髫エ魃会スス�・髫エ蟶キ�」�ッ闖ォ�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。