Excel VBA

【Outlook操作】エクセルVBAで業務報告メール作成する方法を紹介

テレワークが多くなっている中で業務報告をしなければいけない方もいらっしゃると思います。

勤怠アプリを使っている会社もありますが、Outlookで業務報告メールを送っている会社もあると思います。

業務開始・終了時にメールを送るだけとはいえ、毎日送るのは結構めんどうです。

そこで今回は、業務報告メールを簡単に作成するエクセルVBA(マクロ)を紹介したいと思います。
マネをするだけで、出社・退社時の貴重な時間を少し削減できるかもしれません。

業務報告メール作成はめんどう

業務の予定や進捗状況を共有する「業務報告メール」

テレワークだと、進捗状況の管理ができて便利です。

とはいえ、業務開始・終了の際にメールを送る作業は時間がかかります。
(5~10分ほどかかってしまう印象です)

(朝型の人にとっては)集中できる朝の貴重な時間を使ってしまうので、できればすぐに終わらせないと業務効率が落ちてしまいます。

業務時間を圧迫

業務報告メール作成で一日あたり10分かかっていたとすると、一カ月200分(3時間20分)費やしていることに・・
※10分 × 20日(月~金×4週間)= 200分

思いのほか、ロスが大きいです。


手作業だと工数が多い

業務報告メールを手作業で送っている場合、意外とやる事が多いです。

手作業で業務報告メールを作ると・・・

  • エクセルで報告内容を作成
  • Outlookの送信済みトレーから、昨日送ったメールをコピー
  • 件名(日付など)を変えて、前日の報告表を消す
  • エクセルで作成した報告内容を貼り付け
  • メールの内容を確認後送信

この作業を毎日行っているとなると大変です。
特に、業務がたくさん溜まっている時は焦って作成して間違えてしまうかもしれません。

送信済みメールのコピーは注意

少しでも時短をするために、昨日送ったメールを再利用すると「昨日の日付」でメールを送ってしまうおそれがあります。
うっかり間違えたメールを送ってしまうと、再送の必要があり・・・さらに時間がかかってしまいます。


このプログラムで解決

めんどうな業務報告メールですが、エクセルVBAでかなりラクにできます。

エクセルVBAのプログラムを今まで一度も作ったことがない方は、環境設定が必要かもしれません。
こちらの記事で紹介していますので設定をしてみてください。(5分くらいでできると思います)

こちらもCHECK

【お手軽】エクセルVBAの開発環境の作り方を紹介

仕事でエクセルを使う方は多いと思います。 毎日使っていると「作業を自動化するプログラムができたらいいな」と感じている方もいらっしゃるかもしれません。 エクセルVBAを始めるためには「プログラムを開発す ...

続きを見る



エクセルファイルの準備

エクセルファイルの準備をします。

準備

  • マクロ有効ブックを保存
  • 【Alt + F11】を押して、VBAエディタを開く。
  • 【ツール】→【参照設定】を選択
  • 【参照設定】より必要なライブラリにチェックを入れる。


VBAエディタを開いたら【参照設定】を選択する。

参照設定を開いたら、このライブラリにチェックを入れる。


エクセルのテンプレを作成

次にエクセルのテンプレートを準備します。

やること

  • シートは2つ用意する。(業務管理表とメール設定用)
  • 業務管理表のデザインを作成
  • メール設定用のデザインを作成


業務報告用シートのデザインはお好みで変更してしまって大丈夫です。


プログラムで「C列にフィルタをかけて、空白セル以外のセルを表示」する工程があります。


そのため、このデザイン・プログラムをそのまま使う場合は、C列には余分な予定を入力しないようにしてください。


※フィルタを掛けるセルを変えれば調整可能です。

業務管理用のシートデザイン


メール設定用デザイン


メール設定用デザインについて

このデザイン・プログラムをそのまま使う場合はメール設定用デザインのセル位置を変えないようにしてください。

  • B2セルには宛先(To)を入力
    ※複数人に送る場合はアドレスの間にセミコロン【;】を入れて入力する。
  • B3セルにはCCを入力
    ※複数の場合は宛先と同様にセミコロンを付ける。
  • B4、B5はメール文章を入力する。(業務開始文章)
    ※文章を増やす場合は、B6、B7・・と増やすこともできる。
  • C4、C5もメール文章(業務終了文章)
    ※文章を増やす場合は、C6、C7・・・と増やすこともできる。

