エクセルマクロ(VBA)でメール作成する方法
Pocket

エクセルのマクロ(VBA)でメールを大量に作成する方法を紹介します!

今回エクセルのマクロで操作するメールソフトは「Outlook」です。

この「Outlook」はエクセルやワード等のソフトと同じ並びのパッケージ化されたソフトですので、エクセルとともに使用している人は多いのではないでしょうか!

今回説明するメール作成マクロとその不随ファイルは以下からダウンロードできます。

1.使い方

まずは以下の手順でプログラムを実行してみてください。

1-1.ファイルをダウンロード

上記のリンクをクリックするとダウンロード先を求められますので、今回は両方ともデスクトップに置いてみましょう。

デスクトップへ保存後、中身を取り出してまたデスクトップへコピーします。

※中身を取り出さないとマクロは実行できません。

このフォルダの中にマクロファイルが入っています!これで準備完了です!

1-2.ファイルを開いてマクロ機能を有効にする

それではいよいよマクロファイルを開きましょう!

マクロファイルは開くと【コンテンツの有効化】を求められます。

まずはこれをクリックします。

これについて詳しくは以下のページを参照してください。

エクセルマクロのファイルを開くとセキュリティ警告が出る理由と対処

1-3.マクロを実行する

「表示」タブの中の「マクロ」を選択すると、使えるマクロが表示されます(今回のファイルの場合「メール作成」というマクロ一つのみ)。

そのマクロが選択された状態で「実行」をクリックするとマクロが実行されます!

※ここでエラーが発生した場合は、本ページの項目『2-6.マクロ実行時にエラーが出る場合』の作業をしてからここに戻ってきてください。

一瞬でメールが10通できました!

これらのメールを見てみると、宛先・件名・本文・添付ファイルが上記エクセルの表の一行一行と対応していることがわかるはずです。

つまり一人一人に対して別々な内容のメールをExcelマクロで一瞬で作成することができるのです!

※この時添付されるファイルは、マクロファイルと同じフォルダの『添付ファイル』という名前のフォルダの中に入っています。

定例で決まった相手にメールするような業務がある方は、これでかなり時短と精度の向上を臨めると思います!

次からは、このマクロの中身の解説をします!

2.マクロ(VBA)の説明

ここからは実際にこのマクロの中身の解説をします!

このサイトのタイトルの通りいかに「情弱」でもプログラミングをするかをコンセプトにしているので、できる限りプログラムは短くします!

また小難しい話が続くのは挫折の元なので説明も最低限に留めます!

2-1.マクロのコードを見てみる

上記同様「表示」タブの中の「マクロ」を選択、「メール作成」というマクロが選択された状態で今度は「編集」をクリックするとマクロの中身が見れます!

さあ、これがマクロの中身です!

まだ意味わかりませんよね!(緑色の文字は、プログラムの説明をメモ書きしたものでありコードではありません)

今回は以下の図の赤線の個所についてのみ説明します。

そこ以外は自分では変更することのない決まりきった”部品”なのだと、いったん思っておいてください!

またプログラムは上から下に読んでいきますのでそのつもりで!

2-2.メールの宛先・件名・本文を指示している個所

以下の図の赤枠の『Cells(i, 〇).Value』の部分に注目してください。

それらの個所がそれぞれ、 ①宛先 ②CC ③BCC ④件名 ⑤本文 ⑥添付ファイル が何になるのかを表しています。

※今回は『Cells(i, 〇).Value』より左の記述は無視してください。

エクセルマクロ(VBA)では、エクセルのいずれかのセルに入力されている文字(数字)を『Cells(行, 列).Value』で表します

※行は横、列は縦です!

例えば『Cells(1, 1).Value』は1行目の1列目なので『A1セルの文字(数字)』を表すし、『Cells(2, 3)』なら2行目の3列目なので『C2セルの文字(数字)』を表すということです。

それでは上記①を見てみましょう。

ここまでで考えると『Cells(i, 2).Value』はi行目の2列目の文字(数字)と読めます。

i行目って何だよって話になるので、次に説明します。

2-3.何にでも変化できる”変数”なるもの

コードの上の方に『i = 4』という記載がありますね。

これは『iとは4だ!』と宣言してます(ここでは仮にiを使っているだけで、aでもbでもはたまたmossanのように二文字以上でも構いません)。

は?iはiだろと思われたかもしれませんが、ここでいうiとは文字としてのiではなく”何でも格納できる箱”と思ってください。

