【Outlook VBA】返信メールを作成する方法!全員に返信に加え、宛先追加や件名・本文追記も!

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を含むため追加という形になります。

objReItem.To  & ”;”  & ”test@extan.jp”

CCを指定します。

objReItem.CC = “test1@extan.jp”

タカヒロ
タカヒロ
複数アドレスを指定する場合はセミコロン「;」で区切ってください。

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

返信したいメールを開き、実装したマクロを実行します。

はい、「返信」メールに追加分のアドレスが挿入されましたね。

タカヒロ
タカヒロ
objReItem.ToはSMTPアドレスの無い表示名だけになりますので、その際は送信前に名前解決をするようお願いします。

Outlook VBAで「全員に返信」メールを作成し、宛先を追加する

「全員に返信」メールにも宛先を追加しましょう。

「全員に返信」メールはデフォルトでCCを含むため、追加という形になります。
CCを指定します。

objReItem.CC = objReItem.CC  & ”test1@extan.jp”

タカヒロ
タカヒロ
複数アドレスを指定する場合はセミコロン「;」で区切ってください。

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で「返信」メールを作成し、件名へ追記する

次は件名の内容を追加します。

<メール返信します>のところを適当な内容に変えてください。

objReItem.Subject = objReItem.Subject & “<メール返信します>”

タカヒロ
タカヒロ
件名の文頭に追加する場合は「”<メール返信します>” & objReItem.Subject」としてください。

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で「返信」メールを作成し、本文へ追記する

メール本文に返信文を追記します。

追記内容は以下の通りです。適宜変更してください。

objReItem.Body = “お世話になっております。” & vbCrLf _
& “確かに受領いたしましたことご連絡致します。” & 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

タカヒロ
タカヒロ
HTMLBodyプロパティを使用する場合は、追加する値はHTML形式である必要があります。
改行は”<br>”を末尾につけたり、太字は”<b>太字</b>”という形になります。

Outlook VBAで「返信」メールを作成し、送信する

最後の処理である送信をおこないます。

Sendメソッドで実行します。

objReItem.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で「返信」と「全員に返信」メールを作成する方法について
まとめました。

また、さらに便利な仕訳ルールと組み合わせてVBAを実行し、カスタム「返信」メールを返信する方法も追記しました。

Outlookの仕分けルールからスクリプトを実行しメール転送する方法

よろしければご参照ください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

 
タカヒロ  
Excelの基礎がスルスル入ってくるAmazonランク1位の優良Excel本です。
 
この基礎本と応用技が多いエク短と組み合わせれば、短時間で誰よりもExcelが使いこなせるかと思います。
 
2022/1/21(金)23: 59までAmazon限定の「厳選ショートカットキー」DL特典アリです。 >詳細を見てみる 

15 件のコメント

  • タカヒロ様
    お世話になっております。
    この度も大変丁寧にご教授いただきありがとうございました。助かりました。
    ソースコードの確認…に不安を感じておりますが、頑張ってやってみます!
    本当にありがとうございました。

  • タカヒロ様
    何度も申し訳ございません。
    リンクはアクティブになったのですが、リンクが囲ってある枠(四角の図形の中にリンクが貼ってあるイメージです)が消えてしまいました。
    あと本文に追加したフォントは変更可能でしょうか?
    ご教授いただきたく、よろしくお願い致します。

    • ご連絡ありがとうございます。

      本文に追加したフォントの変更につきましては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で可能な限り自動化したいと考えています。

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

      連絡先情報を利用して返信時に”〇〇 様”を加える件ですが、
      苗字(姓)であれば連絡先オブジェクトのLastNameプロパティで取得が可能です。
      送信者のメールアドレスをキーに検索し一致したLastNameプロパティに”様”を付け加え、返信メールの本文に挿入する形です。

      連絡先オブジェクトから取得できる情報については以下ご参照ください。
      https://extan.jp/?p=1532

      サンプルプログラムは長くなりますので、別記事にてご紹介したいと思います。
      記事アップ後にご連絡いたします。

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

  • タカヒロさん、早速のご教示ありがとうございます。
    初めてobjReItem.Recipients.ResolveAllのコードを見たとき、受信者の解決って???…疑問符だらけでしたが、お蔭様でスッキリしました。今後もどうぞよろしくお願いいたします。

    • 確かにVBA関連の用語は英語を直訳した表現が多いので理解しにくいところがありますね。

      また不明点があれば気楽に問い合わせていただければと存じます。

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

  • 私はExcelマクロを学習し始めた者で、このページのOutLook操作コードを参考にさせていただいています。ただ objReItem.Recipients.ResolveAllの意味が理解できなくて困っています。ググってもよく判りませんでしたので意味を教えていただけないでしょうか?

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

      objReItem.Recipients.ResolveAllの意味につきまして、
      宛先に入力したアドレスが連絡先に登録してあるアドレスと一致した場合、その表示名に変換するメソッドになります。
      「alt」+「K」キーの名前の確認と同じ機能と思っていただければと存じます。

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

  • コメントを残す

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