※セルの位置を変更・追加する場合は、プログラムを変更する必要があります。


コードを書く

エクセルVBAのコードを書いていきます。

先ほどのエクセルシートのレイアウトをそのまま使う場合は、このコードをコピペすれば完成です。

Sub 業務開始()
  'Outlookインスタンスを生成
  Dim myOlapp As New Outlook.Application
  Dim myMail As Outlook.mailitem
  Set myMail = myOlapp.createitem(olmailitem)
  
  
  '件名に使う今日の日付を取得(変数に入れる)
  Dim tuki As Variant
  Dim hi As Variant
  tuki = Month(Now)
  hi = Day(Now)
  
  
  '業務予定表(作成した表をメール本文に貼り付け)
    
    '表の空白行を非表示にする(オートフィルタ)
    Sheet1.Range("C2").AutoFilter field:=2, Criteria1:="<>"
    'フィルタをかけた後の表をコピー
    Sheet1.Range("C2").CurrentRegion.Copy
    
  
  'メールの詳細
  With myMail
    .to = Sheet2.Range("B2").Value
    .cc = Sheet2.Range("B3").Value
    
    '件名
    .Subject = tuki & "月" & hi & "日の予定"
    
    '本文
    With .getinspector.wordeditor.Windows(1).Selection
      .typetext Sheet2.Range("B4").Value & vbCrLf
      .Paste vbCrLf 'ここでコピーした表を貼り付け
      .typetext Sheet2.Range("B5").Value
    End With
    
    
    'メールを表示させる
    .display
    
    'メールの形式をHTMLにする。
    .bodyformat = olformathtml  
  End With
  
  'オートフィルター解除
  Sheet1.Range("C2").AutoFilter
End Sub

業務終了の文章も作成したい場合は、上記コードの下にこちらのコードを貼り付けます。

Sub 業務終了()

  'Outlookインスタンスを作成
  Dim myOlapp As New Outlook.Application
  Dim myMail As Outlook.mailitem
  Set myMail = myOlapp.createitem(olmailitem)
  
  
  '件名に使う今日の日付を取得(変数に入れる)
  Dim tuki As Variant
  Dim hi As Variant
  tuki = Month(Now)
  hi = Day(Now)
  
  
  '業務予定表(作成した表をメール本文に貼り付け)
    
    '表の空白行を非表示にする(オートフィルタ)
    Sheet1.Range("C2").AutoFilter field:=2, Criteria1:="<>"

    'フィルタをかけた後の表をコピー
    Sheet1.Range("C2").CurrentRegion.Copy
    
  
  'メールの詳細
  With myMail
    '宛先
    .to = Sheet2.Range("B2").Value
    
    'cc
    .cc = Sheet2.Range("B3").Value
    
    '件名
    .Subject = tuki & "月" & hi & "日業務終了"
    
    '本文
    With .getinspector.wordeditor.Windows(1).Selection
      .typetext Sheet2.Range("C4").Value & vbCrLf
      .Paste vbCrLf 'ここでコピーした表を貼り付け
      .typetext Sheet2.Range("C5").Value
    End With
    
    
    'メールを表示させる
    .display
    
    'メールの形式をHTMLにする。
    .bodyformat = olformathtml
    
  End With
  
  'オートフィルター解除
  Sheet1.Range("C2").AutoFilter
  
End Sub


プログラム実行時の注意点

上記プログラムを実行する時には、Outlookを起動した状態で行ってください。
Outlookを起動しないでプログラムを動かそうとするとエラーが発生してしまいます。


コードの解説

かんたんにですが、コードの解説をします。

最初のコードから
このコードは決まったコード(インスタンスの生成など)なので、そのまま使ってしまって大丈夫です。

  Dim myOlapp As New Outlook.Application
  Dim myMail As Outlook.mailitem
  Set myMail = myOlapp.createitem(olmailitem)

次のコードは、今日の日付を変数に代入しています。

  Dim tuki As Variant・・tukiという変数を作成
  Dim hi As Variant ・・hiという変数を作成
  tuki = Month(Now)・・・現在の【月】をtukiという変数に代入
  hi = Day(Now)  ・・・現在の【日】をhiという変数に代入


