【VBA】業務日報をExcelテンプレートからワンクリックで作成、メール送信する方法

仕事をする中で業務日報を作成し、メールで報告することはないでしょうか。

毎日の定型作業となる日報ですが、なるべく短時間でサクッと済ませたいですよね。

タカヒロ
タカヒロ
毎回、終業間際になって慌てて作成しています…

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

・毎回日報メールを新規作成するのは面倒なのでメールを自動作成したいがやり方がわからない。
・日報をテンプレート化して、最小限の入力にしたいがやり方がわからない。

ではないでしょうか。

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

今回は日報をより早くできる、
業務日報をExcelテンプレートからワンクリックで作成、メール送信する方法について
まとめます!



「日報」の目的と効率化するポイントについて

「日報」の目的は、上司が部下の行動や問題点を把握するためですね。

さらに、最近ではリモートワークの推進で、上司が部下を把握しにくい状況になってきていますので、

より詳細な内容を数多く求める傾向があるといわれています。

一方で「日報」を作成する側にとっては、振り返りができるという点ではよいのですが、負担に感じている方も多いのではないでしょうか。

さらに上司からのフィードバックを得られることがなく、形式だけになっている場合は

不毛な作業として感じることもあるでしょう。

そんな状況下で効率化を考えた時に、いちばん簡単な方法は日報をなくすということですが、

会社側の指示ですので、そうはいきませんよね。

ではどうすればよいかというと、各作業工程を省力化するという方法しかありません。

そのためにまずは、

日報の作成から報告までの一連のプロセスをVBA(マクロ)によって自動化する

ということを行っていきます。

さらに、

一定期間の報告内容をパターン化して用意しておく

という方法もお伝えし、

手入力を大幅に減らしていきたいと思います。

では早速VBA(マクロ)からいってみましょう!



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

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

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

日報を例にメールテンプレート及びデータを組み立てていきたいと思います。

具体的には、

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

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

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

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

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

 



エクセルから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セルからペーストしてください。

——–ここから——-
■タイトル
【日報】<Tag1>:A部タカヒロ

■本文記載範囲
A8:A27

■本文
本日の業務内容について以下の通り報告いたします。

報告日:
<Tag1>

業務内容:
<Tag2>

課題・問題点:
<Tag3>

明日の予定:
<Tag4>

所感:<Tag5>

以上/A部タカヒロ
——–ここまで——-

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

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

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

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



VBAを実行する

メールを作成・表示する

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

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

メールを送信する

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

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

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

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

 



週次や月次などで繰り返される定期的な作業をパターン化し報告内容として用意しておく

週次や月次などで繰り返される定期的な作業をパターン化して、

報告内容として事前に用意しましょう。

例えば定例会議や、定型作業、日報や週報など報告書作成が該当するかと思いますが、

毎日、毎週で決まって行うことを洗い出して、

以下のように一週間分まとめていきます。

そうすると、毎日新規で業務内容を記載する必要がなくなり、

過不足分を埋めるだけで済むという訳です。

次に、日付の記載箇所を1週間分自動計算されるよう作成しましょう。

月曜日となる日付を2行目に入力します。

ちなみに曜日つきの書式は以下の通りです。

yyyy”年”m”月”d”日”(aaa)

曜日が表示されない方は、こちらの書式を適用してみてください。

次に、火曜日以降は以下の数式をセルに入力します。

=G2+DAY(1)

続いて、金曜日の行となる6行目までドラッグします。

できましたでしょうか。

日付を入れるのは意外と面倒ですし、入力ミスをする箇所でもあるので、

日付を自動計算させるだけでも手間が軽減されることと思います。

試しに月曜日の日報メールを作成してみましょう。

A2を「表示」に変え、A3以降は空欄にします。

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

ハイ、メールが作成されましたね。

同じ要領で、火曜日でればA3を「表示」、
水曜日であればA4を「表示」にして操作をしていくという形となります。

タカヒロ
タカヒロ
A列に「送信」とする場合は、メールが即送信されてしまいますので、「表示」設定にし、
メールの内容を確認した上で送信することをお勧めします。



さいごに

いかがでしょうか。

今回は、
【VBA】業務日報をExcelテンプレートからワンクリックで作成、メール送信する方法について
まとめました。

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

2 件のコメント

  • よく参考にさせていただいてます
    かなり同じ状態で作成しているつもりなのですが
    どうしても<Tag>の部分がメール本文に入りません
    何か設定があるのでしょうか ここがネックで
    なかなか進みません よろしければご教授いただければ思います

    • いつもご利用ありがとうございます。

      タグにつきまして、こちらページの仕様によりうまく表示がされていないようで大変失礼いたしました。

      カギカッコは半角で、その中身をTag1~Tag5まで割り当てて頂ければと存じます。
      以下サンプルです。

      ■タイトル
      【日報】<Tag1>:A部タカヒロ

      ■本文記載範囲
      A8:A27

      ■本文
      本日の業務内容について以下の通り報告いたします。

      報告日:
      <Tag1>

      業務内容:
      <Tag2>

      課題・問題点:
      <Tag3>

      明日の予定:
      <Tag4>

      所感:<Tag5>

      本文のほうもカギカッコが表示されるよう修正をいたしました。

      VBAとテンプレートサンプルともに再度ご参照頂きたくお願いいたします。

      よろしくお願いいたします。

  • コメントを残す

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