Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

Excelファイルの更新をメールで通知する方法【業務自動化】

      2020/12/21

ファイルを複数人で共有している時など、更新時にメンバーへ連絡することがルール化されている場合があります。

毎回、口頭や手動でメールで連絡していると、連絡漏れや連絡が遅れることが発生する可能性があります。

この記事では、VBAでメール送信機能を作成し、メール通知を自動化する方法を記載します。

メール通知の自動化は、Excel以外にもWordやAccessなどVBAが使えるOfficeソフトであれば、汎用的に使用できますので、業務の効率化を図ることができます。

Outlookの設定

メール送信機能は、VBAからMicrosoft Outlookの機能を使ってメールを送信します。

事前にMicrosoft Outlookにアカウント設定がされていること、メールが送受信ができることを確認してください。

すでにMicrosoft Outlookを使われている方は、再設定する必要はありません。

サンプルファイル

メール送信機能を実装したサンプルファイルをリンクしますので、ご自由にお使いください。

設定シートの項目にメールアドレスなどを入力することでメール通知を行うことができます。

参照設定の追加

ここからは、メール送信機能を自身で作成する方法を記載します。

VBAからMicrosoft Outlookの機能を使用するために「Microsoft Outlook 16.0 Object Library」の参照設定を追加します。

メール送信機能コード

VBAのコードを記載します。

Option Explicit

'設定シート情報
Private Const SETTING_SHEET_NAME As String = "設定シート"
Private Const RANGE_TO As String = "B3"
Private Const RANGE_CC As String = "B4"
Private Const RANGE_BCC As String = "B5"
Private Const RANGE_SUBJECT As String = "B6"
Private Const RANGE_BODY As String = "B7"

'送信ボタン押下時の処理
Public Sub SendBtnClicck()
    Dim wsSetting As Worksheet
    Set wsSetting = ThisWorkbook.Sheets(SETTING_SHEET_NAME)
    
    If wsSetting.OLEObjects("OptBtnSend").Object.Value Then
        Call SendEmail
    End If
    
End Sub

'ファイル保存時の処理
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    Dim wsSetting As Worksheet
    Set wsSetting = ThisWorkbook.Sheets(SETTING_SHEET_NAME)
    
    If wsSetting.OLEObjects("OptBtnSave").Object.Value Then
        Call SendEmail
    End If
    
End Sub


'メール送信の処理
Private Sub SendEmail()
On Error GoTo ErrorHandler

    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Dim wsSetting As Worksheet

    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    Set wsSetting = ThisWorkbook.Sheets(SETTING_SHEET_NAME)

    '設定シートの値を設定する
    With wsSetting
        objMail.TO = .Range(RANGE_TO).Value             'TO
        objMail.CC = .Range(RANGE_CC).Value             'CC
        objMail.BCC = .Range(RANGE_BCC).Value           'BCC
        objMail.Subject = .Range(RANGE_SUBJECT).Value   '件名
        objMail.Body = .Range(RANGE_BODY).Value         '本文
        'メールの形式
        If wsSetting.OLEObjects("OptBtnHTML").Object.Value Then
            objMail.BodyFormat = olFormatHTML
        End If
        If wsSetting.OLEObjects("OptBtnPlain").Object.Value Then
            objMail.BodyFormat = olFormatPlain
        End If
    End With
    
    'メール送信
    objMail.Send

    GoTo Finally

ErrorHandler:
    MsgBox "メールの送信に失敗しました", vbOKOnly + vbCritical


Finally:
    Set objOutlook = Nothing

End Sub

Google AdSense PC

Google AdSense PC

  関連記事

microsoft
[Windows]指定サイズのファイルを作成する

ネットワークの通信速度などを調査する場合にサイズの大きなファイルを作成する必要があります。 この記事では「fsutil」コマンドを使用したダミーファイルの作成方 …

microsoft
[Windows]リモートデスクトップのシングルサインオン

ドメイン参加PCでシングルサインオンする Active Directoryのドメインに所属した場合、既定の設定のままでは、資格情報が使用できないため、 リモート …

microsoft
[Windows]WSUSサーバの構築手順 2/6

Windows 2008 R2サーバにWSUSサーバを構築する Report Viewerのインストール Microsoftのサイトより[Microsoft R …

microsoft
エクセルで円と銭の通貨単位を表示する

Excelで入力した数値に円と銭の単位を表示する方法を記載します。 2種類の表示方法がありますので、用途に応じて使い分けてください。 セルの書式設定で表示 セル …

microsoft
VBAで形式を指定して日付を取得する

VBAで西暦や和暦の日付形式に変換するには「FORMAT」関数に引数を指定することで意図した日付形式に変換することができます。 日付を表示 Date関数で今日の …

microsoft
[Windows]WSUSサーバの構築手順 5/6

Windows 2008 R2サーバにWSUSサーバを構築する WSUS(Windows Server Update Service)の設定 [スタート]-[す …

microsoft
既存パソコンを有効活用した、Windows 10への移行方法を考える

企業や個人用など数多くのパソコンで稼働しているOS、Windows 7のサポート期間が2020年1月14日に終了します。 サポート期間終了に向けてWindows …

microsoft
[Windows]Active ReportsでPDF出力時の注意事項

PDF出力時の「LicenseException」対応方法 環境 ActiveReports for .NET 7.0J 言語:C# 設定 Active Rep …

microsoft
Windows標準機能を使ってフォルダの作成を自動化する方法

バッチファイルとタスクスケジューラでフォルダの作成を自動化する方法を記載します。 この記事の例では、毎月1日になると指定した場所に年月のフォルダを作成します。 …

microsoft
Emotetの感染チェックツール「EmoCheck」を定期的に自動実行する方法

Emotetの感染チェックツールEmoCheckをドメイン環境下のパソコンで定期的に自動実行する設定方法を記載します。 自動実行の概要 ① EmoCheckを起 …