Excel VBAでOutlookのメールを作成する方法をお探しですね。
広告
ExcelのVBAでOutlookメールを自動作成する方法【初心者向け】
ExcelのVBAを使ってOutlookを操作できるようになると、メールの宛先入力、件名の作成、本文の差し込み、ファイルの添付といった作業がぐっと楽になります。
特に、顧客リストや社内メンバーの一覧をExcelで管理しているなら、Outlookと連携させることで「Excelのデータをもとにメールを自動で作って、必要なときに一斉送信する」という便利な仕組みが作れます。
この記事では、初めての人でも分かるように、準備から基本のコード、複数の人への送信方法、そして誤送信を防ぐコツまで順番に説明していきます。
ExcelからOutlookを操作する仕組みと最初の準備
ExcelのVBAでOutlookを操作するというのは、Excel側のマクロでOutlookアプリを呼び出して、メールを作るためのオブジェクトを作成し、宛先や件名、本文などを設定していく仕組みです。
普段、手作業でOutlookの新規メール画面を開いて入力している内容を、VBAのコードで代わりにやってもらうイメージですね。
例えば、Excelのセルに書いてあるメールアドレスを「宛先」に設定したり、別のセルの文章を件名や本文に入れたりできます。
これによって、メール作成の時間が短縮できるだけでなく、入力漏れや転記ミスも減らせます。
まず準備として、VBE(Visual Basic Editor)を開いて「ツール」から「参照設定」を選び、「Microsoft Outlook XX.0 Object Library」にチェックを入れる方法があります。
これをやっておくと、VBA上で「Outlook.Application」や「Outlook.MailItem」といった型が使えるようになって、コードの補完も効きやすくなります。
ただし、会社の環境やOfficeのバージョンによって「XX.0」の数字は変わるので、自分の環境に合わせて確認してください。
参照設定を使わずに「CreateObject」でOutlookを呼び出す書き方もありますが、初心者の方はまず参照設定ありの方が分かりやすいと思います。
Excelシートの方には、メール送信に必要な情報を整理しておくと使いやすくなります。
例えば、1通だけ作る場合は、B2セルに宛先、B3にCC、B4にBCC、B5に件名、B6に本文、B7に署名、B8に添付ファイル名を入力する、というふうに決めておくと、VBA側の処理がシンプルになります。
一斉送信する場合は、1行を1通のメールとして扱って、A列に送信対象フラグ、B列に宛先、C列に氏名、D列に件名、E列に本文、F列に添付ファイルのパス、という感じで一覧にすると管理しやすいです。
大事なのは、コードを書く前に「Excelのどの列をOutlookのどの項目に使うか」を決めておくことです。
まずは1通のメールを自動で作る基本コード
最初は、Excelに入力した情報をもとにOutlookメールを1通作るコードから始めると、全体の流れがつかみやすくなります。
Outlookを操作するときは、まずOutlookアプリを起動して、次にメールアイテムを作成し、そのメールに宛先や本文を設定していきます。
最後に、画面に表示するか、下書き保存するか、すぐ送信するかを選びます。
実際の仕事では、いきなり送信するよりも、まず「Display」でメール画面を表示して内容を確認する運用から始めるのがおすすめです。
以下は、Sheet1の指定したセルを見てメールを作る基本的な例です。
誤送信を防ぐために、最初は「.Send」をコメントアウトして、「Display」で表示確認する形にしています。
ちゃんと動くことを確認してから、必要に応じて「.Send」を使うようにしてください。
“`vb
Option Explicit
Sub CreateOutlookMail()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(“Sheet1”)
Dim olApp As Outlook.Application
Dim mail As Outlook.MailItem
Set olApp = New Outlook.Application
Set mail = olApp.CreateItem(olMailItem)
With mail
.To = ws.Range(“B2”).Value
.CC = ws.Range(“B3”).Value
.BCC = ws.Range(“B4”).Value
.Subject = ws.Range(“B5”).Value
.Body = ws.Range(“B6”).Value & vbCrLf & vbCrLf & ws.Range(“B7”).Value
If ws.Range(“B8”).Value <> “” Then
If Dir(ws.Range(“B8”).Value) <> “” Then
.Attachments.Add ws.Range(“B8”).Value
End If
End If
.Display
‘.Send
End With
Set mail = Nothing
Set olApp = Nothing
End Sub
“`
このコードで使っている「vbCrLf」は、メール本文の中で改行を入れるための指定です。
Outlookメールの本文を普通のテキストとして作る場合は「.Body」を使って、文字を装飾したりリンクを入れたりしたい場合は「.HTMLBody」を使います。
添付ファイルについては、ファイルパスが空欄じゃないことに加えて、「Dir関数」で実際にファイルが存在するかを確認しています。
存在しないファイルを添付しようとするとエラーになるので、仕事で使うマクロではこういう事前チェックを入れておくと安全です。
Excelの宛先リストから個別メールを一斉送信する方法
一斉送信でよくある失敗は、全員を「To」や「CC」に入れてしまって、受信者同士にメールアドレスが見えてしまうことです。
ExcelのVBAからOutlookを操作して一斉送信する場合は、単純な同報メールではなく、Excelの宛先リストを1行ずつ読み込んで、相手ごとに1通ずつ個別メールを作る方法が実務向きです。
この方法なら、本文に相手の名前や会社名を差し込めるので、定型文でありながら個別対応のメールにできます。
請求書の送付、研修案内、リマインド通知、社内連絡など、Excelで対象者を管理している業務と相性がいいです。
以下の例では、2行目以降の宛先リストを順番に読み込んで、A列が「送信」になっている行だけメールを作ります。
B列に宛先、C列に氏名、D列に件名、E列に本文、F列に添付ファイルのパスがある前提です。
最初は「.Display」で1通ずつ表示して、内容が正しいことを確認してから「.Send」に切り替えるのが安全です。
“`vb
Option Explicit
Sub SendBulkOutlookMail()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(“List”)
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, “B”).End(xlUp).Row
Dim i As Long
For i = 2 To lastRow
If ws.Cells(i, “A”).Value = “送信” Then
Dim mail As Outlook.MailItem
Set mail = olApp.CreateItem(olMailItem)
With mail
.To = ws.Cells(i, “B”).Value
.Subject = ws.Cells(i, “D”).Value
.Body = ws.Cells(i, “C”).Value & ” 様” & vbCrLf & vbCrLf & _
ws.Cells(i, “E”).Value & vbCrLf & vbCrLf & _
“以上、よろしくお願いいたします。
”
If ws.Cells(i, “F”).Value <> “” Then
If Dir(ws.Cells(i, “F”).Value) <> “” Then
.Attachments.Add ws.Cells(i, “F”).Value
End If
End If
.Display
‘.Send
End With
Set mail = Nothing
End If
Next i
Set olApp = Nothing
End Sub
“`
この一斉送信コードのポイントは、「For文」でExcelの行を1行ずつ処理していることです。
A列に「送信」と入っている行だけを対象にしているので、送信したくない相手を一時的に除外できます。
また、本文の最初にC列の氏名を差し込むことで、「山田太郎 様」のような個別メールを自動で作れます。
たくさんのメールを送る場合は、まずテスト用の自分のメールアドレスだけで動作確認して、件名、本文、添付ファイル、宛先が正しいことを確認してから本番のリストに切り替えることが大切です。
誤送信を防ぐ運用のコツと応用テクニック
ExcelのVBAからOutlookを操作してメールを自動作成・一斉送信する方法は便利ですが、便利な分だけ誤送信のリスクもあります。
特に、宛先リストの列がずれていたり、古いメールアドレスが混ざっていたり、添付ファイルを間違えたり、本文の差し込みがうまくいかなかったりするのは、実際の仕事でよく起こる問題です。
なので、マクロの完成度だけじゃなく、運用ルールも含めて設計することが大事です。
例えば、いきなり「.Send」で送信せずに、最初は「.Display」で下書きを表示する、送信対象フラグを用意する、送信前に件数をメッセージボックスで確認する、といった工夫が効果的です。
仕事で使うなら、最低限こういう確認項目を入れておきたいです。
– 宛先が空欄じゃないか、メールアドレスの形式が明らかにおかしくないかを確認する
– 添付ファイルのパスが存在するか、相手ごとに正しいファイルになっているかを確認する
– 本番送信の前にテスト送信用のExcelシートで動作確認する
– 「.Send」を使う前に「.Display」か「.Save」で内容確認する運用にする
応用として、HTMLメールを作りたい場合は「.Body」じゃなくて「.HTMLBody」を使います。
HTMLBodyを使うと、リンクの挿入、文字の太字、表の貼り付けなんかができるようになります。
ただし、HTMLはタグの書き方を間違えると表示が崩れるので、まずはシンプルなテキストメールで安定運用して、必要になった段階でHTML化するのが現実的です。
また、重要度を設定したい場合は「.Importance」、開封確認を付けたい場合は「.ReadReceiptRequested」、配信日時を指定したい場合は「.DeferredDeliveryTime」を使うことで、Outlook側の機能をVBAから操作できます。
なお、会社のセキュリティ設定によっては、VBAからOutlookを操作したときに警告が表示されたり、自動送信が制限されたりする場合があります。
これはOutlookが不正なメール送信を防ぐための仕組みで、環境によって動作が違います。
大量のメール配信や外部のお客さんへの定期配信を行う場合は、VBAだけで完結させるんじゃなくて、社内ルール、Microsoft 365の送信制限、個人情報の取り扱いも確認しておく必要があります。
コードが書けることと、安全に運用できることは別なので、最初は「自動送信」よりも「自動作成して人が確認する」形から始めると失敗を防ぎやすくなります。
ExcelのVBAからOutlookを操作する一番のメリットは、普段使っているExcelのデータをそのままメール作成に活用できる点です。
お客さん別のメール、社内通知、リマインドメール、添付ファイル付きの請求書送付など、定型的で件数の多い作業ほど効果が出ます。
一方で、完全自動送信には誤送信や情報漏えいのリスクがあるので、参照設定、セルの設計、テスト送信、送信前の確認を丁寧に行うことが欠かせません。
まずは1通のメール自動作成から始めて、次にExcelリストを使った個別一斉送信へ広げていくことで、実際の仕事に合った安全なメール自動化を作れます。
広告