ポイント

2022/1/10の場合

  • tukiという変数には【1】
  • hiという変数には【10】

がそれぞれ入ります。

業務予定表を操作するコードです。

Sheet1.Range("C2").AutoFilter field:=2, Criteria1:="<>" ・・・シート1のC2セルで空白セル以外を絞り込む
Sheet1.Range("C2").CurrentRegion.Copy ・・・C2でCurrentRegionで範囲選択した部分をコピーする。


CurrentRegionについて

エクセルの操作でいうと、C2セルで【Ctrl + A】を押したようなイメージです。



この後のコードはメールを作成するためのコードです。
指定しているセルを変更することでアレンジができます。

  With myMail
    .to = Sheet2.Range("B2").Value ・・・シート2のB2セルの値を宛先にする。
    .cc = Sheet2.Range("B3").Value ・・・シート2のB3セルの値をCCにする。
    
    '件名
    .Subject = tuki & "月" & hi & "日の予定"・・・今日の日付を件名にする。
    
    '本文
    With .getinspector.wordeditor.Windows(1).Selection
      .typetext Sheet2.Range("B4").Value & vbCrLf ・・・シート2のB4セルの値をメール本文に入れる
      .Paste vbCrLf 'ここでコピーした表を貼り付け   ・・・シート1の業務予定表を貼り付け
      .typetext Sheet2.Range("B5").Value      ・・・シート2のB5セルの値をメール本文に入れる
    End With
    
    
    'メールを表示させる
    .display ・・・作成したメールを表示する(内容の確認のため、自動送信はしない)
    
    'メールの形式をHTMLにする。
    .bodyformat = olformathtml  ・・・HTML形式のメールにする。
  End With


ポイント

本文(With~End Withの間のコード)は上から順にメール文章を入力していく内容です。
エクセルテンプレートのセルを増やしたい場合には対応するセルを指定するコードを一行追加することで、メール文章をアレンジできます。

vbCrLfは何?

vbCrlfは、エクセルVBAで【改行】を指示するためのコードです。
メール文章の間に余白が欲しい場合に使用すると便利です。


動作イメージ

プログラムを実行した時の、メール完成イメージを紹介します。
(完成したプログラムを動かしたときの結果イメージです)

業務開始プログラム実行時


業務終了プログラム実行時


件名に今日の日付が入るうえ、業務予定表も挿入されています。
ここまでできると、エクセルの業務管理表に入力して【プログラムを実行」するだけでメールが完成します。



注意

作成したプログラム実行の際は「Outlook」を起動しておく必要があります。

業務終了メールの件名を変更したい場合は、別にセルを設定(プログラムのセル座標の変更も必要)することでアレンジできます。


業務改善は身近で簡単なところから

業務改善というと「何から手を付ければいいか分からない・・」というイメージですが、身近なところから始めると効果を実感できます。

例えば、今回紹介した「業務報告メール」のプログラムもちょっとした業務改善だと思います。
(一日10分かかっていたら、一カ月で200分かかっている計算です)

ここで削減できた業務時間を使って、他の業務改善を行う・・・この流れができると、さらに仕事がラクになっていきます。
(あるいは、その分早く仕事を切り上げて、自分のための時間にも充てられます)

あとがき

今回は、業務報告メール作成プログラムの作り方を紹介しました。

毎日送る業務報告メールの時間を削減することは、貴重な時間を生み出すことにつながります。

自分だけの業務なので、効率化がしやすく、管理もしやすいです。

Outlookで業務報告メールを作っている方はオススメの方法です。


このプログラムを使って「エクセルVBAってすごい!!」と思ったら、これをきっかけにVBAの学習をしてみてもいいかもしれません。
最近はオンラインで学べるレッスンサービスも出てきました。

数カ月でプログラムが作れるようになるので、自己投資としてもオススメです。
レッスンサイトはこちらでも紹介しています。

こちらもCHECK

Excel vbaを学びたいなら。レッスンサイトを紹介

「AIが仕事を奪う」などのニュースを聞くようになりました。単純作業はプログラムが得意とする分野なので、事務作業もAIが行う時代も遠くないかもしれません。 普段事務作業をしている方からすると「めんどうな ...

続きを見る

-Excel VBA
-, , , ,