エクセルを使って業務連絡のメール本文を自動で作成しOutlookから送信する(VBA)

ExcelVBA

・きっかけ

私がアルバイト(副業)で働いている勤務先では在宅勤務を開始・終了する際は連絡用メールアドレスに開始・終了する内容を送り報告するルールなっているのですが、毎回メールアドレス(業務連絡用アドレスへ)を指定し本文をコピーや入力するのが手間で、ボタン一つでOutlookを使って本文の作成から送信までできるVBAを作ってみました。Outlookに定型文を登録して送信することも考えたのですが、宛先メールアドレスを毎回、指定するのが面倒なことや誤送信がないようにすること、作業日報がエクセルで記録していたこともあり、作業が終了したら同じエクセルファイル内のボタン一つで報告がすぐできるとのことからこのような形をとりました。

・今回のVBAではこんなことができます

・エクセルシートから自動でメール送信(Outlook)ができます。

・こんな方におすすめです

・同じ内容のメールを毎回入力またはコピー貼り付けをしてメール(Outlook)本文を作成している方。

・エクセルで日報を作成していて、定期的にメール送信(Outlook)で報告している方。

・今回使用するコードの説明

①Dim 変数名① As New Outlook.Application
 インスタンスを生成します。
②Dim 変数名② As Outlook.MailItem
 Outlookのメールであることを表す変数。
③Set 変数名② = 変数名①.CreateItem(olMailItem)
 メールを生成
④変数名②.SendUsingAccount = Session.Accounts(“●●●@gmail.com”)
 差出人を指定します(自分のアドレス等)
⑤変数名②.To = Range(“宛先が入力されているセル”)
 宛先を指定します。
⑥変数名②.Subject = “メールの件名”
 件名を入力します。
⑦変数名②.Attachments.Add Source:=”フォルダ名\ファイル名.pdf”
 メールに添付したいファイルを指定します。
⑧変数名②.Body = “メール本文”
 メール本文を入力します。
⑨変数名②.BodyFormat = olFormatPlain
 メールの本文をプレーンテキスト形式として設定します。
⑩変数名②.Save
 送信(送信せずに下書きしたい場合は.Save、送信したいときは「Send」)

・事前の設定

Outlookを操作する事前の設定として参照設定を行います。
Excelタブの「開発」→「Visual Basic」→Visual Basicタブの「ツール」→「参照設定」→「Microsoft Outlook ×× Object Library」(××はインストールされているバージョンによって変わります)をチェックしOKをクリックし設定します。

・送信シートの説明(サンプル)

セルB1・・・報告先アドレス入力(宛先)
セルB2・・・報告者の名前(メール本文に入力される名前)
セルB2・・・報告者のメールアドレス(Outlookに設定されているアカウント)

・入力例①(在宅勤務開始ボタン)

Private Sub CommandButton1_Click()
    emailSend 1
End Sub

・入力例②(在宅勤務終了ボタン)

Private Sub CommandButton2_Click()
    emailSend 2
End Sub

・入力例(送信)

Sub emailSend(pNo As Integer)
    Dim myOutLook As New Outlook.Application
    Dim myEmail As Outlook.MailItem
    Dim sendEmail As String
    
    Select Case pNo
    '数字によって本文を変更する
        Case 1
            sendEmail = "在宅勤務を開始します。"
        Case 2
            sendEmail = "在宅勤務を終了します。"
    End Select
    
    Set myEmail = myOutLook.CreateItem(olMailItem)
    With myEmail
        '差出人
        .SendUsingAccount = Session.Accounts(CStr(Range("C2")))
        '宛先
        .To = Range("B1")
        '件名
        .Subject = "在宅勤務連絡"
        'メール本文
        .Body = Range("B2") & "です。" & vbCrLf & vbCrLf & sendEmail
        'プレーンテキスト形式設定
        .BodyFormat = olFormatPlain
        '送信(送信せずに下書きしたい場合は.Send → .Save)
        .Send
    End With
    Set myEmail = Nothing
    myOutLook.Quit: Set myOutLook = Nothing
    
End Sub

・まとめ

今回は在宅勤務の開始・終了報告を行うものではございましたが、工夫によっては他の固定形式でのメール報告をする場合にも利用できる機能のではないかと考えております。日々の業務で実は手間な作業だったりすることは、今までも同じやり方なので変えたくない等の理由で、どうしてもそのままになっていることが多いと思いますが、そのままにしないで解決方法を調べてみたり、内容を見直してみたりと問題を意識することは決して無駄なことではないと私は思っております※あくまで個人の感想です。
この記事は私の実体験をもとに書いております。VBAを使いエクセルの自動化をすることで同じことの繰り返し作業やケアレスミスを減らすことができると思います。また、視点を変えて違うことへの利用を検討したり、この記事を通して新しいアイディアが生まれたり、VBAに興味を持っていただけたら幸いです。
ここまでご覧いただき、誠にありがとうございます。

ご注意

・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
 Excel2021、2019、2016

コメント