日報メールを半自動化!?――ExcelとVBAで作成するメール作成マクロとは:働く価値を上げる“VBA/GAS”術(11)
時間のかかる業務の代表「メール作成」。中には、定期的かつ毎回同じようなフォーマットで作成、送信するメールもあるのではないでしょうか。今回は、日報を例に、Excelに記入したことを基にメールを作成するVBAを紹介します。
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)でメールの下書きを作成する」マクロの作り方を解説します。なお、以下の記事で紹介した命令については本記事では詳しく紹介しませんので、都度参照してください。
連載「働く価値を上げる“VBA/GAS術”」のVBAに関する記事
- 第1回:さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは
- 第3回:Excelデータの入力不備で計算エラーが発生して家に帰れない!――入力規則よりも簡単なチェックマクロとは
- 第5回:一石二鳥で時間に余裕が!――面倒くさい見積書や請求書などの書類を自動作成するマクロとは
- 第7回:数百のファイルを1つ1つ開くの面倒……」、複数のExcelデータを1箇所に集約するマクロ術
- 第9回:メンテナンス性や実行時間を改善――複数のExcelデータを1箇所に集約するマクロの別解とは
日報メールの元データとなるExcelシート
では準備として、Excelファイルに日報メールの元データを2つのシートに用意します。
まず、1つ目が「フォーマット」シートです。このシートには、日報メールを作成する際に必要な、「送信先アドレス」「件名」「宛名」「本文の書き出し」「締めの文章」などを記載します。
なお、B3セルの件名欄は、現在の日付が挿入されるように、以下のExcel関数を入力しています。
="日報 [" & B1 & "] : " & TEXT(TODAY(), "yyyy/mm/dd(ddd)")
2つ目のシートは「レポート」シートです。日報には、時間帯別の活動内容を記載することがあるので、それらの情報をこのシートに表形式で記載します。
日報は、日々変わるので、メール作成のマクロを動作させる前に、当日の活動内容に更新します。
Outlookライブラリの参照設定
もう一つの準備として、Outlookライブラリの参照設定を行います。これを設定することで、Outlook関連の各種オブジェクトやメンバーが、自動メンバー表示などに表示されるようになります。
ライブラリの参照設定を行うには、まずVBEのメニューの「ツール」から「参照設定」を選択します。
次に、たくさんのライブラリが列挙されている「参照設定」ダイアログの中から「Microsoft Outlook 16.0 Object Library」にチェックを入れて、「OK」をクリックします。
これで、Outlookライブラリの参照設定は完了です。下記のようにOutlookライブラリの構成要素に、自動メンバー表示からアクセス可能です。
これで事前準備は完了です。
日報メールの自動作成マクロ
下記は、Excelの2つのシートを基にOutlookで下書きを作成するプロシージャ「Sub 日報メール作成()」です。
Sub 日報メール作成() 'レポート部分の生成 Dim report As String: report = "" Dim i As Long: i = 2 With Sheet2 Do While .Cells(i, 1).Value <> "" report = report & .Cells(i, 1).Value & "/" report = report & .Cells(i, 2).Value & "/" report = report & .Cells(i, 3).Value & "<br>" i = i + 1 Loop End With 'メールの各要素の生成 With Sheet1 Dim myTo As String: myTo = .Range("B2").Value Dim mySubject As String: mySubject = .Range("B3").Value Dim myBody As String: myBody = "" myBody = myBody & .Range("B4").Value & "<br>" '宛名" myBody = myBody & convertLf(.Range("B5").Value) & "<br>" '書き出し myBody = myBody & report 'レポート myBody = myBody & convertLf(.Range("B6").Value) '締め End With '下書き作成 Dim olApp As Outlook.Application Set olApp = New Outlook.Application Dim myMail As MailItem Set myMail = olApp.CreateItem(olMailItem) With myMail .To = myTo .Subject = mySubject .Display .HTMLBody = myBody & .HTMLBody End With End Sub
「Sub 日報メール作成()」を実行すると、下記のようなメールの下書きがOutlookに作成されます。
下記は、処理の大まかな流れです。
- 「レポート」シートからレポート部分の文字列を生成
- メールの送信先アドレス、件名、本文を文字列として生成
- Outlook.Applicationオブジェクトの生成
- MailItemオブジェクトの処理
┣MailItemオブジェクトの生成
┣送信先アドレス、件名の設定
┣下書きとして表示
┗本文の追加
また、上記プロシージャ内で使用している「Function」プロシージャ「convertLf()」は下記になります。
Function convertLf(ByVal str As String) As String convertLf = Replace(str, vbLf, "<br>") 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 日報メール作成()」の内容を確認しましょう。
Sub 日報メール作成() 'レポート部分の生成 Dim report As String: report = "" Dim i As Long: i = 2 With Sheet2 Do While .Cells(i, 1).Value <> "" report = report & .Cells(i, 1).Value & "/" report = report & .Cells(i, 2).Value & "/" report = report & .Cells(i, 3).Value & "<br>" i = i + 1 Loop End With 'メールの各要素の生成 With Sheet1 Dim myTo As String: myTo = .Range("B2").Value Dim mySubject As String: mySubject = .Range("B3").Value Dim myBody As String: myBody = "" myBody = myBody & .Range("B4").Value & "<br>" '宛名" myBody = myBody & convertLf(.Range("B5").Value) & "<br>" '書き出し myBody = myBody & report 'レポート myBody = myBody & convertLf(.Range("B6").Value) '締め End With '下書き作成 Dim olApp As Outlook.Application Set olApp = New Outlook.Application Dim myMail As MailItem Set myMail = olApp.CreateItem(olMailItem) With myMail .To = myTo .Subject = mySubject .Display .HTMLBody = myBody & .HTMLBody End With End Sub
次回は
今回は、Excel VBAで日報メールの下書き作成マクロを作成しました。1回当たりは小さな作業の効率化でも、毎日のように積み重なると大きな差を生み出します。ぜひ、活用してみてください。
次回は、日報メールの下書き作成マクロをGASで作成する方法を紹介します。
著者プロフィール
高橋宣成
プランノーツ 代表取締役
「ITを活用して日本の『働く』の価値を高める」をテーマに、ExcelやVBA、G Suite、Google Apps Script、クラウドなどによる企業または個人事業主向けのシステムおよびツールの開発やコンサルティング、セミナー講師などを務める。「IT×働き方」をテーマに運営するブログ「いつも隣にITのお仕事」は月間60万PV達成。
書籍紹介
高橋宣成著 秀和システム 1800円(税別)
動くコードが書けたその先、つまり「ExcelVBAを実務で使う」という目的に特化した実践書。ExcelVBAを楽に効果的に使いこなし続けるための知恵と知識、そしてそのためのビジョンと踏み出す勇気を提供する1冊。
詳解! Google Apps Script完全入門 〜Google Apps & G Suiteの最新プログラミングガイド〜
高橋宣成著 秀和システム 2600円(税別)
Google Apps Scriptの完全入門書として、JavaScriptの基本から自作ライブラリまでを徹底解説。これ一冊だけで基礎から実践まで体系的にマスターできます。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
「数百のファイルを1つ1つ開くの面倒……」、複数のExcelデータを1箇所に集約するマクロ術
経費精算書のように「バラバラのデータを1箇所に集約すること」は、多く発生する業務の1つです。しかし、1つ1つのファイルを開きコピー&ペーストするのは手間が掛かる業務。その業務を、マクロを使って自動化する方法を紹介します。「計算式エラーで残業確定……」、GASで入力データのチェックツールを作成
1つのGoogleスプレッドシートを複数人で共同編集するとき、想定していた形式とは違うデータを入力されると、不備が発生してしまう場合があります。そのような問題を、GASで解決するにはどうすればいいのでしょうか。プログラム自動実行で仕事を楽に! APIでSlackなどと連携できる「Google Apps Script」とは
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、Googleが提供する数々のアプリケーションを操作できる「Google Apps Script」を紹介する。※ショートカットキーの解説あり