手動で1件ずつ送信しても、大した負荷にならないんだよ。自動でバババッって送れないかなぁ?
Outlookから、指定の宛先にメールを連続送信するマクロを紹介します。
ファイルの添付も可能なので、容量の大きいメールを送るテストにも使用できます。
(例)3秒間隔で連続10回メールを送信
【事前準備】Excelシートにデータを入力する
Excelシートに入力したデータを利用してメールアイテムを作成します。下記のセル番地どおりに枠を用意しましょう。
- 「添付ファイルパス」「添付ファイル名」は任意入力です。添付ファイルが不要な場合、セルへの入力は不要です。
- 添付できるファイルは1つのみです。複数ファイルを添付したい場合、zipファイルにして、B6セルにzipファイル名を設定すればOKです。
指定の宛先に連続メール送信するマクロ
以下のコードを標準モジュールに貼り付けてmainプロシージャを実行してください。送信済メールは、Outlookの「送信済みアイテム」に入ります。
※マクロを実行する前に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 52 53 54 55 56 57 58 59 60 61 62 63 |
Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub main() Dim rc As Long rc = MsgBox _ ("連続送信を開始します。よろしいですか?", vbOKCancel + vbQuestion) If rc = vbOK Then Call SendMail MsgBox "メール送信が終了しました。" End If End Sub Sub SendMail() Dim OutlookObj As Outlook.Application 'Outlookオブジェクト Set OutlookObj = CreateObject("Outlook.Application") Dim Interval As Long, cnt As Long Interval = Range("D2").Value * 1000 '送信間隔 cnt = Range("D3").Value '繰り返し回数 Dim isAttach As Boolean 'ファイルを添付するか否か If Range("B5").Value <> "" Then isAttach = True Dim attached As String '添付ファイル attached = Range("B5").Value & "\" & Range("B6").Value End If Dim i As Long For i = 1 To cnt '指定回数、送信を繰り返す Dim mailItemObj As Outlook.MailItem 'Mailオブジェクト Set mailItemObj = OutlookObj.CreateItem(olMailItem) Dim myattach As Outlook.Attachments '添付ファイルオブジェクト Set myattach = mailItemObj.Attachments mailItemObj.To = Range("B2").Value 'To mailItemObj.CC = Range("B3").Value 'CC mailItemObj.Subject = Range("B4").Value & "(" & i & ")" '末尾に連番を付与 mailItemObj.Body = Range("B7").Value '本文 If isAttach Then myattach.Add attached '添付ファイルが存在する場合、付与 mailItemObj.Send 'メール送信 Set mailItemObj = Nothing Set myattach = Nothing Sleep Interval Next i End Sub |
ポイント:Sleep関数で処理を一時停止する
VBAの処理は非常に高速です。一時停止の処理を挟まないと、Outlookのメール作成&送信処理が追いつかず、Outlookがフリーズしてしまいます。
そのため、For~Nextステートメント内で、メール1件ごとに処理を一時停止しています。この記事では、3秒間隔に設定しています。お好みで秒数を設定してみてください。
Sleep関数とは
指定の時間、マクロ処理を停止する関数です。停止する時間をミリ秒単位で指定します。
【使い方】
Sleep 停止するミリ秒数
→3秒停止する場合、Sleep 3000 と記述します。
※Sleep関数は、VBAの関数ではなくWindows APIの関数です。
繰り返し処理のFor~Nextステートメント内でSleep関数を使用しています。このSleep関数は、モジュールの一番上に記述することで使用できます。
1 |
Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) |
※くれぐれも注意してお使いください
※誤送信のないよう、細心の注意を払ってお使いください。また、くれぐれも、悪質な利用はしないようお願いいたします。
【再掲】くれぐれも悪質な利用はしないようお願いいたします。
こんなメール届いたらドン引きだわ!(笑)
他にもVBAでOutlookを操作するマクロを紹介しています!