【VBA】障害・復旧メールをExcelテンプレートからワンクリックで作成、送信する方法

運用業務においてトラブルや事故など障害が発生した場合、メールにて関係者へ報告する機会はないでしょうか。

けど、そんな中で悩むことは、

・宛先を手入力するのは面倒だし、間違えてしまう可能性がある。
・毎回障害メールを新規作成するのは面倒なのでメール作成作業を自動化したいけどやり方がわからない。
・障害報告メールをテンプレート化したいがやり方がわからない。

ですよね。

突然発生したものをすばやく対応しなければならない状況ですので、
少しでも効率的に行いたい気持ちはすごくわかります。

そんなときにオススメしたい方法はExcelとVBAを利用してメールを作成、送信する方法です。
Excelへ用意したテンプレートと宛先リストを組み合わせて、障害報告メールがカンタンに作れるのです。

今回は障害報告メールをより早く、正確にできる、
【VBA】Excelから障害・復旧メールをワンクリックで送る方法について
まとめます!



最近のシステム障害要因について

最近の業務関連システムの環境は、これまでサーバーを所有し、自前でシステムを組むやり方から
クラウドサービスを利用するというやり方へ変わってきました。

そんな中で運用者を悩ませることは、外部サービスが利用できない場合の
影響範囲の特定と障害報告先を決めることがが難しいということが挙げられます。

たとえばMicrosoftのサービスであるAzureに障害が発生した場合、サーバーがダウンしたり、
データーベースへアクセスできなかったり、認証ができなかったりします。

そうすると、その環境に載っているシステムは軒並み大きな影響を喰らうことととなりますが、
運用者側がすべてのシステムのことを把握しているわけではないので、判断に時間がかかり、対応が遅れたりしがちです。

これを改善するためにはどうすればよいか、ということですが、

一つは障害発生パターンと対応、そして利用者を含めた連絡先を事前にシステムオーナー側と決めることが重要だと考えます。

外部サービスの障害発生都度、運用担当者が判断するのではなく、事前に取り決めたシナリオに沿って機械的に対応するのです。

今回ご説明する、Excelのメールテンプレートと宛先リスト、VBAによるメール作成、送信はそんな改善策の内の一つとして用意したものです。

まだ手動で障害報告を作成していたり、宛先を都度入力したり、前障害報告を流用していたりする場合はきっと役に立てるものと思っています。



エクセルからOutlookのメールを作成・送信する機能ついて

前回、「【VBA】Excelから複数・多種類のOutlookのメールを作成・送信する方法」にてVBAにてExcelの表データおよびテンプレートからOutlookメールを作成する方法について勤怠管理の書届をサンプルに説明をしました。

今回は、同じVBAを利用し、

システム障害・復旧報告を例にメールテンプレート及びデータを組み立てていきたいと思います。

具体的には、

以下のようにExcelのデータシートへ障害情報を記載していきます。

続いて、障害報告のメールテンプレートとなるシートを追加し、以下のようにタグ付きで入力します。

入力が完了したら、メールを作成したい行のA列に「表示」、メールテンプレート名を入力した上、VBAを実行すると、

メールテンプレートに沿った形で障害報告メールが作成され、タグの部分は先ほどのデータシートの値に置換されます。

また、A列に「送信」とすることで、表示をせずに送信することができます。

システム別や障害パターン別など、障害メールテンプレートを複数設定したい場合は、メールテンプレートを追加し、データシートにテンプレート名と情報を追加するだけでOKです。

タカヒロ
タカヒロ
障害情報をキャッチアップしているシステムが複数ある場合は、システムが特定できるような識別子をつけたほうががよいでしょう。



エクセルからOutlookのメールを作成・送信する機能の処理の流れについて

今回の機能の処理は以下の通りExcelからOutlookを起動し、Outlookのメール作成、送信が行われる流れとなります。

Excelブック(VBA) → この内容でメールを作成してね → Outlook
Excelブック ← メールを作成したよ ← Outlook
Excelブック(VBA) → メールを送信してね → Outlook
Excelブック ← メールを送信したよ ← Outlook

では、早速実装をして動かしてみましょう!

タカヒロ
タカヒロ
ExcelからOutlookを起動して捜査しているんだなぐらいに思っておいてください。




VBAを実装する

続いてVBAを実装します。

VBAは前回、「【VBA】Excelから複数・多種類のOutlookのメールを作成・送信する方法」にて説明したものと同様となります。