こういった何にでもなれる存在をエクセルマクロ(VBA)に限らず、プログラミングの世界で”変数”と呼びます。

つまりiの中に4が格納され、iは4になったのです。

そして下の方の『i = i + 1』で『iとはi+1だ!』と宣言しています。

つまりiは最初に4になっているので、ここでiは+1され5に変化することになります。

ここで項目『2-2』の最後に出てきた『Cells(i, 2).Value』というコードに戻ってください。

少し理解できるのではないでしょうか。

『Cells(行, 列).Value』の行の個所を数字ではなく、iという”変数”で表しているんです。

つまり最初は『Cells(i, 2).Value』は4行目の2列目の文字(数字)、つまり『B4セルの文字(数字)』ということです。

これを実際にエクセルで見てみると以下の個所です。

宛先の入力されたセルですね!

つまり上記①の『MAILITEM_OBJ.To = Cells(i, 2).Value』は、宛先は『B4セルの文字(数字)』だ!と指定していることになります。

2-4.繰り返し処理

以下の図のように、『Do While Cells(i, 7) <> “”』と『Loop』の記述がありますが、この二つで挟まれた処理はループするのです。

しかし永遠にループしては困るので、特定の条件が当てはまる限りループするように記述しているのです。

まずこれまでの知識で『Cells(i, 7)』は読めますよね。

一行上で『i = 4』と宣言しているので『4行目の7列目のセルの文字(数字)』ですよね。

そしてその横の『<>』は『ではない』という意味です。イコールの反対です。

またさらにその横の『””』は空白という意味です。

つまり『4行目の7列目のセルの文字(数字)が空白でない限りループしろ』と書いてあるのです!(つまりG列の本文の入力されたセル)

そして『Loop』の直前で『i = i + 1』と宣言してiは5に変化しますよね?

よって以下の流れでプログラムは進みます。

プログラムの流れ

①『i = 4』で『iは4だと宣言する』。

②『Do While Cells(i, 7) <> “”』で『4行目の7列目のセルの文字(数字)が空白でない限りループしろ』と宣言。

③i行目(最初は4行目)の各対応するセルに入力されている通りの宛先や本文などでメールを作成する。

④『i = i + 1』でiは5に変化する。

⑤『Loop』にたどり着いたら『Do While Cells(i, 7) <> “”』の直下に戻りまたメール作成をする。

 その時はiは5になっているので、5行目の各対応するセルに入力されている通りの宛先や本文などでメールを作成する。

⑥そして『i = i + 1』でiは6に変化して『Loop』でまた先頭に戻り…

⑦4行目の7列目のセルの文字(数字)が空白になったらマクロが停止する。

このようにループ処理でプログラムに参照させる行を1ずつ変化させていくことで、エクセルの表に用意した通りの内容でメールを一瞬で大量に作成することができるのです。

2-5.このマクロを書き換える場合

ここまでで最低限の読み方は理解できたと思います。

自分で多少書き換えることもできると思いませんか?

例えば、このエクセルの表が10行目から始まるなら上記コードの『i = 4』の部分は『i = 10』と書き換えるべきです。

もし表の本文の列がG列(7列目)ではなくH列(8列目)にズラしたとしたら、『Cells(i, 7).Value』を『Cells(i, 8).Value』に書き換えればよいというわけです。

2-6.マクロ実行時にエラーが出る場合

マクロ実行時に以下のような『プロジェクトまたはライブラリが見つかりません。』というエラーが出る場合の対処方法を記載します。

本ページの項目『2-1.マクロのコードを見てみる』に記載のやり方で、マクロのコードを呼び出し『ツール』→『参照不可:Microsoft Outlook 16.0 Object Library』のチェックを外します

次に、下のほうに下っていって『Microsoft Outlook ××.× Object Library』のチェックを入れてOKボタンを押してください

※××.×の部分はお使いのエクセルのバージョンによって変わります。

以上の作業によって自身のエクセルのバージョンに合わせた機能を使えるように設定されました。

これでエラーが解消されます。

3.Outlookについて補足

宛先に複数名のアドレスを入れたい場合は、アドレスとアドレスを『;』で区切ればOKです。

そうするとOutlookが勝手にそこが区切りなんだと判断してくれます。

4.まとめ

・エクセルでメールを大量に作れる!

・セルに入力されている文字や数字は『Cells(行, 列).Value』で表せる。

・変数とは何にでも変化できる”箱”。

・『Do While ~』と『Loop』で挟まれた指示はループする。

 

さあプログラムを学んで自分の作業をどんどん楽にしていきましょう!