エクセルマクロVBAで時間指定してOutlookメールを送りたい場合、配信タイミングの機能を使います。
配信タイミングをVBAで自動設定すれば、夜中でも早朝でも好きな時間にメールを送信できるようになります。
目次
この記事を読んで出来ること|エクセルVBAを使ってOutlookメールを時間指定で自動配信する
この記事のマクロを起動すると、Outlookメールが自動で作成されます。そのとき、配信タイミングを設定して、送信する時間を指定したメールが作成されます。
考え方としては、Outlookメールの機能である配信タイミングをVBAで操作します。
配信タイミングとは、指定日時以降に配信する機能です。具体的には、以下の方法で手動で設定可能です。
Outlookを開いて
[1] 新しい電子メールをクリック
[2] 新規のメールのオプションをクリック
[3] 配信タイミングをクリック
[4] 指定日時以降に配信
この記事では、上記の[1]~[4]を手動ではなくVBAによって、メール送信のタイミングを指定する方法を紹介します。
事前準備|エクセルとVBE参照設定を設定する
この記事で紹介するプログラムを使うには、以下の2つを事前に準備しておく必要があります。
[2] VBEの参照設定を変更しておく
詳しく解説します。
準備1|エクセルに情報をあらかじめ記入しておく
エクセルのセルには、以下の情報を入れておきます。
[2] 件名
[3] 本文
[4] 署名(クレジット)
[5] 添付ファイルURL
[6] 送信日 yyyy/mm/ddで設定
[7] 送信時間 hh:mm:ssで設定(省略した場合は、00:00:00。画像の場合はssを省略しているため、実際は06:00:00となる)
注意点1|To宛先を複数設定したい場合
To宛先を複数設定したい場合は、メールアドレスを「;」で区切ります。以下のような記載です。
abc@gmail.com ; def@gmail.com ; ghi@gmail.com
注意点2|添付ファイルURLはフルパスで
添付ファイルURLは、ファイルのフルパスを入れます。ファイルのフルパスは、以下の画像を参考にしてください。
[1] 添付したいファイルを右クリック
[2] プロパティをクリック
[3] セキュリティのタブをクリック
[4] オブジェクト名 (=フルパス)
準備2|VBEで外部ライブラリへの参照設定でOutlook型を追加
Microsoft Outlook 15.0 Object Libraryにチェックを入れることで、Outlook操作の設定ができるようになります。バージョンが古い場合、15.0ではないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
詳細はこちらの画像の通りです。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
アウトルックでメールを指定した時間に自動送信|サンプルコード
ここからは、VBAで時間指定してOutlookメールを送信するサンプルコードを紹介します。
このマクロを起動させると、上記の赤枠で囲われた時間にメール送信されます。以下、全体のプログラムです。必要なら、このままコピペして使ってください。
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 |
Option Explicit Sub sendmail_fixedtime() '---コード1|outlookを起動する Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付 Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成 Dim mailItemObj As Outlook.MailItem 'Outlookで使用するオブジェクト生成 '---コード2|差出人、本文、署名を取得する--- toaddress = Range(B2).Value 'To宛先 ccaddress = Range(B3).Value 'cc宛先 bccaddress = Range(B4).Value 'bcc宛先 subject = Range(B5).Value '件名 mailBody = Range(B6).Value 'メール本文 credit = Range(B7).Value 'クレジット '---コード3|メールを作成して、差出人、本文、署名を入れ込む--- Set outlookObj = CreateObject(Outlook.Application) Set mailItemObj = outlookObj.CreateItem(olMailItem) mailItemObj.BodyFormat = 3 'リッチテキストに変更 mailItemObj.To = toaddress 'to宛先をセット mailItemObj.CC = ccaddress 'cc宛先をセット mailItemObj.BCC = bccaddress 'bcc宛先をセット mailItemObj.subject = subject '件名をセット '---コード4|メール本文を改行する mailItemObj.Body = mailBody ; vbCrLf ; vbCrLf ; credit 'メール本文 改行 改行 クレジット '---コード5|自動で添付ファイルを付ける--- Dim attached As String Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成 Set myattachments = mailItemObj.Attachments attached = Range(B8).Value '添付ファイル myattachments.Add attached '---コード6|メール送信する時間を設定する--- Dim d As Date Dim t As Variant d = Range(B9).Value t = Range(B10).Value mailItemObj.DeferredDeliveryTime = d ; ; t '---コード7|メールを送信する--- 'mailItemObj.Save '下書き保存 mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) mailItemObj.Send '---コード8|outlookを閉じる(オブジェクトの解放)--- Set outlookObj = Nothing Set mailItemObj = Nothing End Sub |
基本的には、こちらの記事で紹介している「アウトルックを起動してメールを送信する」という事例をベースにしています。
異なる点は、コード6のみです。それ以外は、上記の記事で解説していますので、そちらを読んでみてください。
コード6|メール送信する時間を設定する
1 2 3 4 5 6 |
'---コード6|メール送信する時間を設定する--- Dim d As Date Dim t As Variant d = Range(B9).Value t = Range(B10).Value mailItemObj.DeferredDeliveryTime = d ; ; t |
1行目:変数設定:dで日付を設定
2行目:変数設定:tで時間をVariant型で設定
4行目:d = エクセルのB9セルの値
5行目:t = エクセルのB10セルの値
7行目:生成したメールを時間設定する
マクロで作成した時間指定メールの注意点|解除方法や配信タイミング
このマクロで作成したメールに関する注意点を記載しておきます。
マクロを実行した後に、指定した時間を変更する
このマクロを動かすと、以下のように送信トレイに保管されます。指定時間になるまで、送信トレイで待機状態になるため、送信トレイのメールをクリックして設定を変更可能です。
[1] 送信トレイをクリック
[2] マクロを実行して作成したメール(待機状態)をクリック
[3] オプションをクリック
[4] 配信タイミングをクリック
[5] 指定日時以降に配信を変更
マクロで作成した時間指定メールを送信解除する
送信を中止したい場合は、送信トレイのメールを削除します。手順は以下の通りです。
[1] Outlookの送信トレイをクリック
[2] 日時指定マクロで作成したメールを右クリック
[3] 削除をクリック
時間指定した時刻にOutlookを起動しておかないと、メール配信されない場合がある
PCの使用環境により、Outlookが起動していないと送信されない場合があります。
たとえば、Exchange Server環境ではOutlookを起動していなくても送信されます。会社でOutlookを使っているような場合は、Outlookを閉じていても送信されます。
一方で、家庭で利用している場合は、Outlookを起動しておかないと送信されません。
指定した時間から少し遅れる場合がある
配信タイミングを設定したメールの場合、指定時刻を少し過ぎたタイミングでメール配信されます。これは、送受信の実行タイミングの設定によるものです。以下の画像の通り、送受信は定期的に自動で行われます。
[1] ファイル
[2] 詳細設定
[3] 送受信
[4] 次の時間ごとに自動的に送受信を実行する
送受信の実行タイミングを短く設定すれば、指定時刻に近いタイミングでメール送信されます。
時間指定で送信メールの送信時間はメールを作成した時間になる
マクロを使って、メールを作成した時間がメールの送信日時として表示されます。指定した時間ではありません。
メール送受信に関するプログラムを知りたいなら
こちらの記事でメール送受信の記事を読めますので、ぜひ合わせて読んでみてください。
outlookのメールを自動送信する
GmailのメールをVBAで送信する
outlookの受信メールをエクセルに一覧にして、添付ファイルも保管する
Gmailの受信メールを一覧にして、添付ファイルも保管する
自分にはレベルが高い…と感じたなら、まずは基礎から学ぼう!
この記事を読んだけど、「よくわからない」、「自分で編集できそうにない」と感じるかもしれません。
もし、そう感じる場合は、基礎を完全に理解できていない可能性があります。マクロの基礎を理解していない場合、メール操作はかなりハードルが高いです。
そのため、「ちょっと自信がないな…」と感じるなら、まずはエクセルマクロの基礎から学ぶことをオススメします。
土台ができていない内に学ぶと、使いこなせるようになる前に挫折にしてしまいます。
もしきちんと学ぶなら、こちらの無料動画がオススメです。基礎を確実に学んでから、トライしてみてください。