Outlook VBAで転送メールを作成し、宛先追加や件名、本文修正など一度に行いたいときはないでしょうか。
けど、そんな中で悩むことは、
・Outlook VBAで転送メールを作成したいがやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
・転送メール作成と宛先追加をする方法
についてまとめます!
もくじ
Outlook VBAで転送メールを作成する完成イメージ
Outlook VBAで転送メールを作成する完成イメージは以下の通りです。
・宛先を追加する
これまで手動で入力していた宛先を自動で宛先へ挿入していきます。
・件名へ追記する
通常「FW: 」がつくだけですが、さらに内容を追加をしていきます。
・本文へ追記する
転送する時に一言添えたいところですよね。そんな一文を自動で挿入していきます。
・送信する
処理の最後は送信処理を行います。
また、すぐに送信したくない方は表示のみの選択ができます。
では早速VBAを順に組み立て、実装して動かしてみましょう。
Outlook VBAで転送メールを作成する
まずは転送メールを作成します。
手動で転送ボタンを押したときの処理と同じ内容をVBAで実現していきます。
Sub 選択メールを転送する()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
objFwItem.Recipients.ResolveAll
'表示します。
objFwItem.Display
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
転送したいメールを開き、実装したマクロを実行します。
はい、転送メールが作成され表示されましたね。
Outlook VBAで転送メールを作成し、宛先を追加する
続いて転送先の宛先を追加しましょう。
Toの転送先アドレスを指定します。
CCを指定します。
Sub 選択メールを転送する()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
'転送先を指定します。
'転送先アドレスを指定してください。
objFwItem.To = "test@extan.jp; test@extan.jp"
'CCを指定してください。
objFwItem.CC = "test1@extan.jp; test2@extan.jp"
objFwItem.Recipients.ResolveAll
'表示します。
objFwItem.Display
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
転送したいメールを開き、実装したマクロを実行します。
はい、転送先アドレスが挿入されましたね。
Outlook VBAで転送メールを作成し、件名へ追記する
次は件名の内容を追加します。
<メール転送します>のところを適当な内容に変えてください。
Sub 選択メールを転送する()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
'転送先を指定します。
'転送先アドレスを指定してください。
objFwItem.To = "test@extan.jp; test@extan.jp"
'CCを指定してください。
objFwItem.CC = "test1@extan.jp; test2@extan.jp"
'件名を指定します。
objFwItem.Subject = objFwItem.Subject & "<メール転送します>"
objFwItem.Recipients.ResolveAll
'表示します。
objFwItem.Display
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
転送したいメールを開き、実装したマクロを実行します。
はい、件名に追記した内容が反映されましたね。
Outlook VBAで転送メールを作成し、本文へ追記する
メール本文に追記します。
“メールを転送させて頂きます。”
“以下転送元の内容となります。”
の部分を適当な内容に変更してください。
& “以下転送元の内容となります。” & vbCrLf _
& “——” & vbCrLf _
& objFwItem.Body
Sub 選択メールを転送する()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
'転送先を指定します。
'転送先アドレスを指定してください。
objFwItem.To = "test@extan.jp; test@extan.jp"
'CCを指定してください。
objFwItem.CC = "test1@extan.jp; test2@extan.jp"
'件名を指定します。
objFwItem.Subject = objFwItem.Subject & "<メール転送します>"
'メール本文を指定します。
objFwItem.Body = "メールを転送させて頂きます。" & vbCrLf _
& "以下転送元の内容となります。" & vbCrLf _
& "------" & vbCrLf _
& objFwItem.Body
objFwItem.Recipients.ResolveAll
'表示します。
objFwItem.Display
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、本文に追記されていますね。
<追加>表や書式設定を維持したままOutlook VBAで転送メールを作成し、本文へ追記する
表や書式設定を維持したままOutlook VBAで転送メールを作成し、本文へ追記する方法について追加の説明をいたします。
上記サンプルコードで転送メールを作成した場合、転送元のメールはテキスト形式に変換されますので、書式設定やハイパーリンク、また表などHTML形式で表示されていた内容はすべてテキストのみの表記になります。
例えば、以下のような画像や表が入っているメールをVBAで転送しようとすると、
テキストのみの形式に変換されてしまいます。
これですと見た目がよくありませんので、書式設定を維持する形にコードを修正していきたいと思います。
サンプルコード
以下サンプルコードです。
Sub 選択メールを転送する_HTML版()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
'転送先を指定します。
'転送先アドレスを指定してください。
objFwItem.To = "test@extan.jp; test@extan.jp"
'CCを指定してください。
objFwItem.CC = "test1@extan.jp; test2@extan.jp"
'件名を指定します。
objFwItem.Subject = objFwItem.Subject & "<メール転送します>"
'メール本文を指定します。
objFwItem.HTMLBody = "メールを転送させて頂きます。" & "<br>" _
& "以下転送元の内容となります。" & "<br>" _
& "------" & "<br>" _
& objFwItem.HTMLBody
objFwItem.Recipients.ResolveAll
'表示します。
objFwItem.Display
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
変更箇所
変更箇所は以下の通りです。
■変更前
objFwItem.Body
■変更後
objFwItem.HTMLBody
変更前はBodyプロパティを使っていましたが、変更後はHTML形式の書式設定ができるHTMLBodyプロパティに変えています。
ただしHTMLBodyプロパティに変更した場合は文面もHTMLタグで記載しなければいけませんので、改行部分を”BR”タグへ変更しています。
他にも太字にしたり文字色を変えたりすることができますが、HTMLで記述する必要があります。
例えば太字であれば<B>タグで囲います。
"<B>メールを転送</B>させて頂きます。"
文字色を赤色にし、文字サイズを大きくしたい場合は以下のようにカラーの設定をします。
<font color=""red"" size=""+2"">以下転送元の内容となります。</font>
実行結果
転送対象の書式付メールを選択し、マクロを実行します。
はい、書式設定が維持された状態で転送メールができましたね!
Outlook VBAで転送メールを作成し、送信する
最後の処理である送信をおこないます。
Sendメソッドで実行します。
表示だけにしたい方は、Sendメソッドをコメントアウトし、displayメソッドを有効化してください。
objFwItem.Display’送信します。
‘objFwItem.Send
Sub 選択メールを転送する()
Dim objFwItem As Outlook.MailItem
'現在表示中のメールアイテムを転送メールとしてセットします。
Set objFwItem = ActiveInspector.CurrentItem.Forward
'転送先を指定します。
'転送先アドレスを指定してください。
objFwItem.To = "test@extan.jp; test@extan.jp"
'CCを指定してください。
objFwItem.CC = "test1@extan.jp; test2@extan.jp"
'件名を指定します。
objFwItem.Subject = objFwItem.Subject & "<メール転送します>"
'メール本文を指定します。
objFwItem.Body = "メールを転送させて頂きます。" & vbCrLf _
& "以下転送元の内容となります。" & vbCrLf _
& "------" & vbCrLf _
& objFwItem.Body
objFwItem.Recipients.ResolveAll
'表示します。
'objFwItem.Display
'送信します。
objFwItem.Send
'オブジェクトの開放
Set objFwItem = Nothing
End Sub
メールを選択した上、マクロを実行します。
はい、送信されていることが確認できましたね。
VBAの実装手順
実装手順は以下の通りです。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。
右ペインのコードエリアへ、VBAコードを貼り付けて保存します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・転送メール作成と宛先追加をする方法
についてまとめました。
また、さらに便利な仕訳ルールと組み合わせてVBAを実行し、カスタム転送メールを転送する方法も追記しました。
よろしければご参照ください。
初めまして、しばらく前のものに質問で恐縮なのですが、こちらのサイトが一番わかりやすく参考になったので質問させていただきました。
参考にして作ってみたところ下記のところが起こったのですが解決は可能でしょうか?
宛先を入れて実装した所までは、問題ありませんでした。
以下2点について対応可能かご教授いただきたいです。
①『本文』を入れて実装した所、転送前の本文内の文字色がついていたものや署名設定したもののが踏襲されなくなってしまいました。
『宛先』追加のところまでで止めるとうまくいくのですがこれを解決することは可能でしょうか?
②本文内の特定の文字を太字やフォントサイズを変更することは可能でしょうか?
いつもご利用ありがとうございます。
ご質問の①書式設定の踏襲、②太字、サイズの指定につきまして、HTML形式に変換することで可能となります。
方法につきましては記事内に追記いたしましたので、ご参考ください。
https://extan.jp/?p=4661#%EF%BC%9C%E8%BF%BD%E5%8A%A0%EF%BC%9E%E8%A1%A8%E3%82%84%E6%9B%B8%E5%BC%8F%E8%A8%AD%E5%AE%9A%E3%82%92%E7%B6%AD%E6%8C%81%E3%81%97%E3%81%9F%E3%81%BE%E3%81%BEOutlook_VBA%E3%81%A7%E8%BB%A2%E9%80%81%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%E6%9C%AC%E6%96%87%E3%81%B8%E8%BF%BD%E8%A8%98%E3%81%99%E3%82%8B
初めまして。とても分かりやすい情報感謝します!
初心者な質問で恐縮なのですが、
・転送時の件名の「FW: 」を削除
・本文に記載のあるアドレスに転送セットする
・本文の不要な行を削除
この3点はVBAで可能なものでしょうか。
転送メールを選択した上で送信前の表示のみで留めたいです。
ご教示頂けますと幸いです。
いつもご利用ありがとうございます。
ご質問につき以下の通りご回答いたします。
・転送時の件名の「FW: 」を削除
以下コードを
objFwItem.Recipients.ResolveAll
の上あたりに追加頂ければ可能です。
—
‘件名を修正します。
objFwItem.Subject = Replace(objFwItem.Subject, “FW: “, “”)
—
・本文に記載のあるアドレスに転送セットする
[@]がある文字列など検索条件が明確であれば本文からのアドレス抽出、ToやCCに割り当ては可能です。
ただし、メールアドレスでない文字列も含まれてしまう可能性があります。
・本文の不要な行を削除
こちらも同様になにをもって不要とするか、検索条件が明確であれば可能となります。
大変有益な情報ありがとうございます。一点お知恵をお借りしたいのですが、転送の際に、転送先=もとのメール送信者、転送する際のcc=もとのメールのcc というように指定したい場合はどのように上のマクロを変更すればよいでしょうか。今使っているアウトルックの返信機能がフリーズすることが多く非常に困っています。そのため、いつも、転送ボタンを押して、宛先を転送元のアドレスから手打ちすることで実質的に返信していまして、お聞きする次第です。
いつもご利用ありがとうございます。
ご質問の、
転送の際に、転送先=もとのメール送信者、転送する際のcc=もとのメールのcc
とする件でございますが、以下の対応で可能となります。
メールオブジェクトを転送のForwardメソッドからすべての受信者に対する返信のReplyAllメソッドへ変更します。
Set objFwItem = ActiveInspector.CurrentItem.ReplyAll
以下をコメントアウトするか削除します。
‘objFwItem.To = “****@extan.jp”
‘objFwItem.CC = “****@extan.jp”
この方法の場合、件名はFW:ではなくRE:となりますことご了承ください。
また、Outlookの返信機能がフリーズする事象につきましては、原因特定の調査が必要かと思われます。
Outlookのバージョン、拡張機能、サードパーティ製ツール、利用端末のスペック、他利用者における同事象発生有無などの点で切り分け、
確認をすることをご検討いただければと存じます。