Sub メール作成および送信()


    Dim objOutlookApp As Object
    Dim objMail As Object
    Dim Rng As Range
    Dim intintNum As Integer
    Dim strBody As String
    Dim strTag1 As String
    Dim strTag2 As String
    Dim strTag3 As String
    Dim strTag4 As String
    Dim strTag5 As String
    Dim strBr As String
    Dim strSubject As String
    Dim strSTname_Template As String
    strBr = vbLf '改行コード



    '「メール宛先・本文」シートのA列最終行まで処理を繰り返します。
    For intNum = 2 To Worksheets(1).Cells(1048576, 1).End(xlUp).Row + 1
    
        '「メール宛先・本文」シートのA列載せるに値があればメール作成・送信処理を継続します。
        If Worksheets(1).Cells(intNum, 1) <> "" Then

            'メールテンプレートを設定します。
            strSTname_Template = Worksheets(1).Range("B" & intNum).Value
        
            'メールテンプレートの指定が無い場合は警告表示および処理を中断します。
            If strSTname_Template = "" Then
                MsgBox "B" & intNum & "にタイトル・本文テンプレートシートを指定してください。"
                Exit Sub
            End If
        
            
            'Outlook.Applicationを呼び出し、セットします。
            Set objOutlookApp = CreateObject("Outlook.Application")
            Set objMail = objOutlookApp.CreateItem(olMailItem)
            
            
            'メール宛先・本文シート記載の値を変数に入れます。
            strTag1 = Worksheets(1).Range("G" & intNum).Text
            strTag2 = Worksheets(1).Range("H" & intNum).Text
            strTag3 = Worksheets(1).Range("I" & intNum).Text
            strTag4 = Worksheets(1).Range("J" & intNum).Text
            strTag5 = Worksheets(1).Range("K" & intNum).Text
        
            
            'テンプレートのメール本文の箇所を読み込み、変数に入れます。
            For Each Rng In Worksheets(strSTname_Template).Range(Worksheets(strSTname_Template).Range("A5").Value)
                strBody = strBody & Rng.Value & vbLf
            Next Rng
            
            'メール本文中のタグを指定データへ置換します。
            strBody = Replace(strBody, "<Tag1>", strTag1)
            strBody = Replace(strBody, "<Tag2>", strTag2)
            strBody = Replace(strBody, "<Tag3>", strTag3)
            strBody = Replace(strBody, "<Tag4>", strTag4)
            strBody = Replace(strBody, "<Tag5>", strTag5)
        
            
            With objMail
                .BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
                .To = Worksheets(1).Range("E" & intNum).Value
                .CC = Worksheets(1).Range("F" & intNum).Value
                
        
                '本文をBodyプロパティにセットします。
                .Body = Worksheets(1).Range("C" & intNum).Value & strBr & Worksheets(1).Range("D" & intNum).Value & strBr & strBr & strBody
        
                
                'テンプレートからタイトルを読み込みます。
                strSubject = Worksheets(strSTname_Template).Range("A2").Value
                
                'タグ部分を置換します。
                strSubject = Replace(strSubject, "<Tag1>", strTag1)
                strSubject = Replace(strSubject, "<Tag2>", strTag2)
                strSubject = Replace(strSubject, "<Tag3>", strTag3)
                strSubject = Replace(strSubject, "<Tag4>", strTag4)
                strSubject = Replace(strSubject, "<Tag5>", strTag5)
        
                .subject = strSubject
                
                
                
                Select Case Worksheets(1).Cells(intNum, 1)
                Case "表示"
                    'メールを表示します。
                    .Display
                Case "送信"
                    .Display
                    .Send
                Case Else
                    MsgBox "値が異なります。「表示」か「送信」を入力してください。"
                End Select
                
                
                
            End With
            'メール本文をクリアします。
            strBody = ""
        
        End If
        
    Next intNum

    MsgBox "メール作成・送信が完了しました。"
    
    Set objOutlookApp = Nothing
    Set objMail = Nothing

End Sub

設定が必要な箇所は特にないですが、メールフォーマットは標準はリッチテキスト形式ですので、
利用しているフォーマットと異なれば適宜変更するようお願いします。

「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3



障害報告のサンプルデータを用意する

障害報告の情報を入力するデータシートおよび障害報告メールのテンプレートとなるシートを用意しましょう。

①情報を入力するシートを作成し、シート名を「メール宛先・本文」へ変更します。
※このシートはブックの1番左の位置へ配置するようにお願いします。

②1行目に項目名を入力します。

Mail操作 本文テンプレート 部署名 氏名 To Cc Tag1 Tag2 Tag3 Tag4 Tag5

③2行目のC2~E2まで以下のように入力します。
各項目の値は業務内容に応じて変更していただいて構いません。

④メールテンプレートとなるシートを追加し、シート名を「障害報告テンプレ」へ変更します。

⑤以下をコピーし、A1セルからペーストしてください。
——–ここから——-
■タイトル
【障害連絡】Aシステム:<Tag1>:<Tag2>

■本文記載範囲
A8:A17

■本文
以下の通り障害が発生しましたことご報告いたします。

対象サービス:Aシステム
障害発生日時:<Tag1>
影響区分:<Tag2>
障害内容:<Tag3>
原因:<Tag4>
対応:<Tag5>

以上/システムサポート

——–ここまで——-

タカヒロ
タカヒロ
<Tag*>の部分がデータシートの同じ項目名の値へ置換がされるかたちとなります。

⑥「メール宛先・本文」シートへ戻り、A2に「表示」、B2に「障害報告テンプレ」と入力します。
A列に「表示」といれるとその行の値を参照し、メールが作成・表示されることを意味します。

A列に「送信」と入れるとその行の値からメールの作成および送信がされます。

タカヒロ
タカヒロ
これでデータの準備は完了です!



VBAを実行する

メールを作成・表示する

①「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。

②Outlookからメールが作成されたら完成です!

メールを送信する

①「メール宛先・本文」シートのA列を「送信」に変更します。

②「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。

④Outlookの送信トレイの蓄積、送信済みトレイに送信履歴があれば完成です!

タカヒロ
タカヒロ
「送信」指定の場合はメールが送付されますので、十分に検証をされてから実行をするようお願いします。

 



さいごに

いかがでしょうか。

今回は、
【VBA】Excelから障害・復旧メールをワンクリックで送る方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です