動的にテンプレと宛先追加が可能なメール文作成マクロです。送信毎に変化する本文内容などは、#を使いキーワード化し、メール作成前にUF上のテキストボックスに入力した値に置き換えます。Google翻訳により本文の英訳、ChatGPTを使うことで本文作成も可能です。VBAとして登録すればエクセル、OutlookVBAから直接実行できます。
・挙動
・コード
*NEW Outlookの場合はVBAが機能しませんので、Outlook Classicを対象として使用可能です。
UF上では丈夫に提携メール作成があります。これは別紙記載のメール本文列にあるKeywordをUF上の入力値に置き換える静的なメール作成マクロです。今回紹介するのはUF下部にある動的メール作成となります。定型メール作成が不要な場合は、UFから削除ください。


・ポイント機能
本マクロの概要部分の説明を記載します。
・#キーワード#によるメール文置き換え
・返信や英訳、ChatGPT使用オプション
今回のシステムについては、OutlookClassicで、メール開始数行目に下記記載で始まるメール本文記載を前提としています。もちろん、Infoシートの置き換え文字等を自身のメール型に置き換えれば宛先自動抽出して動的メール作成が可能です。将来的にClassicが使えない噂も出てますが、のちに紹介する#NAIMINMAIL#を使用しなければメール本文自体は作成可能です。
今マクロが前提としているメール冒頭例:
宛先(相手) 送信者(自分)です。
〜本文〜
#キーワード#によるメール文置き換え
メール文作成時には、セルに入力した文章の内、#キーワード#の文字を置き換え対象と見なし、メール作成前に文字を入力してもらいます。
一部予約語があり、其々は既定の置き換えが行われます。
予約語一覧及び使用方法はシートに記載していますのでご参照ください。
--予約語一覧--
- #MAIL宛先#・・・宛先列に入れた値に置き換えられます。
- #MAIL送信者#・・・Infoシートに入れた値に置き換えられます。
- #MAIL本文#・・・ユーザーフォームでMultiline入力ボックスが出てきて、GPT使用オプション(と送信)が選べます。
- #MAIL末尾#・・・Infoシートに入れた値に置き換えられます。入れない場合でも末尾に自動で挿入されます。
- #NAIMINMAIL#・・・返信するメールとして選択したメールを送る相手に置き換えます。宛先は選択したメールボックスにより置き換えられます。受信ボックスから選べばあなた宛てに送信した人に、送信済みボックスから選べばあなたが送信した相手を宛先に置き換えます。
- #MAILADR#・・・宛先を記載したシートから手動で宛先/CCを選択し、選択したメアドに置き換えられます。
下記のような本文があれば、下記のように入力フォームに入力することができます。#MAIL本文#を除いた予約語は自動で置き換えられます。

上記にある予約語以外の#キーワード#がある場合、本文選択時に置き換える変数と判断し、その数の分だけ置き換える値を入力するテキストボックスがUFに表示されます。予約語:#本文#がある場合は末尾に、改行可能な大きめのテキストボックスが表示されます。

・#MAIL送信者#、#MAIL末尾#
メールの送信者と末尾に値するこの予約語は、別紙Infoシートに記載している情報に置き換えます。例えば、送信者、末尾を下記のように設定しているとします。そうすると、「○○さん Gakuです。 ~以上」のようなメールが作成されます。3列目は英語用となっており、オブションで英語を押した際に置き換えられるものです。

・#NAIMINMAIL#
#NAIMINMAIL#は選択したメールを元に、受信者に置き換えられます。選択したメールが受信と送信ボックスどちらかかを判断し、メール冒頭から送信相手を抽出し置き換えます。
今回は受信ボックス「(あなた)さん ○○です。」や、送信ボックスにある「○○さん (あなた)です。」という冒頭で始まるメールを想定にしています。冒頭からkeywordを取得して双方を比較することで「○○」の部分を抜き出し、#NAIMINMAIL#と置き換えます。
マクロ内容は下記で紹介しています。
・#MAILADR#
ワークシート上で登録したメアド表から、メール選択時に自分で選択することができます。
この予約語がある場合、別紙のメアド表を基にしたUFが表示され、複数選択ができます。表示ではメアド以外の名前等の情報を表示させることで、誰であるかを直感的にわかるようにしています。
また、右上のコンボボックスからは、名前を検索することも可能です。


この機能により、メアドが膨大な量があってもすぐに検索可能です。また、個人の検索だけでなく、GroupAdrではグループ宛先シートの登録値を検索できます。
例えばグループ宛先シートに下記のように登録しておけば、宛先とCCを一気に選択して抽出することも可能です。

