メールの件名と本文に、氏名を自動挿入するプログラムの解説。

最近は氏名が挿入されたメールをよく見かけますが、Excelからメール送信すると、意外と簡単なVBAプログラムで実現できます。

プログラムの動作確認までは、前回のステップで行ないました。

今回はメールの件名と本文に、氏名を自動挿入(置換)するVBAプログラムについて、詳しく解説します。


(1)件名テキストボックスの値を取得している部分です。
subj = Me.txtSubject

この部分は、これまでと同じです。


(2)実際に文字列を置換しているのは、この1行です。
subj = Replace(subj, "[氏名]", tName)

Replace関数は、文字列を検索し、置換してから値を返します。
・1番目の引数は、置換される側の文字列
・2番目の引数は、検索する文字列
・3番目の引数は、置換する文字列

この時、変数 subj には、件名が入っています。

件名の文字列の中で、[氏名]という文字列を検索し、見付かったら、変数 tName の値と置換するという仕組みです。

"[氏名]"がダブルクォーテーションで囲まれているのは、文字列だからです。

変数 tName には、行番号を指定した時に、既に氏名が代入されています。


(3)引数について
Replace関数は、検索開始位置や、置換する文字列数も、4番目、5番目の引数で指定できますが、今回は省略しています。

引数を省略すると、文字列の最初から検索し、見付かったら全て置換するようになっています。

もし4番目、5番目の引数を指定すると、10文字目から検索し、最初に見付かった文字列だけ置換するというようなことが可能です。


(4)変数subjについて
Replace関数で置換した文字列を、元の変数 subj に代入している点にも注目してください。

元の変数に代入すると、新たに変数を宣言しなくて済みます。

「変数」と言われるように、何度でも値を変えることができます。よく使われる方法なので、覚えておくと便利です。


(5)挿入タグについて
実は [氏名] の部分は、プログラマーが自由に決めることができます。

Replace関数の引数で指定した検索文字列と、フォーム上で入力する文字列が同じなら、何でもかまいません。あなたがわかりやすいものにできます。

当講座では、[氏名] を挿入タグと呼ぶことにしましょう。

ユーザーが入力する文字列と明確に区別するために、挿入タグはアルファベットにしたほうがわかりやすいかもしれませんね。


name、[name]、(氏名)、{氏名}

カッコは付けても付けなくてもかまいません。逆に日本語を使うなら、カッコは付けたほうが区別しやすいと思います。

つまり検索する挿入タグは、文字なら何でもいいのです。「***」でもOKです。

でもプログラムの中で使われる「"」(ダブルクォーテーション)は使わないでください。

またユーザーが入力する文字列とまったく同じなら、置換したくない文字列まで置換されてしまうので、注意してください。

そのためカッコなどを付けて、明確に区別しているのです。一文字でも違えば、置換されることはありません。


(6)本文の場合も、件名とまったく同じ仕組みです。
body = Me.txtBody
body = Replace(body, "[氏名]", tName)


【ワンポイント】
では氏名を自動挿入したくない場合は、どうすればよいのでしょうか?

件名や本文に氏名を自動挿入する必要が無ければ、挿入タグを書かなければよいだけです。

Replace関数で、検索文字列が見付からなければ、置換されずに、元の文字列が返されるだけですから。

スポンサードリンク

スポンサードリンク






メール送信・受信プログラミング初心者入門 TOPへ