運用業務においてトラブルや事故など障害が発生した場合、メールにて関係者へ報告する機会はないでしょうか。
けど、そんな中で悩むことは、
・毎回障害メールを新規作成するのは面倒なのでメール作成作業を自動化したいけどやり方がわからない。
・障害報告メールをテンプレート化したいがやり方がわからない。
ですよね。
突然発生したものをすばやく対応しなければならない状況ですので、
少しでも効率的に行いたい気持ちはすごくわかります。
そんなときにオススメしたい方法はExcelとVBAを利用してメールを作成、送信する方法です。
Excelへ用意したテンプレートと宛先リストを組み合わせて、障害報告メールがカンタンに作れるのです。
今回は障害報告メールをより早く、正確にできる、
【VBA】Excelから障害・復旧メールをワンクリックで送る方法について
まとめます!
もくじ
最近のシステム障害要因について
最近の業務関連システムの環境は、これまでサーバーを所有し、自前でシステムを組むやり方から
クラウドサービスを利用するというやり方へ変わってきました。
そんな中で運用者を悩ませることは、外部サービスが利用できない場合の
影響範囲の特定と障害報告先を決めることがが難しいということが挙げられます。
たとえばMicrosoftのサービスであるAzureに障害が発生した場合、サーバーがダウンしたり、
データーベースへアクセスできなかったり、認証ができなかったりします。
そうすると、その環境に載っているシステムは軒並み大きな影響を喰らうことととなりますが、
運用者側がすべてのシステムのことを把握しているわけではないので、判断に時間がかかり、対応が遅れたりしがちです。
これを改善するためにはどうすればよいか、ということですが、
一つは障害発生パターンと対応、そして利用者を含めた連絡先を事前にシステムオーナー側と決めることが重要だと考えます。
外部サービスの障害発生都度、運用担当者が判断するのではなく、事前に取り決めたシナリオに沿って機械的に対応するのです。
今回ご説明する、Excelのメールテンプレートと宛先リスト、VBAによるメール作成、送信はそんな改善策の内の一つとして用意したものです。
まだ手動で障害報告を作成していたり、宛先を都度入力したり、前障害報告を流用していたりする場合はきっと役に立てるものと思っています。
ExcelからOutlookのメールを作成・送信する機能ついて
前回、「【VBA】Excelから複数・多種類のOutlookのメールを作成・送信する方法」にてVBAにてExcelの表データおよびテンプレートからOutlookメールを作成する方法について勤怠管理の書届をサンプルに説明をしました。
今回は、同じVBAを利用し、
システム障害・復旧報告を例にメールテンプレート及びデータを組み立てていきたいと思います。
具体的には、
以下のようにExcelのデータシートへ障害情報を記載していきます。
続いて、障害報告のメールテンプレートとなるシートを追加し、以下のようにタグ付きで入力します。
入力が完了したら、メールを作成したい行のA列に「表示」、メールテンプレート名を入力した上、VBAを実行すると、
メールテンプレートに沿った形で障害報告メールが作成され、タグの部分は先ほどのデータシートの値に置換されます。
また、A列に「送信」とすることで、表示をせずに送信することができます。
システム別や障害パターン別など、障害メールテンプレートを複数設定したい場合は、メールテンプレートを追加し、データシートにテンプレート名と情報を追加するだけでOKです。
ExcelからOutlookのメールを作成・送信する機能の処理の流れについて
今回の機能の処理は以下の通りExcelからOutlookを起動し、Outlookのメール作成、送信が行われる流れとなります。
①Excelブック(VBA) → この内容でメールを作成してね → Outlook
②Excelブック ← メールを作成したよ ← Outlook
③Excelブック(VBA) → メールを送信してね → 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>
以上/システムサポート
——–ここまで——-
⑥「メール宛先・本文」シートへ戻り、A2に「表示」、B2に「障害報告テンプレ」と入力します。
A列に「表示」といれるとその行の値を参照し、メールが作成・表示されることを意味します。
A列に「送信」と入れるとその行の値からメールの作成および送信がされます。
VBAを実行する
メールを作成・表示する
①「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。
②Outlookからメールが作成されたら完成です!
メールを送信する
①「メール宛先・本文」シートのA列を「送信」に変更します。
②「開発」タブの「マクロ」をクリックし「メール作成および送信」を選択し、「実行」をクリックします。
④Outlookの送信トレイの蓄積、送信済みトレイに送信履歴があれば完成です!
さいごに
いかがでしょうか。
今回は、
【VBA】Excelから障害・復旧メールをワンクリックで送る方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す