この記事でわかること
- Outlookでメールの件名や本文に日付を自動挿入する方法がわかる。
- すぐにコピペで使えるVBA コードがわかる。
メールに日付を自動挿入したい!
メールの件名や表題に今日の日付を挿入する機会は多いですよね?(上の図の赤枠部分)
はい。日報報告メールとか請求書メールとかでよく見る気がします。手入力だと面倒だし、うっかり誤った日付を入力してしまうミスもありますね!
ということで、これもOutlook VBAで自動化してみたいと思います。
Outlookで日付を自動挿入する方法は2つあります。
ここは段落ブロックです。文章をここに入力してください。
- Outlookの「日付と時刻」機能を使う方法
- Outlook VBA マクロで自動で置換・挿入する方法
マクロで挿入する方が時短です。
日付と時刻の挿入よりも、Outlookマクロの方が早いのでおすすめです!
例えば、メールテンプレートを開いてそこに自動挿入する場合、「日付と時刻の挿入」機能は5~6クリック程度必要ですが、Outlook VBAであればメールテンプレートを開くと同時に自動挿入できるので2クリック程度で済みます。
Outlookの「日付と時刻」の挿入機能の使い方
日付と時刻の挿入方法
- 新規メールあるいはメールテンプレートを開く
- 挿入メニューをクリック
- テキストセクションのところにある「日付と時刻」をクリック
- 和暦か西暦をクリックして選択する
- 使用したい表示形式をクリックする。
- OKボタンをクリックする。
以上が「日付と時刻」機能です。結構クリックすべき項目がありますね。
Outlook マクロならこのクリック作業を一撃で実装できます。
マクロを作成する
まずは.oft形式のメールテンプレートを用意します。メールテンプレートを使えば形式がある程度きまったメールの作成を時短できます。
株式会社Contoso 山田 様 いつもお世話になっております。 株式会社てじらぼのじょじおです。 今月分の注文書を送付させていただきます。 宜しくお願い致します
▲今回は上記のような本文にしました。HTML形式のメールとして保存します。
▲メールテンプレートの作成方法がわからない方は上の記事の解説をご覧ください。
Sub Insert_Date1() '''件名と本文に今日の日付を挿入します。 ''' ''' '■2.今日の日付をFormat関数でフォーマットします。 Dim today As String Dim year_and_month As String today = Format(Date, "(yyyy/mm/dd)") 'today = Format(Date, "yyyy-mm-dd") year_and_month = Format(Date, "yyyy年mm月") '■3.メールテンプレートを呼び出す処理 Dim objItem As MailItem '下記にメールテンプレートのパスを入力してね。 Set objItem = Application.CreateItemFromTemplate("C:\Users\user\AppData\Roaming\Microsoft\Templates\注文書の送付.oft") '■4.件名と本文にフォーマットした日付文字列を置換します。 objItem.Subject = objItem.Subject & today objItem.HTMLBody = Replace(objItem.HTMLBody, "今月", year_and_month) 'objItem.HTMLBody = Replace(objItem.HTMLBody, "今月分", today) objItem.Display '添付ファイル付けたあとにメールテンプレートを表示します。 'objItem.Send '送信も自動化する場合はこの行のコメントアウトを外してください。ただし送信ボタンは人間が押すことをおススメします。 End Sub
▲ショートカットキーAlt+F11を押下してVBEを開きます。VBEの標準モジュールに上記のマクロをコピペします。
▲Outlookマクロを一度を使ったことがない場合、Outlookの設定が必要になる可能性があります。Outlookマクロを使用するための初期設定については上の記事をご覧ください。
ショートカットキーCtrl+Sを押下してマクロを保存してVBEを閉じます。
Outlookマクロを実行する。
ショートカットキーAlt+F8を押下してマクロ一覧を表示します。
▲コピペしたマクロを実行します。
▲日付が自動挿入されたメールが開きますので、内容を確認し必要があれば編集して送信ボタンを押して送信します。
Outlookマクロのポイント解説!
今日の日付を取得する
today = Format(Date, "(yyyy/mm/dd)") year_and_month = Format(Date, "yyyy年mm月")
Format関数の記述例 | 実行結果 |
---|---|
Format(Date, “yyyy/mm/dd”) | 2022/03/17 |
Format(Date, “yyyymmdd”) | 20220317 |
Format(Date, “(yyyy/mm/dd)”) | (2022/03/17) |
Format(Date, “yyyy-mm-dd”) | 2022-03-17 |
Format(Date, “yyyy年mm月”) | 2022年03月 |
format(date , “yyyy年”) | 2022年 |
メール件名に日付を挿入する
objItem.Subject = objItem.Subject & today
▲objItem.Subjectは、メールテンプレートにもともと記入されていた件名が入ってます。今回の例でいうと「注文書の送付」という文字列です。それにFormat関数で整形した日付を&を使って合体してます。
メール本文に日付を挿入する
objItem.HTMLBody = Replace(objItem.HTMLBody, "今月", year_and_month)
▲メールテンプレート本文中に記載されている「今月」を実際の日付に変換するためにreplace関数を使っています。Replace関数の公式は下記です。
今回の例では、Replace(objItem.HTMLBody, "今月", year_and_month)
というように使ってます。objItem.HTMLBodyは、もともとメールテンプレートに記入されている文字列です。その中から「今月」という文字列を探し出して今日の日付に置換しています。置換した文字列をobjItem.HTMLBodyに戻しています。
ファイルの添付も同時に行いたい!
マクロ実行時にファイルの添付を行い為のコードもあわせて紹介します。このコードはOutlookに参照設定(Excel Object)が必要です。
▲OutlookでExcelの参照設定を行います。方法は上の記事で解説しています。言葉で聞くと面倒そうですがやることはとっても簡単な作業です。
Sub Insert_Date2() '''件名と本文に今日の日付を挿入します。 '''ファイル添付ありバージョン ''' '■1.Excelを呼び出す処理(ファイルダイアログを呼び出すため) Dim excelObject As Excel.Application Set excelObject = New Excel.Application excelObject.Visible = False 'Excelは非表示にする '■2.今日の日付をFormat関数でフォーマットします。 Dim today As String Dim year_and_month As String today = Format(Date, "(yyyy/mm/dd)") 'today = Format(Date, "yyyy-mm-dd") year_and_month = Format(Date, "yyyy年mm月") '■3.メールテンプレートを呼び出す処理 Dim objItem As MailItem '下記にメールテンプレートのパスを入力してね。 Set objItem = Application.CreateItemFromTemplate("C:\Users\user\AppData\Roaming\Microsoft\Templates\注文書の送付.oft") '■4.件名と本文にフォーマットした日付文字列を置換します。 objItem.Subject = objItem.Subject & today objItem.HTMLBody = Replace(objItem.HTMLBody, "今月", year_and_month) 'objItem.HTMLBody = Replace(objItem.HTMLBody, "今月分", today) '■5.ファイルダイアログを設定して表示する処理 Dim fdFolder As Office.FileDialog Set fdFolder = excelObject.Application.FileDialog(msoFileDialogFilePicker) With fdFolder .InitialFileName = "%userprofile%\" '一番最初に開くフォルダのパスを記述します。 .AllowMultiSelect = True '複数ファイルの選択を許可する場合はTrue・しない場合はFalse .Title = "メールに添付するファイルを選択してください(複数選択可)。" '選択できるファイルを制限するには下記のようにフィルターを追加してください。 ' .Filters.Add "Excels", "*.xls* ", 1 ' .Filters.Add "Images", "*.png; *.jpg; *.jpeg", 2 ' .Filters.Add "Documents", "*.doc*; *.pdf; *.txt ", 3 ' .Filters.Add "csv", "*.csv", 4 ' .Filters.Add "any", "*.*", 5 ' .FilterIndex = 1 'デフォルトのフィルターをindexで指定します。 .Show 'ファイルダイアログを表示します。 End With '■6.選択されたファイルをメールテンプレートに1個ずつ添付する Dim SelectedItem For Each SelectedItem In fdFolder.SelectedItems objItem.Attachments.Add SelectedItem Next objItem.Display '添付ファイル付けたあとにメールテンプレートを表示します。 'objItem.Send '送信も自動化する場合はこの行のコメントアウトを外してください。ただし送信ボタンは人間が押すことをおススメします。 Set excelObject = Nothing End Sub
▲標準モジュールにコピペして保存します。
まとめ
この記事ではOutlook マクロでメールに今日の日付を挿入する方法について紹介しました。
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。