宛先シートでも同様に複数のメアドを設定すれば、例えば「営業1課」と登録して、その課員複数を一気に呼び出すこともできます。便宜上、個人メアドリストと、グループメアドリストとして分けています。
メアドにて、宛先の他にCCも同時に登録したい場合、メアドの宛先とCCの間に「#CC#」を挟んで記述してください。

上位のように記載することで、この行が選択された場合に宛先に田中さん、CCに大丸さんを一気に設定することができます。
予約語の一覧及び使用方法の説明同様、各シートに説明を記載していますので参照ください。
返信や英訳、ChatGPT使用オプション
登録する本文は#キーワード#なしでも機能しますが、ある場合は上記予約語含めて入力フォームが出現します。#キーワードに応じて#3つオプションが出現します。
- 返信・・・作成メールを別メールにかぶせて返信できます。
- 英/Eng・・・本文と宛先を英訳します。*宛先の表記は「Dear ○○ san, from ○○」と訳されます。
- ChatGPT使用・・・本文作成をAIに命令し分かりやすくまとめたりできます。

・返信オプション
#NAIMINMAIL#があった場合は、選択したメールに対する返信のため、出現しません。また、メールが新規作成の場合(#NAMEINMAIL#がない場合は返信か新規どちらかと判断)は#MAIL件名#が出現し、新規作成時メールの件名入力ができます。チェックして返信すると入力不可となります。

・
英訳オプション
下記のような登録テンプレに基づき、UFを入力し英訳を押します。記載した入力値に基づき、件名とともに英訳されます。


また、テンプレにて”#NAIMINMAIL#”がある場合は自動的に返信がされます。その際メール本文の文頭に応じて英語か日本語かを判定します。仮に下記メールのような英文メールを選択したとします。

文頭の「san」、「from」のどちらかがあると、英文のやり取りしているメールと判定し、テンプレの内容が自動で英訳されます。もしオプションで英訳チェックボタンがなかったとしても自動で英訳されます。これにより迅速なメール返信と英訳漏れを回避します。


英訳関数は下記で紹介しています。なおGoogle翻訳Http通信によるリクエストは利用規約に関わる可能性があるため、下記記事紹介の関数をご使用ください。
・ChatGPT使用オプション
#本文#が記載されていた場合に出現します。依頼が複雑であったり英訳したりなどしたい場合、プロンプトを入力し指示ができます。プロンプトはInfoシートに記載文章にあり、チェックするとテキストボックスに入力されます。その下に内容を記載し送信することで、APIを発火させ、JSONコンバータで抽出した返答に#本文#が置換えられます。

また、ChatGPTに送るプロンプト内容は別紙から登録可能です。必要に応じて下記部分の文章を置き換えることで、目的の返答取得が可能です。もちろん空欄で、UF上でそのままプロンプトを記載することでも問題ありません。

なおGPT使用のためには、APIキーの取得が必要です。ChatGPTのサイトから、会員登録をして課金することでAPIキーを取得することが可能です。別シートのAPIキー記載箇所に転記してください。
ChatGPT返答取得マクロは下記から使用できます。
・Outlookタブから1クリック呼び出し
今メール作成マクロの神髄はOutlookアプリから呼び出すことにあります。
VBAプロシージャはMS系ファイルの他、Outlookのようなアプリからでも呼び出すことができます。単なる端的なメール作成の他、選択したメールに応じた動的なメール作成が可能な今マクロは、Outlookから呼び出すことでさらに大きな効果を発揮します。

上記のようにホームタブの冒頭に任意の名前タブで登録可能です。指定のエクセルを呼び出してマクロを実行することで、上記で紹介したUFを開き、選択メールに対する動的なメール作成をより迅速にすることができます。
呼び足した際、UFのみが表示され、フォーカスを合わせるために、スクリプトではファイルを非表示し、UFにフォーカスをするようにしています。
Outlookから呼び出したエクセルVBAのUFだけにフォーカスするため、エクセルとOutlook両方で設定を工夫します。エクセル側のUF表示プロシージャでは、下記のような記載をします。

呼び出し元のOutlookでは、呼び出したブックを最小化します。エクセルのマクロ元でファイルを最小化すればよいと思われますが、そうするとUFも一緒に閉じられてしまいます。

そこで、Outlook側のスクリプトでは、エクセルファイルを非表示にしています。これにより、呼び出したエクセルファイルを非表示にし、且つ対象のUFにフォーカスを当てることができます。
選択したメールに対する瞬時のメール作成がキーボード上でも選択可能になり、メール作成の効率を最高にすることができます。



