

この記事でわかること
- 添付するファイルの名前をメール本文に自動挿入する方法がわかる。
- コピペで使えるOutlook VBAコードがわかる。
添付ファイルの名前をメールの本文やタイトルに挿入する。

▲「添付ファイルを添付するときは、本文中に添付ファイル名を記入する」というルールで運用されているメールを見かけたことがあるでしょうか。
メールのマナーとしてやっていらっしゃる方もいるかもしれませんし、意図しない添付ファイルではありませんよーというセキュリティ対策の意味もあるかもしれません。わたしは以前勤めていた会社でこのルールが適用されていたシーンがありましたのでやっていました。
ただ、添付ファイル名をコピペして本文中に張り付けるのって意外に面倒ですよね。添付するファイルが複数あると余計うっとしいです。そこで、この作業をマクロで自動化する方法について紹介したいと思います。

マクロを使えばファイル添付を行うと同時に添付ファイル名を本文に自動挿入できます。
今回の作業内容

以下の内容で作業します。
今回作業する3つのステップ
- メールテンプレートを作成します。
- Outlook マクロを作成します。
- マクロをテスト実行して結果を確認します。
(STEP1)メールテンプレートを作成する。

メールテンプレートを作成します。

▲図のようなメールテンプレートを作成しました。作成したメールテンプレートは.oft形式で保存します。赤字の部分をマクロで文字列置換します。
メールテンプレートを作成する方法については下記の記事で解説していますのであわせてご覧ください。

株式会社Contoso 山田 様 いつもお世話になっております。 株式会社てじらぼのじょじおです。 今月分の注文書を送付させていただきます。 【添付内容】 ◆ここに添付ファイル名挿入◆ ご不明な点がございましたらお問い合わせください。 ご確認の程、宜しくお願い致します。
(STEP2)マクロを作成します。

次はVBAでマクロコードを記述します。
ショートカットキー:Alt+F11を押してVBEを開きます。「VBEって何?」という方や初めてOutlook VBAを使う方は下記の記事で解説で解説していますのでご覧ください。

Sub attached_file_name1() ''ファイルダイアログを表示して添付するファイルを要求して、 '''本文に添付ファイル名リストを挿入します。 ''' '■1.Excelを呼び出す処理(ファイルダイアログを呼び出すため) Dim excelObject As Excel.Application Set excelObject = New Excel.Application excelObject.Visible = False 'Excelは非表示にする '■2.メールテンプレートを呼び出す処理 Dim objItem As MailItem '下記にメールテンプレートのパスを入力してね。 Set objItem = Application.CreateItemFromTemplate("C:\Users\user\AppData\Roaming\Microsoft\Templates\注文書の送付2.oft") '■3.ファイルダイアログを設定して表示する処理 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 '■4.選択されたファイルをメールテンプレートに1個ずつ添付する Dim SelectedItem Dim str_attached_file_name As String For Each SelectedItem In fdFolder.SelectedItems objItem.Attachments.Add SelectedItem Next '■5.選択されたファイルをメールテンプレートに1個ずつ添付する Dim SelectedItem For Each SelectedItem In objItem.Attachments str_attached_file_name = str_attached_file_name & "<li>" & SelectedItem & "</li>" Next str_attached_file_name = "<ol>" & str_attached_file_name & "</ol>" objItem.HTMLBody = Replace(objItem.HTMLBody, "◆ここに添付ファイル名挿入◆", str_attached_file_name) Set excelObject = Nothing End Sub
▲標準モジュールに上記のコードを書きました。コピペで使えます。コードの解説は後述します。
コードをコピペしたらCtrl+Sで保存します。VBEは閉じて大丈夫です。
(STEP3)マクロの実行
マクロを実行してみましょう。Alt+F8でマクロ一覧を表示して先ほど作成したマクロ名を選択して実行ボタンをクリックします。
(この方法はOutlook画面からマクロを実行する方法です。VBEからマクロを実行する場合は実行ボタンを押します。)

▲先ほど作成した「attached_file_name1」というマクロを選択して実行します。

▲添付ファイルを選択します。複数選択する場合はCtrlキーを押しながら選択してください。

▲赤字の部分がテンプレートでは「◆ここに添付ファイル名挿入◆」と書かれていた部分が添付ファイル名のリストに置き換わりました。
(図の中でテキストが赤字になっているのは解説のためにわかりやすくテンプレートファイルの中で赤字にしています。マクロの処理でやっているわけではありません。)
問題がなければ通常のメールと同じように送信ボタンで送信します。もちろん本文に追記したり修正したりすることも可能です。
VBAのワンポイント解説
21行目から45行目はメールテンプレートにファイルを添付する処理です。こちらのコードについては下記で解説していますのでご覧ください。

'■5.選択されたファイルをメールテンプレートに1個ずつ添付する For Each SelectedItem In objItem.Attachments str_attached_file_name = str_attached_file_name & "<li>" & SelectedItem & "</li>" Next str_attached_file_name = "<ol>" & str_attached_file_name & "</ol>" objItem.HTMLBody = Replace(objItem.HTMLBody, "◆ここに添付ファイル名挿入◆", str_attached_file_name)
▲この部分で、HTMLのリストを作っています。HTMLでリストを表現するには<ol>タグの中に<li>タグを使って下記のように表現します。
<ol> <li>添付ファイル1</li> <li>添付ファイル2</li> <li>添付ファイル3</li> </ol>
▲HTMLリストの例
objItem.HTMLBody = Replace(objItem.HTMLBody, "◆ここに添付ファイル名挿入◆", str_attached_file_name)
この部分で作成したHTMLリストを、Replace関数を使って置換しています。
添付するファイルに制限をかけたい場合は?
添付するファイルをExcelだけ・PDFだけのように制限をかける方法や、ファイルの複数選択を拒否する方法は下記の記事で解説していますのでご覧ください。

メールタイトル(件名)に添付ファイル名を挿入したい
メールタイトルに添付ファイル名を挿入したい場合は、objItem.Subject = objItem.Subject & ”添付ファイル名”のようにobjitem.subjectに添付ファイル名を含んだ文字列を渡します。
まとめ

添付するファイルの名前をメール本文に自動挿入する方法について解説しました。

このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
▲情報も新しくMicrosoft 365にも対応した本です。わたしはOutlook歴10年以上ありますが知らないことがかなりあったのとOutlookもすごい進化してるんだなと思いました。365に乗り換えたばかりの方に読んでほしいです。
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円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。