Outlook VBAで「返信」メールを作成し、宛先追加や件名、本文修正など一度に行いたいときはないでしょうか。
けど、そんな中で悩むことは、
・「全員に返信」メールの作成と本文への追記を一度に行いたいがやり方がわからない。
・Outlook VBAで「返信」メールを作成したいがやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
・Outlook VBAで宛先追加や件名・本文追記をする方法
についてまとめます!
もくじ
Outlook VBAで「返信」「全員に返信」メールを作成する完成イメージ
Outlook VBAで「返信」メールを作成する完成イメージは以下の通りです。
・「返信」と「全員に返信」を使い分ける
返信メールにはTOへの返信だけの「返信」とTOとCCすべてに返信する「全員に返信」と2パターンあります。
用途に応じてそれぞれのメソッドを使い分け自動返信文を挿入していきます。
・宛先を追加する
これまで手動で入力していた宛先を自動で宛先へ挿入していきます。
TOへの返信のみ
全員に返信
・件名へ追記する
通常「RE: 」がつくだけですが、さらに文言を追加をしていきます。
・本文へ追記する
返信する時の文言はだいたい決まっていますよね。
そんな定型文を自動で挿入していきます。
・送信する
処理の最後は送信処理を行います。
また、すぐに送信したくない方は表示のみの選択ができます。
では早速VBAを順に組み立て、実装して動かしてみましょう。
Outlook VBAで「返信」メールを作成する
まずは「返信」メールを作成します。
手動で返信ボタンを押したときの処理と同じ内容をVBAで実現していきます。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.Reply
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
返信したいメールを開き、実装したマクロを実行します。
はい、「返信」メールが作成され表示されましたね。
Outlook VBAで全員に返信するメールを作成する
次に全員に返信する「返信」メールを作成します。
冒頭のReplyメソッドからReplyAllメソッドへ変更するだけでOKです。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「全員に返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.ReplyAll
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
返信したいメールを開き、実装したマクロを実行します。
はい、「全員に返信」メールが作成され表示されましたね。
まずは返信メールをVBAで扱う際の基本形として覚えておきましょう。
Outlook VBAで「返信」メールを作成し、宛先を追加する
続いて返信先の宛先を追加しましょう。
TOの返信先アドレスを指定します。
返信メールはデフォルトでTOを含むため追加という形になります。
CCを指定します。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.Reply
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = "test1@extan.jp"
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
返信したいメールを開き、実装したマクロを実行します。
はい、「返信」メールに追加分のアドレスが挿入されましたね。
Outlook VBAで「全員に返信」メールを作成し、宛先を追加する
「全員に返信」メールにも宛先を追加しましょう。
「全員に返信」メールはデフォルトでCCを含むため、追加という形になります。
CCを指定します。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「全員に返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.ReplyAll
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = objReItem.CC & ";" & "test1@extan.jp"
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
全員に返信したいメールを開き、実装したマクロを実行します。
はい、「全員に返信」メールに追加分のアドレスが挿入されましたね。
Outlook VBAで「返信」メールを作成し、件名へ追記する
次は件名の内容を追加します。
<メール返信します>のところを適当な内容に変えてください。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.Reply
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
返信したいメールを開き、実装したマクロを実行します。
はい、件名に追記した内容が反映されましたね。
Outlook VBAで「全員に返信」メールを作成し、件名へ追記する
「返信」メールのReplyメソッドをReplyAllメソッドへ変更します。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「全員に返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.ReplyAll
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = objReItem.CC & ";" & "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
返信したいメールを開き、実装したマクロを実行します。
はい、件名に追記した内容が反映されましたね。
Outlook VBAで「返信」メールを作成し、本文へ追記する
メール本文に返信文を追記します。
追記内容は以下の通りです。適宜変更してください。
& “確かに受領いたしましたことご連絡致します。” & vbCrLf _
& “よろしくお願いいたします。” & vbCrLf _
& “*****************************” & vbCrLf _
& “エク短商事株式会社” & vbCrLf _
& “◇◇部◇◇課タカヒロ” & vbCrLf _
& “*****************************” & vbCrLf _
& objReItem.Body
VBAとなります。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.Reply
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
'メール本文を指定します。
objReItem.Body = "お世話になっております。" & vbCrLf _
& "確かに受領いたしましたことご連絡致します。" & vbCrLf _
& "よろしくお願いいたします。" & vbCrLf _
& "*****************************" & vbCrLf _
& "エク短商事株式会社" & vbCrLf _
& "◇◇部◇◇課タカヒロ" & vbCrLf _
& "*****************************" & vbCrLf _
& objReItem.Body
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、本文に追記されていますね。
Outlook VBAで「全員に返信」メールを作成し、本文へ追記する
「返信」メールのReplyメソッドをReplyAllメソッドへ変更します。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「全員に返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.ReplyAll
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = objReItem.CC & ";" & "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
'メール本文を指定します。
objReItem.Body = "お世話になっております。" & vbCrLf _
& "確かに受領いたしましたことご連絡致します。" & vbCrLf _
& "よろしくお願いいたします。" & vbCrLf _
& "*****************************" & vbCrLf _
& "エク短商事株式会社" & vbCrLf _
& "◇◇部◇◇課タカヒロ" & vbCrLf _
& "*****************************" & vbCrLf _
& objReItem.Body
objReItem.Recipients.ResolveAll
'表示します。
objReItem.Display
'オブジェクトの開放
Set objReItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、「全員に返信」の本文に追記されていますね。
<追加>返信メールの本文に追記した際にハイパーリンクが切れてしまう場合の対処法
「返信」または「全員に返信」メールを作成し、本文へ追記する際に元のメール本文のハイパーリンクが切れてしまう場合の対処法について説明をします。
・現象
元のメール本文にハイパーリンクが含まれる場合、「返信」または「全員に返信」メールを作成し、本文へ追記すると、ハイパーリンクが切れてしまいます。
・原因
原因は、Bodyプロパティではリンクやスタイルは除外されてしまう仕様であるためです。
・対策
対策は、Bodyプロパティではなくリンクやスタイルを保持できるHTMLBodyプロパティを使います。
メール本文を挿入している以下の箇所を
objReItem.Body = “お世話になっております。” & vbCrLf _
& “確かに受領いたしましたことご連絡致します。” & vbCrLf _
& “よろしくお願いいたします。” & vbCrLf _
& “*****************************” & vbCrLf _
& “エク短商事株式会社” & vbCrLf _
& “◇◇部◇◇課タカヒロ” & vbCrLf _
& “*****************************” & vbCrLf _
& objReItem.Body
以下のように変更します。
objReItem.HTMLBody = “お世話になっております。” & “<br>” _
& “確かに受領いたしましたことご連絡致します。” & “<br>” _
& “よろしくお願いいたします。” & “<br>” _
& “*****************************” & “<br>” _
& “エク短商事株式会社” & “<br>” _
& “◇◇部◇◇課タカヒロ” & “<br>” _
& “*****************************” & “<br>” _
& objReItem.HTMLBody
改行は”<br>”を末尾につけたり、太字は”<b>太字</b>”という形になります。
より詳しいHTML形式の書式の使い方についてまとめてみました。
HTML形式のコードはちょっと難しいと感じる方は
こちらのリッチテキスト形式でメール作成することオススメします。
Excelの書式のままメール作成ができますのでカンタンに書式設定ができます。
Outlook VBAで「返信」メールを作成し、送信する
最後の処理である送信をおこないます。
Sendメソッドで実行します。
表示だけにしたい方は、Sendメソッドをコメントアウトし、displayメソッドを有効化してください。
objReItem.Display’送信します。
‘objReItem.Send
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.Reply
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
'メール本文を指定します。
objReItem.Body = "お世話になっております。" & vbCrLf _
& "確かに受領いたしましたことご連絡致します。" & vbCrLf _
& "よろしくお願いいたします。" & vbCrLf _
& "エク短商事株式会社 ◇◇部◇◇課タカヒロ。" & vbCrLf _
& objReItem.Body
objReItem.Recipients.ResolveAll
'表示します。
'objReItem.Display
'送信します。
objReItem.Send
'オブジェクトの開放
Set objReItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、送信されていることが確認できましたね。
Outlook VBAで「全員に返信」メールを作成し、送信する
「全員に返信」メールも同じく送信をおこないましょう。
Sendメソッドで実行します。
Sub 選択メールを返信する()
Dim objReItem As Outlook.MailItem
'現在表示中のメールアイテムを「全員に返信」メールとしてセットします。
Set objReItem = ActiveInspector.CurrentItem.ReplyAll
'返信先を指定します。
'返信先アドレスを指定してください。
objReItem.To = objReItem.To & ";" & "test@extan.jp"
'CCを指定してください。
objReItem.CC = objReItem.CC & ";" & "test1@extan.jp"
'件名を指定します。
objReItem.Subject = objReItem.Subject & "<メール返信します>"
'メール本文を指定します。
objReItem.Body = "お世話になっております。" & vbCrLf _
& "確かに受領いたしましたことご連絡致します。" & vbCrLf _
& "よろしくお願いいたします。" & vbCrLf _
& "エク短商事株式会社 ◇◇部◇◇課タカヒロ。" & vbCrLf _
& objReItem.Body
objReItem.Recipients.ResolveAll
'表示します。
'objReItem.Display
'送信します。
objReItem.Send
'オブジェクトの開放
Set objReItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、「全員に返信」メールも送信されていることが確認できましたね。
VBAの実装手順
実装手順は以下の通りです。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。
右ペインのコードエリアへ、VBAコードを貼り付けて保存します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・Outlook VBAで宛先追加や件名・本文追記をする方法
についてまとめました。
まだまだ便利な方法がありますので、よろしければ以下の記事もご参照ください。
いつもお世話になっております。
もう1点質問があります。HTML形式でフォントサイズ、フォント書式を変更したコードを書く際、コードを改行するにはどのようにすれば良いのでしょうか。
objReItem.HTMLBody = “お世話になっております。確かに受領いたしましたことご連絡致します。” & objReItem.HTMLBody
↑他の質問者様への回答であった上記コードを使用したのですが、改行してコードを書く方法が分かりませんでした。
初歩的な内容で申し訳ありませんが、宜しくお願いします。
返信ありがとうございます。
転送メールを使用する点、盲点でした。早速、参考にして実践してみます。
とても助かりました。宜しくお願いします。
はじめまして。
こちらを利用させて頂き、大変参考になります。
outlook VBAを使用した返信について、1点解決に苦慮しているものがありまして、前のメールに添付してある画像や表などを残す場合、どのようにすれば良いのでしょうか。
お手数ですが、ご教授頂けれ幸いです。
宜しくお願いします。
いつもご利用ありがとうございます。
前メールの添付ファイルを返信メールに残す方法につきまして、
返信では基本的に添付ファイルが外れる形になりますので、
方法としては添付が引き継がれる転送メールに宛先を加える形がよいかと思われます。
転送メールと宛先追加の方法につきましては以下の記事にまとめておりますので、よろしければご参考ください。
https://extan.jp/?p=4661
タカヒロ様
ご返信に気づくのが遅くなり、申し訳ありません。
コメントありがとうございました。
Replaceを使うことで問題ないとのこと、安心しました。
今後ともどうぞよろしくお願いいたします。
タカヒロ様
すみません。返信宛先から一部特定宛先を削除したい件は取り合えず下記Replace関数で自己解決できました。ただ他にさらに便利な方法がございましたらよろしくお願いいたします、
objReItem.To = Replace(objReItem.To, “〇〇〇”, “”) ’〇〇〇は削除したい宛先文字列
ご連絡ありがとうございます。
複数宛先から一部削除する件につきまして、
宛先文字列をReplace関数で置換する形で問題ないと思います。
“;”区切りで配列に格納しFor Eachで検索/削除する方法も考えられますが、
ご提示の方法は1行で済みますのでこちらのほうが良いでしょう。
タカヒロ様
いつもお世話になっております。ヤマモトです。
全員返信のときに、ToやCCに宛先を追加したいときは下記ご教示のコードで問題なく追加できたのですが、逆に複数の宛先から自動的に特定の宛先のみを削除したい場合、どのようなコードであれば可能でしょうか。例えばRemoveを使って何とかしようとしましたがなかなか実行できず(エラーになり)困っています。
objReItem.To = objReItem.To & “;” & “test@extan.jp”
objReItem.CC = objReItem.CC & “;” & “test1@extan.jp”
実際には、不特定個人(元メール発信者)から私たち担当者ML(複数登録されているメーリングリスト)宛に質問が送信され、その返信のときにToには元メール発信者に加えて担当者MLも自動で入ってしまうため、いつも手作業で担当者MLのみをToからCCへ移動させています。複数宛先から一部削除できるvbaコード例をお教えいただけましたら幸いです。
タカヒロ様
お世話になっております。
この度も大変丁寧にご教授いただきありがとうございました。助かりました。
ソースコードの確認…に不安を感じておりますが、頑張ってやってみます!
本当にありがとうございました。
タカヒロ様
何度も申し訳ございません。
リンクはアクティブになったのですが、リンクが囲ってある枠(四角の図形の中にリンクが貼ってあるイメージです)が消えてしまいました。
あと本文に追加したフォントは変更可能でしょうか?
ご教授いただきたく、よろしくお願い致します。
ご連絡ありがとうございます。
本文に追加したフォントの変更につきましてはspanやpタグとスタイルシートを使用することにより可能となります。
フォントサイズを変更する場合は「font-size: **px」の**を変更します。またstyle内のダブルクォーテーションはエスケープのため2つ入れるようにしてください。
サンプルは大きめサイズの40ポイントとしています。
objReItem.HTMLBody = “<span style=””font-size: 40px;””>お世話になっております。</span><br>確かに受領いたしましたことご連絡致します。<br>” & objReItem.HTMLBody
フォントの種類もあわせて変更する場合はfont-family: ****」の****をフォントの種類にします。
サンプルはメイリオにしています。
objReItem.HTMLBody = “<span style=””font-size: 40px;font-family: メイリオ;””>お世話になっております。</span><br>確かに受領いたしましたことご連絡致します。<br>” & objReItem.HTMLBody
リンクが囲ってある枠が消えてしまう現象については、ソースコードを拝見しない限りわかりかねますが、
おそらく、HTMLBodyでは表現できないスタイル指定であるか、スタイルそのものが外れてしまっているものと思われます。
お手数ですが、元メールと返信メールのソースコードを比較し確認頂ければと存じます。
タカヒロ様
HTML Bodyに変更したらリンクがアクティブになりました。
本当にありがとうございました。
今後ともよろしくお願い致します。
タカヒロ様
早速ご教授いただきありがとうございます!具体的な例がとても分かりやすく初心者にとって、とてもありがたいです。
明日実行するのがとても楽しみです。本当にありがとうございました。
今後ともどうぞよろしくお願いします。
タカヒロ様
VBA初心者なので、いつも参考にさせていただいております。ありがとうございます。
「全員へ返信」するメールで本文を追記したVBAの作成について、教えていただきたい点がございます。
本文を追記せずにマクロを実施すると、元メールのリンクはアクティブになっているのですが、本文を入れるとリンクが外れてしまいます。どうすれば本文入りでもアクティブなリンクのまま送信が出来るのでしょうか?よろしくお願い致します。
いつもご利用ありがとうございます。
「全員へ返信」するメールで本文を追記した場合、元メールのリンクが外れる件につきまして、
サンプルで使用しているBodyプロパティはHTMLのコードが外れてしまう仕様によるものとなっております。
お手数ですが、VBA中のBodyをHTMLBodyに変更して試して頂きたくお願いいたします。
具体的には「objReItem.Body」を「objReItem.HTMLBody」へ変更します。
また本文へ追記している内容もHTMLタグへ変更する必要があるため、
「 “お世話になっております。” & vbCrLf & “確かに受領いたしましたことご連絡致します。” & vbCrLf」
の改行の箇所を
「”お世話になっております。<br>確かに受領いたしましたことご連絡致します。<br>” 」
のように変更をお願いいたします。
タカヒロさん
宛名の自動入力につきまして、早速のご回答を、しかも判り易い記事にまでしてくださり(様とさんの使い分け工夫例もお示しいただき)、たいへんありがとうございます。しっかり読み込ませていただいて参考にさせていただきたいと思います。今後ともどうぞよろしくお願いします。
タカヒロ様、先日はobjReItem.Recipients.ResolveAllの意味をお教えいただき、たいへんありがとうございました。
お言葉に甘えまして、以下の解決方法につきましてお教え頂けましたら幸いです。
Outlookで返信するときの本文の先頭に、”〇〇 様”のように元メールの送信者(返信時では受信者)のお名前を自動的に追加したいのですが、参考になるプログラム例をご教示いただけないでしょうか? なお上記の〇〇さんは連絡先に登録してあるアドレスの中の1人に相当します。日頃、別々の登録者の方々から類似の問い合わせがあり類似回答をすることが多く、vbaで可能な限り自動化したいと考えています。
連絡先情報を利用して返信時に”〇〇 様”を加える件ですが、
記事を追加しましたので、よろしければご参考頂ければと存じます。
https://extan.jp/?p=6137
いつもご利用ありがとうございます。
連絡先情報を利用して返信時に”〇〇 様”を加える件ですが、
苗字(姓)であれば連絡先オブジェクトのLastNameプロパティで取得が可能です。
送信者のメールアドレスをキーに検索し一致したLastNameプロパティに”様”を付け加え、返信メールの本文に挿入する形です。
連絡先オブジェクトから取得できる情報については以下ご参照ください。
https://extan.jp/?p=1532
サンプルプログラムは長くなりますので、別記事にてご紹介したいと思います。
記事アップ後にご連絡いたします。
よろしくお願いいたします。
タカヒロさん、早速のご教示ありがとうございます。
初めてobjReItem.Recipients.ResolveAllのコードを見たとき、受信者の解決って???…疑問符だらけでしたが、お蔭様でスッキリしました。今後もどうぞよろしくお願いいたします。
確かにVBA関連の用語は英語を直訳した表現が多いので理解しにくいところがありますね。
また不明点があれば気楽に問い合わせていただければと存じます。
よろしくお願いいたします。
私はExcelマクロを学習し始めた者で、このページのOutLook操作コードを参考にさせていただいています。ただ objReItem.Recipients.ResolveAllの意味が理解できなくて困っています。ググってもよく判りませんでしたので意味を教えていただけないでしょうか?
いつもご利用ありがとうございます。
objReItem.Recipients.ResolveAllの意味につきまして、
宛先に入力したアドレスが連絡先に登録してあるアドレスと一致した場合、その表示名に変換するメソッドになります。
「alt」+「K」キーの名前の確認と同じ機能と思っていただければと存じます。
よろしくお願いいたします。