VBAを使えば、Gmailを操作してメールを自動送信することができます。この方法を使えば、Outlookがなくても、エクセルから自動でメールを送ることができます。
たとえば、プログラムを設定しておけば、ボタン一つでメールを送ることができます。
ここでは、VBAを使ってGmailを送る方法を紹介します。基本操作から、メール書式変更やリンクを付ける方法といった上級テクニックまで解説します。
目次
CDOを活用してVBAでGmailのメールを送信!準備しておくこと
エクセルVBAを使ってGmailを送信する前に準備しておくことがあります。
準備|Gmailセキュリティ「安定性の低いアプリを許可」を有効に
事前準備として、送信に使いたいGmailアドレスについて、「安定性の低いアプリを許可」を有効にしておく必要があります。
設定方法は、こちらのサイトから、Gmailセキュリティを「安定性の低いアプリを許可」を有効にしておきます。
このとき、送信に使いたいGmailアドレスでログインをしておく必要がありますので、注意してください。
上記の部分をクリックすると、以下のように変更されます。
もしかすると、「安定性の低いアプリを許可」と聞くと、不安に思うかもしれません。しかし、私がこれまで数年使ってきましたが、これといった不具合はありません。
「安定性の低いアプリを許可」しても問題なく利用できるはずです。これでメールを送る準備整いました。
VBAからGmailでメールを新規作成して送信!コードを徹底解説
ここからは、VBAを使ってGmailを操作して、メールを送信するプログラムを紹介します。
サンプルコードはこちら!コピペして活用しよう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Option Explicit Sub Gmail_send_textmail() '''コード1|変数設定 Dim cdoMsg, cdoconf As Object Dim strbody, kenmei, honbun, credit, tenpu As String Dim cdoFlds As Variant Dim k As Long '''コード2|CDOを利用して作成 Set cdoMsg = CreateObject(CDO.Message) Set cdoconf = CreateObject(CDO.Configuration) cdoconf.Load -1 With cdoconf.Fields .Item(http://schemas.microsoft.com/cdo/configuration/sendusing) = 2 .Item(http://schemas.microsoft.com/cdo/configuration/smtpserver) = smtp.gmail.com .Item(http://schemas.microsoft.com/cdo/configuration/smtpserverport) = 465 .Item(http://schemas.microsoft.com/cdo/configuration/smtpauthenticate) = True .Item(http://schemas.microsoft.com/cdo/configuration/smtpusessl) = True .Item(http://schemas.microsoft.com/cdo/configuration/sendusername) = Range(D2).Value .Item(http://schemas.microsoft.com/cdo/configuration/sendpassword) = Range(D3).Value .Update End With '''コード3|重要度を変更 cdoMsg.Fields.Item(urn:schemas:mailheader:X-Priority) = 1 cdoMsg.Fields.Update '''コード4|複数の添付ファイル For k = 13 To 15 If Range(D ; k).Value <> Then tenpu = Range(D ; k).Value cdoMsg.AddAttachment tenpu Else Exit For End If Next If tenpu <> Then tenpu = Right(tenpu, Len(tenpu) - 1) End If '''コード5|件名、本文、署名の設定 kenmei = Range(D10).Value strbody = Range(D11).Value credit = Range(D12).Value With cdoMsg Set .Configuration = cdoconf .From = Range(D5).Value .To = Range(D6).Value .CC = Range(D7).Value .BCC = Range(D8).Value .MDNRequested = True .subject = kenmei .TextBody = strbody .send End With '''コード6|送信日時を取得 Range(D16).Value = Now End Sub |
それでは、コードを解説していきます。
コード1|変数設定
1 2 3 4 5 6 7 |
Option Explicit Sub Gmail_send_textmail() '''コード1|変数設定 Dim cdoMsg, cdoconf As Object Dim strbody, kenmei, honbun, credit, tenpu As String Dim cdoFlds As Variant Dim k As Long |
ここは、変数の設定です。とくに解説する部分はありません。
コード2|CDOを利用して作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'''コード2|CDOを利用して作成 Set cdoMsg = CreateObject(CDO.Message) Set cdoconf = CreateObject(CDO.Configuration) cdoconf.Load -1 With cdoconf.Fields .Item(http://schemas.microsoft.com/cdo/configuration/sendusing) = 2 .Item(http://schemas.microsoft.com/cdo/configuration/smtpserver) = smtp.gmail.com .Item(http://schemas.microsoft.com/cdo/configuration/smtpserverport) = 465 .Item(http://schemas.microsoft.com/cdo/configuration/smtpauthenticate) = True .Item(http://schemas.microsoft.com/cdo/configuration/smtpusessl) = True .Item(http://schemas.microsoft.com/cdo/configuration/sendusername) = Range(D2).Value .Item(http://schemas.microsoft.com/cdo/configuration/sendpassword) = Range(D3).Value .Update End With |
セルD2にGmailのUserID
セルD3にGmailのパスワード
この2つは、あなたが使うGmailの設定を入力しておきます。
コード2では、CDOを利用して、Gmailを送信できるように設定をします。セルD2とD3以外は、上記の設定を変更する必要はありません。
なお、設定そのものは、おまじないのようなものなので、メールを送りたいだけなら、覚える必要はありません。
コード3|重要度を変更
1 2 3 |
'''コード3|重要度を変更 cdoMsg.Fields.Item(urn:schemas:mailheader:X-Priority) = 1 cdoMsg.Fields.Update |
重要度は、上記の設定を行えば、設定可能です。
コード4|複数の添付ファイル
1 2 3 4 5 6 7 8 9 10 11 12 |
'''コード4|複数の添付ファイル For k = 13 To 15 If Range(D ; k).Value <> Then tenpu = Range(D ; k).Value cdoMsg.AddAttachment tenpu Else Exit For End If Next If tenpu <> Then tenpu = Right(tenpu, Len(tenpu) - 1) End If |
このプログラムでは、以下の画像のとおり
セルD13~D15までに添付ファイルのファイルパスを入力します。
ファイルパスとは、以下の手順で確認できます。
[1] ファイルを右クリック
[2] プロパティをクリック
[3] セキュリティタブをクリック
[4] オブジェクト名 ←これが、ファイルパスを指しています。
このプログラムでは、最大3つまでファイルを添付できるようにしています。なお、すべて空欄の場合は、ファイルは添付されません。
コード5|件名、本文、署名の設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'''コード5|件名、本文、署名の設定 kenmei = Range(D10).Value strbody = Range(D11).Value credit = Range(D12).Value With cdoMsg Set .Configuration = cdoconf .From = Range(D5).Value .To = Range(D6).Value .CC = Range(D7).Value .BCC = Range(D8).Value .MDNRequested = True .subject = kenmei .TextBody = strbody .send End With |
セルD5:メールの送信元
セルD6:メールの宛先(To)
セルD7:メールの宛先(CC)
セルD8:メールの宛先(BCC)
セルD10:メールの件名
セルD11:メールの本文
セルD12:署名
cc、bccは空欄でもメール送信可能です。
12行目以降について、説明すると、
12行目の.MDNRequested = True は、開封通知
13行目の.TextBody は、メール本文をテキスト型で作成するという意味です。テキスト型なので、文字装飾ができません。文字装飾とは、赤文字にしたり、フォントサイズを変更したりです。
14行目の.send は、メール送信
コード6|送信日時を取得
1 2 |
'''コード6|送信日時を取得 Range(D16).Value = Now |
セルD16に送信日時を出力します。現在時刻を取得することで、送信時刻をみなしています。
メールの書式設定、書式変更(フォント、サイズ、文字の色)をしたいなら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Option Explicit Sub Gmail_send_htmlmail() '''コード1|変数設定 Dim cdoMsg, cdoconf As Object Dim strbody, kenmei, honbun, credit, tenpu As String Dim cdoFlds As Variant Dim k As Long '''コード2|CDOを利用して作成 Set cdoMsg = CreateObject(CDO.Message) Set cdoconf = CreateObject(CDO.Configuration) cdoconf.Load -1 With cdoconf.Fields .Item(http://schemas.microsoft.com/cdo/configuration/sendusing) = 2 .Item(http://schemas.microsoft.com/cdo/configuration/smtpserver) = smtp.gmail.com .Item(http://schemas.microsoft.com/cdo/configuration/smtpserverport) = 465 .Item(http://schemas.microsoft.com/cdo/configuration/smtpauthenticate) = True .Item(http://schemas.microsoft.com/cdo/configuration/smtpusessl) = True .Item(http://schemas.microsoft.com/cdo/configuration/sendusername) = Range(D2).Value .Item(http://schemas.microsoft.com/cdo/configuration/sendpassword) = Range(D3).Value .Update End With '''コード3|重要度を変更 cdoMsg.Fields.Item(urn:schemas:mailheader:X-Priority) = 1 cdoMsg.Fields.Update '''コード4|複数の添付ファイル For k = 13 To 15 If Range(D ; k).Value <> Then tenpu = Range(D ; k).Value cdoMsg.AddAttachment tenpu Else Exit For End If Next If tenpu <> Then tenpu = Right(tenpu, Len(tenpu) - 1) End If '''コード5|件名、本文、署名の設定 kenmei = Range(D10).Value ' 件名作成 strbody = Replace(Range(D21).Value, vbLf, <br>) ' メール本文作成 credit = Range(D12).Value ' メール本文作成 With cdoMsg Set .Configuration = cdoconf .From = Range(D5).Value .To = Range(D18).Value ; , ; Range(D19).Value ; , ; Range(D20).Value .CC = Range(D7).Value .BCC = Range(D8).Value .MDNRequested = True .subject = kenmei .htmlbody = strbody .send End With '''コード6|送信日時を取得 Range(D16).Value = Now End Sub |
コード5でHTMLメールに設定する
メールの書式設定は、コード5の部分だけが、影響するので、コード5だけを解説します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'''コード5|件名、本文、署名の設定 kenmei = Range(D10).Value ' 件名作成 strbody = Replace(Range(D21).Value, vbLf, <br>) ' メール本文作成 credit = Range(D12).Value ' メール本文作成 With cdoMsg Set .Configuration = cdoconf .From = Range(D5).Value .To = Range(D18).Value ; , ; Range(D19).Value ; , ; Range(D20).Value .CC = Range(D7).Value .BCC = Range(D8).Value .MDNRequested = True .subject = kenmei .htmlbody = strbody .send End With |
メールの書式設定は、13行目のhtmlbodyにするのがコツです。これでメールがHTMLを認識してくれます。
HTMLメールを利用すると、ハイパーリンク、フォント変更などの装飾が可能になります。それでは、詳しくみていきます。
本文の中にハイパーリンク設定
ハイパーリンクを設定したい文章に以下のように a hrefを使います。たとえば、ここでは、以下のようにhtmlを書くと、
メールでは、以下のように表示されます。
メール本文を改行する
このプログラムではセルD21の文章をメール本文に設定しています。
しかし、htmlメールにすると、セル内の改行を認識してくれなくなります。何も処理をせずにメールを作成すると、以下のようになってしまいます。
そこで、セル内の改行を認識させるように
を差し込むプログラムを入れます。
1 |
’3行目:strbody = Replace(Range(D21).Value, vbLf, <br>) |
とすると、エクセル内の改行をhtmlの改行コード< br >に変更してくれます。
HTMLメールでは、< br >が改行を表すため
これでメールが改行されるようになります。
複数の宛先に送る方法
1 |
9行目:.To = Range(D18).Value ; , ; Range(D19).Value ; , ; Range(D20).Value |
のように , でつないでやると複数の宛先にメール送信できます。
必要であれば for~nextを入れて、宛先を自動で増減させることも可能です。
文字種類、文字サイズ、色の変更
セルD21にhtmlを利用して、文字の種類、文字サイズ、色を変更できます。
たとえば、以下の文章をセルD21に記入します。
と記載すると、メールでは以下のように表示されます。
CDOを活用してVBAからメール送信!サンプルコードのダウンロードはこちら
今後、要望に応じてエクセルのサンプルコードをダウンロードできるようにします。
OutlookやGmailを操作する方法について知りたいなら
この記事では、Gmailのメール送信の方法を解説しました。しかし、OutlookでもVBAを使ってメール送信が可能です。
こちらの記事で詳しく解説していますので、合わせて読んでみて下さい。
Outlookメールの場合、VBAで時間指定して送信することも可能です。
また、OutlookやGmailで受信したメールをエクセルに一覧にする方法もあります。それは、こちらの記事で紹介しています。
ぜひ読んでみてください。
自分にはレベルが高い…と感じたなら、まずは基礎から学ぼう!
この記事を読んだけど、「よくわからない」、「自分で編集できそうにない」と感じるかもしれません。
もし、そう感じる場合は、基礎を完全に理解できていない可能性があります。マクロの基礎を理解していない場合、メール操作はかなりハードルが高いです。
そのため、「ちょっと自信がないな…」と感じるなら、まずはエクセルマクロの基礎から学ぶことをオススメします。
土台ができていない内に学ぶと、使いこなせるようになる前に挫折にしてしまいます。
もしきちんと学ぶなら、こちらの無料動画がオススメです。基礎を確実に学んでから、トライしてみてください。
「マクロの力を実感したい」と感じているなら、こちらの記事がオススメです。マクロが入ったエクセルファイルをダウンロードできるようにしています。もし詳細が知りたいなら、以下の記事で紹介していますので、合わせて読んでみてください。
サンプル1|月末処理の自動処理する
サンプル2|エクセルで在庫管理するマクロ
サンプル3|outlookのメールを自動送信する
サンプル4|outlookの受信メールをエクセルに一覧にして、添付ファイルも保管する
サンプル5|エクセルマクロVBAで大量データを比較・照合してマッチングする方法
サンプル6|ヤフオクの情報を自動取得して、エクセルに出力する
サンプル7|エクセルの情報をワードに差し込み、印刷まで行う
ぜひご活用ください。