Outlookの下書きフォルダのメールをVBAマクロで一斉送信する方法

更新日:2026/3/24Office

Outlookの下書きフォルダに溜めたメールをVBAマクロでまとめて一斉送信する方法を解説します。複数の下書きメールをボタン1つで一括送信できるため、毎月同じ案内メールを大量に送る業務などに役立ちます。

OutlookのVBAマクロで下書きフォルダのメールを一斉送信する

対象OS Windows 11

Outlookの「下書き一斉送信」をマクロで自動化すると何がラクになるか

毎月同じ内容の案円メールを大量に送っていたり、ExcelからOutlookに下書きだけ作って最後にまとめて送りたい場面がありますか。1通ずつ手動で送信ボタンを押していくのは件数が多いほど手間がかかり大変です。

VBAマクロを使えば、「下書きまでは手作業(または別マクロ)で作成 → 内容を確認 → ボタン1つで一斉送信」というワークフローを実現できます。本記事ではOutlookの下書きフォルダのメールをVBAで一括送信する方法を、初心者向けにわかりやすく解説します。

マクロで下書き一斉送信する際の前提条件・注意点

本記事で紹介するマクロは、Windows環境のOutlookデスクトップ版(Microsoft 365、Outlook 2019/2021)を対象としています。新しいバージョンのOutlookでは動作しませんのでご注意ください。また、マクロを実行するにはOutlookのVBAマクロが有効になっている必要があります。

業務での一括送信は誤送信リスクを伴います。本番運用の前に、必ず自分宛のテストメールで動作確認を行い、社内ルールや情報システム部門への確認も忘れずに行ってください。なお、本記事のマクロには宛先が空の下書きを送信しないための安全対策も含んでいます。

本記事で紹介する、下書きフォルダ内のメール一括送信の流れは、「下書きフォルダ」を取得 > 「メールアイテム」をループ > 宛先が入っているメールだけ繰り返し「送信」するという処理をマクロで実現します。

1. 下書きを一斉送信するサンプルマクロコード(全件送信)

下書きフォルダ内のすべてのメールを一括送信するマクロです。下書きフォルダ内のメールを送信する前に確認ダイアログが表示されるので、誤って送信を開始してしまうリスクを低減します。また、宛先が空のメールは自動でスキップされます。なお、VBAマクロを使うには、OutlookのVBAエディタを開いてコードを貼り付けるための「標準モジュール」を追加する必要があります。

  1. Outlookを起動したあと、キーボードのAlt+F11キーを押して、「Microsoft Visual Basic for Applications(以下、VBA)」エディタを開きます。
  2. VBAエディタのメニューバーで「挿入」をクリックし、表示されたメニューの中から「標準モジュール」をクリックします。
  3. 左側のプロジェクトエクスプローラーに「Module1」が追加され、右側にコード入力エリアが表示されます。(モジュール名は分かりやすい名称に変更しても構いません)
  4. VBAエディタを起動し、標準モジュールを追加する

    プロジェクトエクスプローラーにデフォルトで表示されている「Microsoft Outlook Objects」内の「ThisOutlookSession」は、Outlookの起動・終了イベントで利用します。追加する汎用マクロは、標準モジュールを追加して記述してください。

  5. 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
              
  6. VBAエディタのツールバーにある「▶(実行)」ボタンをクリックするか、F5キーを押してマクロを実行します。マクロが開始されると、「下書きフォルダのメールを〇件送信します。よろしいですか?」という確認ダイアログが表示されます。
  7. 確認ダイアログで「はい」をクリックすると送信が開始されます。「いいえ」をクリックするとキャンセルされ、メールは送信されません。
  8. 確認ダイアログで「はい」をクリック
  9. 「送信が完了しました。」と表示されたら、Outlookの「送信済みアイテム」フォルダを確認します。送信済みアイテムフォルダにメールが表示されていれば完了です。

メールが送信されるとアイテムが下書きフォルダから消えるため、前から順番にループするとインデックスがずれて一部のメールが送信されない場合があります。これを回避するために、コードに「For i = intCount To 1 Step -1」を追加し、逆順にすることでこの問題を回避します。

2. マクロをワンクリックで実行できるようにする

毎回VBAエディタを開かなくてもマクロを実行できるよう、クイックアクセスツールバーにマクロのボタンを追加します。

  1. Outlookのウィンドウ上部にあるクイックアクセスツールバーの右端の「▼」をクリックします。
  2. 「クイックアクセスツールバーのユーザー設定」メニューが表示されたら、「その他のコマンド」をクリックします。
  3. 「Outlookのオプション」ダイアログの「クイックアクセスツールバー」ページが開いたら、「コマンドの選択」ドロップダウンから「マクロ」を選択します。
  4. 作成したマクロ(SendAllDraftsなど)が一覧に表示されたら、追加したいマクロを選択し、「追加」ボタンをクリックします。(複数のマクロを追加する場合は繰り返してください)
  5. マクロを選択し「追加」をクリック
  6. 「OK」をクリックしてダイアログを閉じます。クイックアクセスツールバーにマクロのボタンが追加されます。
  7. クイックアクセスツールバーに追加されたボタンをクリックしてマクロが実行されることを確認します。次回からはこのボタンをクリックするだけでマクロを実行できます。

ボタン名を変更したい場合は、「追加」後に右側のリストでボタンを選択し「変更」をクリックすると、表示名やアイコンをカスタマイズできます。「下書き一斉送信」など、わかりやすい名前に変えておくと便利です。

こんなときは:よくあるつまずきポイントと対処法

マクロ実行時によく発生する問題と、その対処法です。

  • 「セキュリティに影響を及ぼす可能性のある問題点が検知されました」とメッセージが表示され、マクロが動かない・ボタンが押せない
    →「ファイル」>「オプション」>「セキュリティ センター」>「セキュリティ センターの設定」>「マクロの設定」を開き、「すべてのマクロを有効にする」を選択してOutlookを再起動してください。
  • マクロを選択し「追加」をクリック
  • 下書きフォルダにメールがあるのに「メールがありません」と表示される
    →Outlookを再起動して同期を更新することで解決する場合があります。複数のメールアカウントを利用している場合、本マクロはメインアカウントの下書きフォルダのみを対象とします。
  • 宛先が空の下書きを誤送信したくない
    →本記事のマクロには「Recipients.Count > 0」の条件チェックが含まれており、宛先(To/Cc/Bcc)が空の下書きは自動的にスキップされます。送信前には必ず下書きフォルダの内容を目視で確認してください。

Outlookの下書き一斉送信マクロは、Excelマクロと組み合わせることでさらに強力なツールになります。Excelに宛先リスト(名前・メールアドレス・本文など)を用意しておき、ExcelのVBAマクロでOutlookの下書きを自動作成してから内容を確認し、本記事のマクロで一斉送信するというワークフローが構築できます。

関連サイト(外部)

MailItem.Send メソッド(Outlook)- Microsoft Learn