Outlookの下書きフォルダに溜めたメールをVBAマクロで一斉送信する方法を解説します。確認済みの下書きをボタン1つで全件送信できるため、毎月の案内メール配信など繰り返し作業の時間を削減できます。マクロコード・実行手順・失敗例・確認環境まで、この記事にまとめています。
対象OS Windows 11
Outlookの「下書き一斉送信」をマクロで自動化すると何がラクになるか
ExcelのリストをもとにOutlookの下書きを50件作成したあと、1通ずつ手動で送信ボタンを押していく——そんな作業をしたことはありませんか。毎月同じ案内メールを大量に送る業務では、この繰り返し操作が積み重なって無視できない手間になります。
「VBAと聞くと難しそう」と感じるかもしれません。ただ、今回紹介するコードはそのままコピーして貼り付けるだけで動きます。VBAマクロを使えば、「下書きまでは手作業(または別マクロ)で作成 → 内容を確認 → ボタン1つで一斉送信」というワークフローを実現できます。本記事ではOutlookの下書きフォルダのメールをVBAで一括送信する手順を解説します。
マクロで下書き一斉送信する際の前提条件・注意点
本記事で紹介するマクロは、Windows環境のOutlookデスクトップ版(Microsoft 365、Outlook 2019/2021)を対象としています。実際にWindows 11 + Outlook for Microsoft 365(バージョン2502)の環境で動作を確認しました。
2023年から順次導入されている「新しいOutlook(アプリ名に「Classic」と表記されていないもの)」では、VBAマクロ機能自体が搭載されていないため動作しません。現在お使いのOutlookが「新しいOutlook」に切り替わっている場合は、従来のOutlookに戻してから実行してください。また、マクロを実行するにはOutlookのVBAマクロが有効になっている必要があります。
業務での一括送信は誤送信リスクを伴います。本番運用の前に、必ず自分宛のテストメールで動作確認を行い、社内ルールや情報システム部門への確認も忘れずに行ってください。なお、本記事のマクロには宛先が空の下書きを送信しないための安全対策も含んでいます。
本記事で紹介する、下書きフォルダ内のメール一括送信の流れは、「下書きフォルダ」を取得 > 「メールアイテム」をループ > 宛先が入っているメールだけ繰り返し「送信」するという処理をマクロで実現します。
1. 下書きを一斉送信するサンプルマクロコード(全件送信)
下書きフォルダ内のすべてのメールを一括送信するマクロです。実行前に件数確認ダイアログが表示されるため、誤って送信を開始してしまうリスクを低減できます。宛先が空のメールは自動でスキップされます。マクロを動かすには、OutlookのVBAエディタに「標準モジュール」を追加してコードを貼り付ける必要があります。標準モジュールは汎用マクロを書くための専用エリアで、1度追加すれば以降は使い回せます。
- Outlookを起動したあと、キーボードのAlt+F11キーを押して、「Microsoft Visual Basic for Applications(以下、VBA)」エディタを開きます。
- VBAエディタのメニューバーで「挿入」をクリックし、表示されたメニューの中から「標準モジュール」をクリックします。
- 左側のプロジェクトエクスプローラーに「Module1」が追加され、右側にコード入力エリアが表示されます。(モジュール名は分かりやすい名称に変更しても構いません)
-
VBAエディタのModule1のコード入力エリアに、以下のコードをそのまま貼り付けます。
コードを貼り付けたら上書き保存(Ctrl+S)します。
Sub SendAllDrafts() Dim objDrafts As Outlook.MAPIFolder Dim objItem As Object Dim i As Integer Dim intCount As Integer ' 下書きフォルダを取得 Set objDrafts = Application.Session.GetDefaultFolder(olFolderDrafts) intCount = objDrafts.Items.Count ' 下書きが0件の場合は終了 If intCount = 0 Then MsgBox "下書きフォルダにメールがありません。", vbInformation Exit Sub End If ' 送信確認ダイアログ If MsgBox("下書きフォルダのメールを " & intCount & " 件送信します。よろしいですか?", _ vbYesNo + vbQuestion) <> vbYes Then Exit Sub End If ' 後ろからループして送信(送信後にアイテムが減るため逆順にする) For i = intCount To 1 Step -1 Set objItem = objDrafts.Items(i) ' MailItemかつ宛先が入っているものだけ送信 If TypeOf objItem Is Outlook.MailItem Then If objItem.Recipients.Count > 0 Then objItem.Send End If End If Next i MsgBox "送信が完了しました。", vbInformation End Sub - VBAエディタのツールバーにある「▶(実行)」ボタンをクリックするか、F5キーを押してマクロを実行します。マクロが開始されると、「下書きフォルダのメールを〇件送信します。よろしいですか?」という確認ダイアログが表示されます。
- 確認ダイアログで「はい」をクリックすると送信が開始されます。「いいえ」をクリックするとキャンセルされ、メールは送信されません。
- 「送信が完了しました。」と表示されたら、Outlookの「送信済みアイテム」フォルダを確認します。送信済みアイテムフォルダにメールが表示されていれば完了です。
プロジェクトエクスプローラーにデフォルトで表示されている「Microsoft Outlook Objects」内の「ThisOutlookSession」は、Outlookの起動・終了イベントで利用します。追加する汎用マクロは、標準モジュールを追加して記述してください。
メールが送信されるとアイテムが下書きフォルダから消えるため、前から順番にループするとインデックスがずれて一部のメールが送信されない場合があります。これを回避するために、コードに「For i = intCount To 1 Step -1」を追加し、逆順にすることでこの問題を回避します。
2. マクロをワンクリックで実行できるようにする
毎回VBAエディタを開かなくてもマクロを実行できるよう、クイックアクセスツールバーにマクロのボタンを追加します。一度設定しておけば、次回以降はOutlookを開いてボタンをクリックするだけで一斉送信を開始できます。
- Outlookのウィンドウ上部にあるクイックアクセスツールバーの右端の「▼」をクリックします。
- 「クイックアクセスツールバーのユーザー設定」メニューが表示されたら、「その他のコマンド」をクリックします。
- 「Outlookのオプション」ダイアログの「クイックアクセスツールバー」ページが開いたら、「コマンドの選択」ドロップダウンから「マクロ」を選択します。
- 作成したマクロ(SendAllDraftsなど)が一覧に表示されたら、追加したいマクロを選択し、「追加」ボタンをクリックします。(複数のマクロを追加する場合は繰り返してください)
- 「OK」をクリックしてダイアログを閉じます。クイックアクセスツールバーにマクロのボタンが追加されます。
- クイックアクセスツールバーに追加されたボタンをクリックしてマクロが実行されることを確認します。次回からはこのボタンをクリックするだけでマクロを実行できます。
ボタン名を変更したい場合は、「追加」後に右側のリストでボタンを選択し「変更」をクリックすると、表示名やアイコンをカスタマイズできます。「下書き一斉送信」など、わかりやすい名前に変えておくと便利です。
こんなときは:よくあるつまずきポイントと対処法
実際にこのマクロを試したところ、セキュリティ設定が原因でボタンが押せないケースが最も多く発生しました。以下にパターンごとの対処法をまとめます。
-
「セキュリティに影響を及ぼす可能性のある問題点が検知されました」とメッセージが表示され、マクロが動かない・ボタンが押せない
原因:Outlookのマクロ設定がデフォルトで「無効」になっています。
→ 「ファイル」>「オプション」>「セキュリティ センター」>「セキュリティ センターの設定」>「マクロの設定」を開き、「すべてのマクロを有効にする」を選択してOutlookを再起動してください。 -
下書きフォルダにメールがあるのに「メールがありません」と表示される
原因:Outlookがサーバーと同期できておらず、フォルダの内容が最新の状態になっていない可能性があります。
→ Outlookを再起動して同期を更新することで解決する場合があります。複数のメールアカウントを利用している場合、本マクロはメインアカウントの下書きフォルダのみを対象とします。 -
下書きフォルダにメールがあるのに「メールがありません」と表示される
原因:Outlookがサーバーと同期できておらず、フォルダの内容が最新の状態になっていない可能性があります。
→ Outlookを再起動して同期を更新することで解決する場合があります。複数のメールアカウントを利用している場合、本マクロはメインアカウントの下書きフォルダのみを対象とします。 -
「新しいOutlook」を使っているためVBAエディタが開けない・マクロメニューが表示されない
原因:2023年以降に切り替わった「新しいOutlook(New Outlook)」は VBAマクロ機能に対応していません。まず従来のOutlookに戻す必要があります。
→ Outlookのメニューバーにある「ヘルプ」をクリックし、「従来のOutlookに移動」を クリックしてください。画面が切り替わったら、本記事の手順を最初から行ってください。 -
宛先が空の下書きを誤って送信してしまわないか不安
原因:マクロは下書きフォルダ内の全アイテムを処理対象にするため、宛先未入力の下書きも拾う可能性があります。
→ 本記事のマクロには「Recipients.Count > 0」の条件チェックが含まれており、宛先(To/Cc/Bcc)が空の下書きは自動でスキップされます。それでも、送信前には必ず下書きフォルダの内容を目視で確認してください。
実際に運用して気づくのは、「下書きの内容確認」と「送信」を分けられることが、このマクロの最大のメリットだということだと思います。ExcelマクロでOutlookの下書きを自動作成し、内容を確認したうえで本記事のマクロで一斉送信するワークフローを組み合わせると、さらに効率化できます。この記事の手順で解決しない場合は、Outlookのバージョンと「新しいOutlook」への切り替え状況を最初に確認してみてください。
確認環境 Windows 11 25H2 / Outlook for Microsoft 365(バージョン2502)
関連サイト(外部)
MailItem.Send メソッド(Outlook)- Microsoft Learn