連載
» 2018年10月02日 05時00分 公開

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

[高橋宣成,プランノーツ]

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

 下記は、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に作成されます。

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

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

  1. 「レポート」シートからレポート部分の文字列を生成
  2. メールの送信先アドレス、件名、本文を文字列として生成
  3. Outlook.Applicationオブジェクトの生成
  4. 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タグに置換して返すものです。

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

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

メールマガジン登録

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