「VBAでOutlookを操作して自動でメール送信してみたい…」
そんな疑問を持っていませんか?

・自動でメール送信するにはどうしたらいいの?
・宛先(To、CC、BCC)を指定してメールを送信するには?
・添付ファイルもメールに設定したい



その場合は、VBAで「Outlook操作」を
行うと解決します!
この記事では、「VBAを使用したメール自動送信方法」を詳しく解説します。
Outlookからメールを自動送信することで、Excelのセルに入力されたテンプレート情報(宛先、件名、本文など)を基に、一括でメールを送信できます。
これにより、手作業の手間を省き、業務効率が大幅に向上します!
使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事で「できるようになる」こと
この記事を読むことで、次のことが分かるようになります。
- VBAでOutlookを操作するための準備を行う
- Outlookを操作するオブジェクトの種類・使用方法を習得する
- Outlookを操作する際の注意ポイントを確認する
- Outlookを実際に自動化した使用例を確認する
OutlookをVBAで自動化したらできる便利なこと
VBAでOutlookを操作するスキルを身につけると、面倒なメール作業を簡単に自動化できます!
以下に、「これをやってみたい!」と思えるアイデアをいくつか紹介します。
- 定型メールをVBAで自動送信する方法
- 毎日送るような定型メール(営業報告、会議案内、リマインダーなど)をワンクリックで自動送信できるようになります。
宛先、件名、本文をテンプレートとして設定しておけば、送信のたびに内容を入力する必要がありません。- 使用例
- 取引先への「日次報告メール」を定時に送信
- チームメンバーへの「週次会議リマインダー」を自動で送信
- 使用例
- 毎日送るような定型メール(営業報告、会議案内、リマインダーなど)をワンクリックで自動送信できるようになります。
- 複数の宛先に一斉送信する
- 手作業で1件ずつメールを送るのは大変ですが、VBAならExcelのリストに登録された宛先に一斉送信できます。
送信ミスも減り、効率アップすることができます!- 使用例
- 社員全員に「お知らせメール」を一括送信
- 顧客リストを基に「キャンペーン案内メール」を送信
- 使用例
- 手作業で1件ずつメールを送るのは大変ですが、VBAならExcelのリストに登録された宛先に一斉送信できます。
- Outlookで添付ファイル付きメールを自動送信する方法
- メールに複数の添付ファイルを付ける作業も、手作業では意外と時間がかかるもの。
VBAを使えば、指定フォルダ内のファイルを自動で添付して送信できます。- 使用例
- 見積書や請求書を顧客ごとに自動添付して送信
- プロジェクト報告用のExcelファイルを毎月自動送付
- 使用例
- メールに複数の添付ファイルを付ける作業も、手作業では意外と時間がかかるもの。
VBAでOutlookを操作するための準備をご紹介
まず、VBAでOutlookを操作するために必要な基本的な準備から始めましょう。
Outlookライブラリファイルへの参照設定を行いましょう
Outlookを操作するには、Outlookの機能をVBAで認識させる必要があります。
以下の手順でライブラリを設定してください。
設定手順
1. Excelを開き、Alt + F11 を押してVBAエディタを開きます。
これで、VBAのコードを記述できる編集画面が表示されます。


2. メニューから「ツール」→「参照設定」をクリックします。
参照設定ダイアログボックスが表示されます。


3. 「Microsoft Outlook XX.X Object Library」を選択
一覧から「Microsoft Outlook XX.X Object Library」を見つけ、チェックを入れて「OK」をクリックします。
(XX.Xはバージョン番号)


これで、VBAからOutlookを操作する準備が整いました!
VBAでOutlookを操作するために知っておきたい基本オブジェクト
OutlookをVBAで操作するためには、Outlook特有のオブジェクトを使って操作を進める必要があります。
特に、Outlookのメール送信や受信トレイ操作には、Outlook.Application
や Outlook.MailItem
といった基本オブジェクトの理解が欠かせません。
以下に、Outlook操作で使われる主なオブジェクトをまとめました。
各オブジェクトの役割を理解して、効率的にコードを書けるようになりましょう。
Outlook操作で使われる主なオブジェクト一覧
以下のテーブルは、Outlook VBAで使用される主なオブジェクトとその用途をまとめたものです。
オブジェクト名 | 説明 | 主な用途 | 基本コード例 |
---|---|---|---|
Outlook. Application | Outlook全体を操作するエントリー ポイント | – メールの作成や送信 – フォルダの参照 – その他のオブジェクト (NamespaceやMailItemなど)へのアクセス | Set app = CreateObject("Outlook.Application") |
Outlook. MailItem | メール1通を表すオブジェクト | – 件名や本文の設定 – 添付ファイルの追加 – 送信や保存 | Set mail = app.CreateItem(0) |
Outlook. Namespace | Outlook内のフォルダやストレージ (例:受信トレイ、送信済みアイテム など)を管理 | – フォルダ(受信トレイなど)への アクセス – サブフォルダの取得 | Set ns = app.GetNamespace("MAPI") |
Outlook. Folder | メールフォルダ (受信トレイや送信済みアイテムなど) を表すオブジェクト | – メールアイテムの操作 – フォルダ内のアイテム一覧の取得 | Set folder = ns.GetDefaultFolder(olFolderInbox) |
Outlook.Applicationの設定方法
VBAでOutlookを操作するには、まず Outlook.Application
をセットアップする必要があります。
このオブジェクトは、Outlookの全体を管理し、メール送信やフォルダ操作を行うための基本です。
以下のコードで設定できます。
CreateObject
を使う方法
CreateObject
を使うと、VBAからOutlookアプリケーションを新しくインスタンス化できます。
Dim outlookApp As Outlook.Application
'// Outlookアプリケーションを操作するための変数を宣言しています。
'// (変数名は、outlookAppでなくても問題ありません)
Set outlookApp = New Outlook.Application
'// 実際にOutlookアプリケーションを起動し、操作できるようにしています。
柔軟性が高く、Outlookが起動していない場合でもインスタンスを作成できます。
New
ステートメントを使う方法
New
ステートメントを使うと、Outlookアプリケーションのインスタンスをより高速に作成できます。
Dim outlookApp As Object
'// Outlookアプリケーションを操作するための変数を宣言しています。
'// (変数名は、outlookAppでなくても問題ありません)
Set outlookApp = CreateObject("Outlook.Application")
'// 実際にOutlookアプリケーションを起動し、操作できるようにしています。
動作速度が速いですが、環境によってはエラーが発生する場合があります。
この2つはどちらを使用しても問題有りません。
このコードを使うことで、VBAがOutlookの機能(メール送信、取得など)を使えるようになります。
Outlook.MailItemを使ったメール作成の基本
VBAでメールを送信する際に重要な役割を果たすのが、 Outlook.MailItem
オブジェクトです。
このオブジェクトを利用すると、件名や本文、宛先の設定、添付ファイルの追加など、メール作成に必要なすべての操作を行うことができます。
ここでは、CreateItem(olMailItem)
を使用した方法を解説します。
Outlook.MailItemとは?
Outlook.MailItem
は、Outlookのメール1通を表すオブジェクトです。
このオブジェクトを利用することで、以下のような操作が可能になります。
- 件名の設定
- メールの件名を指定できます。
- 本文の作成
- テキスト形式またはHTML形式でメール本文を設定可能です。
- 宛先の指定
- To(宛先)、CC、BCCを使って送信先を指定します。
- 添付ファイルの追加
- 必要なファイルをメールに添付できます。
Outlook.MailItemの宣言例
Outlook.MailItem
オブジェクトを使用するには、最初に Outlook.Application
オブジェクトを作成し、その後 MailItem
を生成します。
以下に基本的な宣言方法と生成の流れを示します。
Dim mail As Outlook.MailItem
Set mail = outlookApp.CreateItem(olMailItem)
引数「olMailItem」とは?
olMailItem
は、Outlook内で定義された定数で、新しいメールアイテムを作成するために使用される値です。
この定数を指定することで、CreateItem
メソッドが「メール」を作成することを明確に指定できます。
- 役割
- Outlookでは、
CreateItem
メソッドを使用して様々な種類のアイテムを作成できます。 - その中で
olMailItem
を指定することで、新しいメールを作成することを示します。
- Outlookでは、
- 数値との対応
olMailItem
の値は数値0
に相当します。- 直接
0
を指定しても正常に動作しますが、定数名を使用することでコードの可読性が向上します。
- 定数を使用する利点
- 定数名を使うことで、コードを読む人が何を作成しているのかを一目で理解できます。
- 後からコードを見直す際や、他の人がコードを編集する際にも役立ちます。
その他: 関連定数(CreateItem の引数例)
Outlookでは、CreateItem
メソッドを使用してメール以外のアイテムも作成できます。
以下は関連する定数の例です。
定数名 | 値 | 説明 |
---|---|---|
olMailItem | 0 | メールアイテムを作成する |
olAppointmentItem | 1 | スケジュール(予定表)を作成する |
olContactItem | 2 | 連絡先アイテムを作成する |
olTaskItem | 3 | タスク(ToDoリスト)を作成する |
olJournalItem | 4 | ジャーナル(記録)を作成する |
olNoteItem | 5 | メモを作成する |


MailItemオブジェクトのプロパティとメソッド一覧
MailItem
オブジェクトには、メールを操作するために便利なプロパティとメソッドが用意されています。
それぞれの機能を理解することで、効率的にメールを作成・送信できます。
プロパティ一覧
プロパティ | 説明 | 使用例 |
---|---|---|
.To | メールの宛先を指定します。 | .To = "example@example.com" |
.CC | CC(カーボンコピー)の宛先を指定します。 | .CC = "cc@example.com" |
.BCC | BCC(ブラインドカーボンコピー)の宛先を指定します。 | .BCC = "bcc@example.com" |
.Subject | メールの件名を設定します。 | .Subject = "メールの件名" |
.Body | メール本文をテキスト形式で設定します。 | .Body = "これは本文です。" |
.HTMLBody | メール本文をHTML形式で設定します。 | .HTMLBody = "<b>太字のメール</b>" |
メソッド一覧
メソッド | 説明 | 使用例 |
---|---|---|
.Attachments.Add | メールに添付ファイルを追加します。 | .Attachments.Add "C:\example.txt" |
.Send | メールを送信します。 | .Send |
.Display | メールの下書き画面を表示(送信前の確認)します。 | .Display |
基本的なコード例をご紹介
以下は、MailItem
を使ってメールを作成する基本的なコード例です。
Sub CreateMail()
Dim outlookApp As Object
Dim mail As Object
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成(olMailItemでメールを指定)
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
.To = "example@example.com" '// 宛先
.CC = "cc@example.com" '// CC
.BCC = "bcc@example.com" '// BCC
.Subject = "メールの件名" '// 件名
.Body = "これはメールの本文です。" '// 本文
.Attachments.Add "C:\example.txt" '// 添付ファイル
.Display '// メールを表示(送信前の確認)
End With
'// 解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub


より詳しい情報は、Microsoft公式のOutlook VBA リファレンスを参照してください。
注意ポイント:Outlookを操作しメール送信時に気を付けたいこと
VBAでメール送信を自動化する際には、いくつかの注意点があります。
以下のポイントを押さえて、安全で効率的なメール操作を行いましょう。
ポイント1: 複数宛先を指定する場合は、Join関数を使用しましょう
複数のメールアドレスを指定する際は、メールアドレスを「;
(セミコロン)」で区切る必要があります。
この操作は、Join
関数を使うと便利です。
Dim recipients As Variant
recipients = Array("user1@example.com", "user2@example.com", "user3@example.com")
mail.To = Join(recipients, ";") '// 宛先をセミコロンで連結
これにより、手作業で間違えるリスクが減り、効率的に複数宛先を設定できます。
ポイント2: 複数添付ファイルを設定する場合は、繰り返し処理を使用
添付ファイルが正しく指定されていないと、送信エラーが発生します。
ファイルパスを事前に確認し、複数のファイルを添付する場合は、繰り返し処理 (For Next文など) を使いましょう。
Dim attachments As Variant
Dim i As Long
attachments = Array("C:\file1.txt", "C:\file2.pdf", "C:\file3.xlsx")
For i = LBound(attachments) To UBound(attachments)
mail.Attachments.Add attachments(i)
Next i
このように配列を使うことで、コードを簡潔に保ちながら複数ファイルを添付できます。
ポイント3: 即時送信のリスクに注意(.Send と .Display)
.Send
を実行すると、メールが即時に送信されます。
内容を確認せずに送信するとミスやトラブルに繋がる可能性があります。
メールの内容を確認するために、.Display
を使って下書き画面を表示し、手動で送信する方法がおすすめです。
mail.Display '// プレビュー画面を表示
ポイント4: セキュリティ警告が出る場合がある
VBAからOutlookを操作すると、セキュリティ警告ポップアップが表示されることがあります。
その場合は、回避するために、以下の方法を検討してください。
- マクロのデジタル署名を行い、信頼済みとして登録する。
- セキュリティソフトやOutlookの設定で動作を許可する(詳細は会社のポリシーを確認)。
ポイント5: HTML形式のメールも作成できます
メール本文をHTML形式で作成する場合は .HTMLBody
を使用します。
これにより、HTMLタグを活用してリッチなメールを作成できます。
コード例
Sub SendHtmlEmail()
Dim outlookApp As Object
Dim mail As Object
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
'// 宛先、件名の設定
.To = "example@example.com"
.CC = "cc@example.com"
.BCC = "bcc@example.com"
.Subject = "HTML形式のテストメール"
'// HTML形式の本文を設定
.HTMLBody = _
"<html>" & _
"<head>" & _
"<style>" & _
" body { font-family: Arial, sans-serif; color: #333; line-height: 1.6; }" & _
" h1 { color: #4CAF50; }" & _
" p { font-size: 14px; }" & _
" a { color: #1E90FF; text-decoration: none; }" & _
"</style>" & _
"</head>" & _
"<body>" & _
" <h1>お知らせ</h1>" & _
" <p>このメールは、VBAを使用してHTML形式で作成されたものです。</p>" & _
" <p>下記リンクをクリックして詳細をご覧ください。</p>" & _
" <p><a href='https://www.example.com'>詳細はこちら</a></p>" & _
"</body>" & _
"</html>"
'// 添付ファイルの追加(必要に応じて)
.Attachments.Add "C:\Users\YourUserName\Documents\example.txt"
'// メールを表示(送信前の確認)
.Display '// メールをプレビュー
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


このように.HTMLBody
を使うと、CSSで細かい調整ができるため、デザイン性の高いメールが簡単に作成可能です。
VBAでOutlookを操作してメールを送る使用例をご紹介
ここでは、実際にVBAでOutlookを操作するためのコード例を紹介します。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。
特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。


\ 自分のペースで学べるVBA講座はこちら /
使用例1: TO・CC・BCCでメールを作成する方法
このコードは、VBAを使用してOutlookでTO(宛先)、CC(カーボンコピー)、BCC(ブラインドカーボンコピー)を指定し、メールを作成する方法を紹介します。
メールは送信されず、下書き画面(Display)で確認できるようにします。
コード例 | 宛先1人のメールを作成
Sub CreateMail_SingleRecipient()
Dim outlookApp As Object
Dim mail As Object
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
.To = "recipient@example.com" '// 宛先
.CC = "cc@example.com" '// CC
.BCC = "bcc@example.com" '// BCC
.Subject = "テストメール" '// 件名
.Body = "これはテストメールです。" '// 本文
.Display '// 下書き画面を表示
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


コードの動作概要
CreateObject("Outlook.Application")
を使用して、Outlookアプリケーションのインスタンスを作成します。
CreateItem(olMailItem)
で、新しいメールを作成します。
.To
、.CC
、.BCC
、.Subject
、.Body
を使って、宛先、件名、本文などを設定します。
.Display
を使って、メールのプレビュー画面を表示します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_SingleRecipient()
- マクロの開始を示します。
「Sub」はSubプロシージャを定義するキーワードです。
- マクロの開始を示します。
- Dim outlookApp As Object
- 変数「outlookApp」を宣言します。
この変数は、Outlookアプリケーションを操作するために使用します。
Object 型を指定しているので、後でOutlookアプリケーションとリンクできます。
- 変数「outlookApp」を宣言します。
- Dim mail As Object
- 変数「mail」を宣言します。
この変数は、新しいメールを作成するために使います。
後ほど具体的な「メールアイテム」をこの変数に代入します。
- 変数「mail」を宣言します。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」を使って、新しいOutlookアプリケーションのインスタンス(操作可能なプログラムの実体)を作成します。
この行で「outlookApp」がOutlookとリンクされ、操作可能になります。
- 「CreateObject」を使って、新しいOutlookアプリケーションのインスタンス(操作可能なプログラムの実体)を作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- Outlookアプリケーションの「CreateItemメソッド」を使って、新しいメールアイテムを作成します。
引数「olMailItem(値: 0)」は、「メール」を作成することを指定しています。
この行で作成されたメールアイテムが mail に代入されます。
- Outlookアプリケーションの「CreateItemメソッド」を使って、新しいメールアイテムを作成します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = “recipient@example.com”
- To プロパティにメールの宛先(TO)を設定します。
- .CC = “cc@example.com”
- CC(カーボンコピー)の宛先を指定します。
- .BCC = “bcc@example.com”
- BCC(ブラインドカーボンコピー)の宛先を指定します。
- .Subject = “テストメール”
- メールの件名を設定します。
- .Body = “これはテストメールです。”
- 「Bodyプロパティ」にメールの本文をテキスト形式で設定します。
この行では、「これはテストメールです。」という内容が本文として指定されています。
- 「Bodyプロパティ」にメールの本文をテキスト形式で設定します。
- .Display
- メールを表示するためのメソッドです。
これを実行すると、メールの下書き画面が開きます。
この状態では送信されず、内容を確認して手動で送信できます。
- メールを表示するためのメソッドです。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 変数「mail」と「outlookApp」を解放して、メモリを節約します。
この行を記述することで、使用済みのオブジェクトを安全にクリーンアップできます。
- 変数「mail」と「outlookApp」を解放して、メモリを節約します。
- End Sub
- マクロの終了を示します。
総括・ポイント
このコードは、VBAでOutlookのメール作成機能を活用する基本的な例です。
このコードをカスタマイズすることで、業務に応じた自動化が可能になります。
使用例2: 複数の宛先にメールを作成する方法
このコードは、VBAを使用して複数の宛先にメールを作成する方法を紹介しています。
宛先(To、CC、BCC)の設定に Join
関数を活用し、複数のメールアドレスを効率的に管理します。
コード例 | 複数宛先のメールを作成
Sub CreateMail_MultipleRecipients()
Dim outlookApp As Object
Dim mail As Object
Dim toRecipients As Variant
Dim ccRecipients As Variant
Dim bccRecipients As Variant
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// 宛先の設定
toRecipients = Array("to1@example.com", "to2@example.com", "to3@example.com") ' To宛先
ccRecipients = Array("cc1@example.com", "cc2@example.com") ' CC宛先
bccRecipients = Array("bcc1@example.com") ' BCC宛先
'// メールの設定
With mail
.To = Join(toRecipients, ";") '// 複数宛先をセミコロンで連結
.CC = Join(ccRecipients, ";") '// CC宛先をセミコロンで連結
.BCC = Join(bccRecipients, ";") '// BCC宛先をセミコロンで連結
.Subject = "複数宛先のテストメール"
.Body = "このメールは複数の宛先に送信されます。"
.Display '// メールを表示(送信前の確認)
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


コードの動作概要
CreateObject("Outlook.Application")
を使用して、Outlookアプリケーションを起動します。
このコードが実行されると、VBAがOutlookを操作できるようになります。
CreateItem(olMailItem)
メソッドを使用して、新しいメール(MailItem)を作成します。olMailItem
は「メールアイテム」を意味する定数です。
.To
、.CC
、.BCC
、.Subject
、.Body
を使って、宛先、件名、本文などを設定します。
複数の宛先を指定する場合は、セミコロン(;
)で区切ります。
.Display
を使用して、作成したメールの下書き画面をOutlookで表示します。
この操作により、送信前に内容を確認できます。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_MultipleRecipients()
- マクロ(Subプロシージャ)を定義するキーワードです。
この行からプログラムが開始されます。マクロの名前は自由に設定できますが、わかりやすい名前が推奨されます。
- マクロ(Subプロシージャ)を定義するキーワードです。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Dim toRecipients As Variant
Dim ccRecipients As Variant
Dim bccRecipients As Variant- 「toRecipients」「ccRecipients」「bccRecipients」は、それぞれTO、CC、BCCの宛先を管理するための配列を格納します。
配列は複数のメールアドレスをまとめて管理するために使用します。
※Array関数を使用して配列を管理するため、型はVariantになっています。
- 「toRecipients」「ccRecipients」「bccRecipients」は、それぞれTO、CC、BCCの宛先を管理するための配列を格納します。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- toRecipients = Array(“to1@example.com”, “to2@example.com”, “to3@example.com”)
- 「Array」関数を使って、TO宛先のメールアドレスを配列として定義します。
例では3つのメールアドレスを指定しています。
- 「Array」関数を使って、TO宛先のメールアドレスを配列として定義します。
- ccRecipients = Array(“cc1@example.com”, “cc2@example.com”)
- 「ccRecipients」変数に、CC宛先のメールアドレスを配列として格納します。
配列に複数の値を設定することで、一括管理が可能です。
- 「ccRecipients」変数に、CC宛先のメールアドレスを配列として格納します。
- bccRecipients = Array(“bcc1@example.com”)
- 「bccRecipients」変数に、BCC宛先のメールアドレスを配列として格納します。
- 配列を使うことで、柔軟にアドレスを管理できます。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = Join(toRecipients, “;”)
- 「Join」関数を使い、配列「toRecipients」の値をセミコロン(”;”)で連結して、TOプロパティに設定します。
これにより、複数の宛先を一度に指定できます。
- 「Join」関数を使い、配列「toRecipients」の値をセミコロン(”;”)で連結して、TOプロパティに設定します。
- .CC = Join(ccRecipients, “;”)
- 「ccRecipients」の配列値をセミコロンで連結し、CCプロパティに設定します。
- .BCC = Join(bccRecipients, “;”)
- 「bccRecipients」の配列値をセミコロンで連結し、BCCプロパティに設定します。
- .Subject = “複数宛先のテストメール”
- 「Subject」プロパティにメールの件名を指定します。
例では「複数宛先のテストメール」としています。
- 「Subject」プロパティにメールの件名を指定します。
- .Body = “このメールは複数の宛先に送信されます。”
- 「Body」プロパティにメール本文を指定します。
この行では、本文に「このメールは複数の宛先に送信されます。」と記述しています。
- 「Body」プロパティにメール本文を指定します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
- End Sub
- マクロの終了を示します。
総括・ポイント
この動作概要では、Outlookアプリケーションを起動し、新しいメールアイテムを作成して、宛先や本文を設定し、最後に下書き画面を表示する基本的な流れを示しました。
このプロセスを覚えると、メールの送信だけでなく、内容確認や修正にも対応できる柔軟なコードを書けるようになります。
使用例3: 添付ファイルを1つ付ける方法
このコードは、VBAを使用してOutlookで添付ファイル付きのメールを作成する方法を紹介します。
ファイルを1つ添付し、宛先を指定してメールを下書き画面で表示します。
コード例 | 添付ファイルを1つ付けたメールの作成
Sub CreateMail_WithAttachment()
Dim outlookApp As Object
Dim mail As Object
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
.To = "recipient@example.com" '// 宛先
.Subject = "添付ファイル付きのテストメール" '// 件名
.Body = "このメールには添付ファイルが含まれています。" '// 本文
'// 添付ファイルを追加
.Attachments.Add "C:\サンプル\サンプル1.xlsx"
'// メールを表示(送信前の確認)
.Display
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


コードの動作概要
CreateObject("Outlook.Application")
を使って、Outlookアプリケーションを操作可能にします。
CreateItem(olMailItem)
で、新しいメールアイテムを作成します。
.To
で宛先を設定。.Subject
で件名を設定。.Body
で本文を設定。
Attachments.Add
メソッドを使い、指定されたパスのファイルを添付します。
.Display
メソッドで、作成したメールをプレビュー画面で表示します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_WithAttachment()
- プロシージャ(マクロ)を定義します。この行からコードが実行されます。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = “recipient@example.com”
- 「Toプロパティ」に宛先メールアドレスを指定します。
- .Subject = “複数宛先のテストメール”
- 「Subjectプロパティ」にメールの件名を設定します。
- .Body = “このメールには添付ファイルが含まれています。”
- 「Bodyプロパティ」にメール本文を設定します。
- .Attachments.Add “C:\サンプル\サンプル1.xlsx”
- 「Attachments.Add」メソッドを使用して、指定したパスにあるファイルをメールに添付します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
- End Sub
- マクロの終了を示します。
総括・ポイント
このコードを使うと、指定したファイルを1つ添付したメールを簡単に作成できます。
添付ファイルのパスは絶対パスで指定する必要があるため、ファイルの場所を正確に確認しておきましょう。
プレビュー画面で確認してから送信することで、添付漏れや内容の誤りを防ぐことができます。
使用例4: 添付ファイルを複数付ける方法
このコードでは、VBAを使用してOutlookで複数の添付ファイルを付けたメールを作成する方法を紹介します。
ファイルパスを配列で管理し、For Next
ループを使用して添付ファイルを一括で追加します。
コード例 | 添付ファイルを複数付けたメールの作成
Sub CreateMail_WithMultipleAttachments()
Dim outlookApp As Object
Dim mail As Object
Dim attachments As Variant
Dim i As Long
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// 添付ファイルのパスを配列で管理
attachments = Array("C:\Users\YourUserName\Documents\file1.txt", _
"C:\Users\YourUserName\Documents\file2.pdf", _
"C:\Users\YourUserName\Documents\file3.xlsx")
'// メールの設定
With mail
.To = "recipient@example.com" '// 宛先
.Subject = "複数添付ファイル付きのテストメール" '// 件名
.Body = "このメールには複数の添付ファイルが含まれています。" '// 本文
'// 添付ファイルを追加
For i = LBound(attachments) To UBound(attachments)
.Attachments.Add attachments(i)
Next i
'// メールを表示(送信前の確認)
.Display
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


コードの動作概要
CreateObject("Outlook.Application")
を使って、Outlookアプリケーションを操作可能にします。
CreateItem(olMailItem)
で、新しいメールアイテムを作成します。
Array
関数を使用して、添付ファイルのパスを管理します。
For Next
ループを使用して、配列内の全てのファイルパスを順番に .Attachments.Add
メソッドで追加します。
.Display
メソッドで、作成したメールをプレビュー画面で表示します。
このコードで使用している機能
- Dim – Set (オブジェクト変数)
- Array関数 (配列を定義)
- LBound、UBound (配列のサイズを知る)
- Dim outlookApp As Object (Outlookを操作)
- With (オブジェクトを繰り返し使用)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_WithMultipleAttachments()
- プロシージャ(マクロ)を定義します。
この行からコードが実行されます。
- プロシージャ(マクロ)を定義します。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Dim attachments As Variant
- 「attachments」は、複数のファイルパスを格納する配列変数です。
- Dim i As Long
- 「i」は、配列を順番に処理するためのカウンタ変数です。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- attachments = Array(“C:\Users\YourUserName\Documents\file1.txt”, _
“C:\Users\YourUserName\Documents\file2.pdf”, _
“C:\Users\YourUserName\Documents\file3.xlsx”)- 「Array」関数を使用して、複数の添付ファイルパスをまとめて管理します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = “recipient@example.com”
- 「Toプロパティ」に宛先メールアドレスを指定します。
- .Subject = “複数宛先のテストメール”
- 「Subjectプロパティ」にメールの件名を設定します。
- .Body = “このメールには添付ファイルが含まれています。”
- 「Bodyプロパティ」にメール本文を設定します。
- For i = LBound(attachments) To UBound(attachments)
.Attachments.Add attachments(i)
Next i- For Next ループを使用して、配列内の全てのファイルパスを順番に「Attachments.Add」で添付します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
- End Sub
- マクロの終了を示します。
総括・ポイント
このコードを使うと、複数の添付ファイルを含んだメールを簡単に作成できます。
配列とループを使用することで、効率的にファイルを添付でき、ファイル数が多い場合でも簡単に管理できます。
添付ファイルのパスは絶対パスで指定する必要があります。
送信前にプレビュー画面で確認することで、添付漏れを防ぎましょう。
使用例5: エクセルのセルから宛先を指定してメールを作成する方法
このコードでは、Excelのセルに入力された宛先情報を使用してOutlookでメールを作成します。
宛先は、To
(1人)、CC
(2人)の設定を行い、一人宛先と複数宛先の両方のパターンに対応した例です。
Excelをデータソースとして活用することで、手作業での入力を削減し、ミスを防ぐことができます。
コード例 | エクセルのセルから宛先を設定
Sub CreateMail_FromExcel()
Dim outlookApp As Object
Dim mail As Object
Dim wb As Workbook
Dim ws As Worksheet
Dim toRecipient As String
Dim ccRecipients As Variant
Dim i As Long
'// Excelの現在のワークブックとシートを取得
Set wb = ThisWorkbook
Set ws = wb.Sheets("宛先リスト")
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// 宛先情報をセルから取得
toRecipient = ws.Range("A1").Value '// A1セルからToの宛先を取得
ccRecipients = Array(ws.Range("B1").Value, ws.Range("C1").Value) '// B1とC1からCCの宛先を取得
'// メールの設定
With mail
.To = toRecipient '// Toにセルの値を設定
.CC = Join(ccRecipients, ";") '// CC宛先をセミコロンで連結
.Subject = "セルから宛先を設定したメール" '// 件名
.Body = "このメールはExcelセルの値を基に宛先を設定しています。" '// 本文
.Display '// メールを表示(送信前の確認)
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
Set ws = Nothing
Set wb = Nothing
End Sub
処理結果


コードの動作概要
Range("A1").Value
で To
の宛先を取得し、Array
と Join
を使用して CC
の複数宛先を設定します。
CreateObject("Outlook.Application")
を使って、Outlookアプリケーションのインスタンスを作成します。
CreateItem(olMailItem)
で、新しいメールを作成します。
To
プロパティに1人の宛先を設定し、CC
プロパティに複数の宛先をセミコロンで連結して設定します。
.Display
メソッドを使用して、作成したメールをプレビュー画面で表示します。
このコードで使用している機能
- Dim – Set (オブジェクト変数)
- Array関数 (配列を定義)
- For Next文 (繰り返し処理)
- Dim outlookApp As Object (Outlookを操作)
- With (オブジェクトを繰り返し使用)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_FromExcel()
- プロシージャ(マクロ)を定義します。
この行からコードが実行されます。
- プロシージャ(マクロ)を定義します。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Dim wb As Workbook
- 現在のExcelワークブックを格納するオブジェクト変数を設定します。
- Dim ws As Worksheet
- Excelシートを参照するためのオブジェクト変数を設定します。
- Dim toRecipient As String
- To(宛先)のメールアドレスを格納する変数です。
- Dim ccRecipients As Variant
- CC(カーボンコピー)の複数宛先を格納する配列変数です。
- Dim i As Long
- 配列を処理するためのカウンタ変数です。
- Dim attachments As Variant
- 「attachments」は、複数のファイルパスを格納する配列変数です。
- Dim i As Long
- 「i」は、配列を順番に処理するためのカウンタ変数です。
- Set wb = ThisWorkbook
- 「wb」に現在のブックを格納します。
- Set ws = wb.Sheets(“宛先リスト”)
- 「ws」にシート「宛先リスト」を格納します。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- toRecipient = ws.Range(“A1”).Value
- Excelシートのセル「A1」に入力された値を取得して、変数「toRecipient」に格納します。
- ccRecipients = Array(ws.Range(“B1”).Value, ws.Range(“C1”).Value)
- セル「B1」と「C1」の値を配列として取得し、変数「ccRecipients」に格納します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = toRecipient
- To宛先に、セル「A1」の値を設定します。
- .CC = Join(ccRecipients, “;”)
- CC宛先に、セル「B1」と「C1」の値をセミコロンで連結して設定します。
- .Subject = “セルから宛先を設定したメール”
- 「Subjectプロパティ」にメールの件名を設定します。
- .Body = “このメールはExcelセルの値を基に宛先を設定しています。”
- 「Bodyプロパティ」にメール本文を設定します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing
Set ws = Nothing
Set wb = Nothing- 使用したオブジェクトを解放して、メモリを節約します。
- End Sub
- マクロの終了を示します。
総括・ポイント
このコードを使えば、Excelシートに宛先リストを記載してメールを作成できます。
宛先の設定がExcelに依存するため、送信先リストの更新や管理が容易になります。
宛先情報が正確であることを事前に確認することで、メールの送信エラーを防げます。
使用例6: メールのタイトルと本文をセルの内容から設定する方法
このコードは、Excelのセルに入力された情報を基に、Outlookでメールを作成する方法を紹介します。
件名はセル「A1」、本文はセル「B1」の内容を使用します。また、宛先(TO)は固定で設定しています。
コード例 | メールのタイトル・本文をセルから設定
Sub CreateMail_FromCellContents()
Dim outlookApp As Object
Dim mail As Object
Dim subjectText As String
Dim bodyText As String
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// Excelのセルから件名と本文を取得
subjectText = ThisWorkbook.Sheets(1).Range("A1").Value '// A1セルから件名を取得
bodyText = ThisWorkbook.Sheets(1).Range("B1").Value '// B1セルから本文を取得
'// メールの設定
With mail
.To = "recipient@example.com" '// 宛先(固定)
.Subject = subjectText '// 件名をセルの内容から設定
.Body = bodyText '// 本文をセルの内容から設定
.Display '// 下書き画面を表示
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
処理結果


コードの動作概要
CreateObject("Outlook.Application")
を使用して、Outlookアプリケーションのインスタンスを作成します。
CreateItem(olMailItem)
メソッドを使い、新しいメール(MailItem)を作成します。
Range("A1").Value
でセル「A1」の内容を取得して件名に設定します。
同様に、Range("B1").Value
でセル「B1」の内容を取得して本文に設定します。
宛先(To)、件名(Subject)、本文(Body)を設定します。
.Display
メソッドを使用して、作成したメールをプレビュー画面で表示します。
このコードで使用している機能
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_FromCellContents()
- プロシージャ(マクロ)を定義します。
この行からコードが実行されます。
- プロシージャ(マクロ)を定義します。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Dim subjectText As String
- 件名(Subject)を格納するための文字列型変数を宣言します。
- Dim bodyText As String
- 本文(Body)を格納するための文字列型変数を宣言します。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- subjectText = ThisWorkbook.Sheets(1).Range(“A1”).Value
- 現在のExcelブック(ThisWorkbook)の1枚目のシート(Sheets(1))のセル「A1」の内容を取得し、変数「subjectText」に代入します。
この内容がメールの件名になります。
- 現在のExcelブック(ThisWorkbook)の1枚目のシート(Sheets(1))のセル「A1」の内容を取得し、変数「subjectText」に代入します。
- bodyText = ThisWorkbook.Sheets(1).Range(“B1”).Value
- 同様に、セル「B1」の内容を取得し、変数「bodyText」に代入します。
この内容がメールの本文になります。
- 同様に、セル「B1」の内容を取得し、変数「bodyText」に代入します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = “recipient@example.com”
- メールの宛先(To)を設定します。
- .Subject = subjectText
- 件名(Subject)を設定します。
先ほどセル「A1」から取得した内容(subjectText)を件名に反映します。
- 件名(Subject)を設定します。
- .Body = bodyText
- 本文(Body)を設定します。
先ほどセル「B1」から取得した内容(bodyText)を本文に反映します。
- 本文(Body)を設定します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 使用したオブジェクトを解放して、メモリを節約します。
- End Sub
- マクロの終了を示します。
総括・ポイント
このコードは、Excelのセルに入力された件名と本文を基にOutlookメールを自動作成するものです。
手動入力の手間を省き、迅速かつ正確なメール作成が可能です。また、メール送信前に内容を確認できるため、ミスの防止にも役立ちます。
使用例7: 条件付きでメールを送信する方法
このコードは、Excelシート内のデータを基に、特定の条件に該当する場合のみメールを作成する方法を紹介します。
たとえば、セルの値が「送信」となっている行のメールアドレスを宛先として一括指定し、メールを作成します。
この方法は、必要なデータを条件に応じて抽出して効率的に処理する際に役立ちます。
コード例 | 条件付きで複数宛先にメールを送信
Sub SendConditionalEmail_Refactored()
Dim outlookApp As Object
Dim mail As Object
Dim toRecipients() As String
'// 宛先リストを取得
toRecipients = GetRecipients()
'// 宛先がある場合のみメールを作成
If UBound(toRecipients) >= 1 Then
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
'// 宛先をセミコロンで連結
.To = Join(toRecipients, ";")
.Subject = "条件付きメール送信"
.Body = "このメールは条件を満たした宛先に送信されます。"
.Display '// メールを表示(送信前の確認)
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
Else
MsgBox "送信条件に該当する宛先が見つかりませんでした。", vbExclamation
End If
End Sub
Private Function GetRecipients() As String()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim recipients() As String
Dim recipientCount As Long
'// Excelの現在のワークブックとシートを取得
Set ws = ThisWorkbook.Sheets("メールリスト")
'// 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'// 動的配列の初期化
ReDim recipients(1 To 1)
recipientCount = 0
'// 行をループして条件を確認
For i = 2 To lastRow
If ws.Cells(i, "C").Value = "送信" Then '// 条件列が「送信」の場合
recipientCount = recipientCount + 1
ReDim Preserve recipients(1 To recipientCount)
recipients(recipientCount) = ws.Cells(i, "A").Value
End If
Next i
GetRecipients = recipients
End Function
処理結果


コードの動作概要
GetRecipients
関数で、条件(列Cが「送信」)に該当する行の列A(メールアドレス)を取得します。
その列A(メールアドレス)を Join
関数でセミコロン(;
)区切りに変換して宛先リストを作成します。
CreateObject("Outlook.Application")
を使用してOutlookアプリケーションを操作可能にします。
CreateItem(olMailItem)
を使用して、新しいメールアイテムを作成します。
宛先(To)は、Excelから取得したデータをセミコロン区切りで設定します。
件名(Subject)や本文(Body)を設定します。
.Display
メソッドを使用して、作成したメールのプレビュー画面を表示します。
条件に該当する宛先がない場合は、MsgBox
で通知します。
このコードで使用している機能
- Dim – Set (オブジェクト変数)
- Array関数 (配列を定義)
- LBound、UBound (配列のサイズを知る)
- Function (関数化)
- If (条件分岐)
- lastRow (最終行)
- For Next文 (繰り返し処理)
- Dim outlookApp As Object (Outlookを操作)
- With (オブジェクトを繰り返し使用)
- MsgBox (メッセージボックス)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub SendConditionalEmail_Refactored()
- プロシージャ(マクロ)を定義します。
この行からコードが実行されます。
- プロシージャ(マクロ)を定義します。
- Dim outlookApp As Object
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
- 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
- Dim mail As Object
- 「mail」は、新しいメールアイテムを作成するための変数です。
この変数にメールアイテムを代入して操作します。
- 「mail」は、新しいメールアイテムを作成するための変数です。
- Dim toRecipients() As String
- 複数の宛先を格納するための文字列配列「toRecipients」を宣言しています。
ここでは 「 () 」 を付けることで、配列として扱う準備をしています。
- 複数の宛先を格納するための文字列配列「toRecipients」を宣言しています。
- toRecipients = GetRecipients()
- 宛先リストを取得するための関数「GetRecipients」を呼び出し、その結果を変数「toRecipients」に代入します。
「GetRecipients」は後述されている関数で、条件に基づいて宛先を配列として返します。
- 宛先リストを取得するための関数「GetRecipients」を呼び出し、その結果を変数「toRecipients」に代入します。
- If UBound(toRecipients) >= 1 Then
- 宛先配列「toRecipients」にデータがあるかを判定しています。
「UBound(toRecipients)」は配列の最終インデックスを返します。
もし最終インデックスが1以上なら、少なくとも1つの宛先があると判断し、メール作成処理を続けます。
- 宛先配列「toRecipients」にデータがあるかを判定しています。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」を使って、Outlookアプリケーションのインスタンスを作成し、「outlookApp」に代入します。
この行でOutlookアプリケーションを操作可能な状態にします。
- 「CreateObject」を使って、Outlookアプリケーションのインスタンスを作成し、「outlookApp」に代入します。
- Set mail = outlookApp.CreateItem(olMailItem)
- Outlookアプリケーションの「CreateItemメソッド」を使用して、新しいメールアイテムを作成します。
引数「olMailItem(値は 0)」を指定することで、「メール」を作成することを指定しています。
作成したメールアイテムを「mail」に代入します。
- Outlookアプリケーションの「CreateItemメソッド」を使用して、新しいメールアイテムを作成します。
- With mail
- 「Withブロック」の開始を示します。
この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
- 「Withブロック」の開始を示します。
- .To = Join(toRecipients, “;”)
- 「Join関数」を使用して、配列「toRecipients」の要素をセミコロン「;」で連結し、宛先(To)に設定します。
これにより、複数の宛先を1つの文字列として「Toプロパティ」に格納できます。
- 「Join関数」を使用して、配列「toRecipients」の要素をセミコロン「;」で連結し、宛先(To)に設定します。
- .Subject = “条件付きメール送信”
- 「Subjectプロパティ」にメールの件名を設定します。
- .Body = “このメールは条件を満たした宛先に送信されます。”
- 「Bodyプロパティ」にメール本文を設定します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 使用済みのオブジェクト(mail と outlookApp)を解放して、メモリを節約します。
オブジェクトを解放することで、後続の処理に影響を与えることを防ぎます。
- 使用済みのオブジェクト(mail と outlookApp)を解放して、メモリを節約します。
- Else
MsgBox “送信条件に該当する宛先が見つかりませんでした。”, vbExclamation- 条件に該当する宛先がない場合、警告メッセージボックスを表示します。
「vbExclamation」を指定することで、注意を促す警告アイコンを表示します。
- 条件に該当する宛先がない場合、警告メッセージボックスを表示します。
- End If
- 条件分岐(If 文)の終了を示します。
宛先があった場合の処理と、なかった場合の処理をここで終了します。
- 条件分岐(If 文)の終了を示します。
- End Sub
- マクロの終了を示します。
■ GetRecipients()関数を解説
- Private Function GetRecipients() As String()
- 「GetRecipients」関数の開始を示します。
この関数は、条件に基づいて宛先リストを配列として返します。
- 「GetRecipients」関数の開始を示します。
- Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim recipients() As String
Dim recipientCount As Long- 以下の変数を宣言しています
- 「ws」: Excelのシートを参照するための変数。
- 「lastRow」: データが入力された最終行を取得するための変数。
- 「i」: ループ処理で使用するカウンタ変数。
- 「recipients」: 宛先を格納する動的配列。
- 「recipientCount」: 宛先の数をカウントする変数。
- 以下の変数を宣言しています
- Set ws = ThisWorkbook.Sheets(“メールリスト”)
- 現在のブック内のシート「メールリスト」を参照し、「ws」に代入します。
ここで操作対象のシートを指定します。
- 現在のブック内のシート「メールリスト」を参照し、「ws」に代入します。
- lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
- 列「A」の最終行を取得しています。
「xlUp」を使用して、最後のデータが入力されたセルを特定します。
- 列「A」の最終行を取得しています。
- ReDim recipients(1 To 1)
recipientCount = 0- 動的配列「recipients」を初期化し、要素数を1つだけ確保します。
「recipientCount」を「0」に設定し、これからカウントを始めます。
- 動的配列「recipients」を初期化し、要素数を1つだけ確保します。
- For i = 2 To lastRow
If ws.Cells(i, “C”).Value = “送信” Then- 2行目から最終行までループし、列「C」の値が「送信」であるかを判定します。
- recipientCount = recipientCount + 1
ReDim Preserve recipients(1 To recipientCount)
recipients(recipientCount) = ws.Cells(i, “A”).Value- 条件を満たす場合
- 宛先カウントを「1」増加。
- 「ReDim Preserve」を使用して、配列サイズを拡張(既存のデータを保持)。
- 列「A」の値を配列に格納。
- 条件を満たす場合
- Next i
- 次の行に進みます。
- これにより、2行目から最終行まで繰り返し処理を行います。
- GetRecipients = recipients
- 「GetRecipients」関数の戻り値として、宛先リスト(配列)を返します。
- End Function
- 関数の終了を示します。
ここで関数内の処理が完了します。
- 関数の終了を示します。
総括・ポイント
このコードは、条件に該当する複数の宛先を動的配列に収集し、1つのメールにまとめて宛先を設定する仕組みを提供します。
GetRecipients
関数を分離することで、コードの可読性と再利用性が向上しています。
使用例8: 特定のフォルダ内の全ファイルを添付する方法
このコードでは、指定フォルダ内に保存されているすべてのファイルをメールに添付します。
Dir
関数を使用してフォルダ内のファイルを取得し、サブルーチンで処理を分けています。
コード例 | 指定フォルダ内のすべてのファイルを添付
Sub CreateMail_WithDirAttachments()
Dim outlookApp As Object
Dim mail As Object
Dim folderPath As String
Dim attachments() As String
'// フォルダパスを取得
folderPath = GetFolderPath()
If folderPath = "" Then Exit Sub
'// 添付ファイルのパスを取得
attachments = GetAllFilesInFolder(folderPath)
'// 添付ファイルが存在しない場合は終了
If UBound(attachments) < 1 Then
MsgBox "選択したフォルダには添付するファイルがありません。", vbExclamation
Exit Sub
End If
'// Outlookアプリケーションを起動
Set outlookApp = CreateObject("Outlook.Application")
'// 新しいメールアイテムを作成
Set mail = outlookApp.CreateItem(olMailItem)
'// メールの設定
With mail
.To = "recipient@example.com"
.Subject = "フォルダ内の全ファイルを添付"
.Body = "このメールには指定フォルダ内のすべてのファイルが添付されています。"
'// 添付ファイルを追加
Dim i As Long
For i = LBound(attachments) To UBound(attachments)
.Attachments.Add attachments(i)
Next i
'// メールを表示(送信前の確認)
.Display
End With
'// オブジェクトの解放
Set mail = Nothing
Set outlookApp = Nothing
End Sub
'// フォルダ選択ダイアログを表示し、フォルダパスを取得
Private Function GetFolderPath() As String
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "添付ファイルを選択するフォルダを選んでください"
If .Show = -1 Then
folderPath = .SelectedItems(1)
Else
folderPath = ""
End If
End With
GetFolderPath = folderPath
End Function
'// 指定フォルダ内のすべてのファイルパスを取得
Private Function GetAllFilesInFolder(folderPath As String) As String()
Dim fileName As String
Dim files() As String
Dim fileCount As Long
'// ファイル取得の初期化
fileName = Dir(folderPath & "\*.*")
fileCount = 0
ReDim files(1 To 1)
'// フォルダ内のすべてのファイルをループで取得
Do While fileName <> ""
fileCount = fileCount + 1
ReDim Preserve files(1 To fileCount)
files(fileCount) = folderPath & "\" & fileName
fileName = Dir()
Loop
GetAllFilesInFolder = files
End Function
処理結果


コードの動作概要
GetFolderPath
関数で FileDialog
を使用してフォルダを選択し、そのパスを取得します。
GetAllFilesInFolder
関数を使い、Dir
関数でフォルダ内のファイルパスを取得します。
- 宛先(To): 宛先を指定します。
- 件名(Subject): 件名を設定します。
- 本文(Body): メール本文を設定します。
取得したすべてのファイルパスをループし、Attachments.Add
メソッドでメールに添付します。
.Display
メソッドを使用して、メールのプレビュー画面を表示します。
このコードで使用している機能
- Dim – Set (オブジェクト変数)
- Array関数 (配列を定義)
- LBound、UBound (配列のサイズを知る)
- For Next文 (繰り返し処理)
- Do While (繰り返し処理)
- Function (関数化)
- If (条件分岐)
- ReDim (動的配列)
- Dir (ファイルパス取得)
- FileDialog (フォルダを選択する)
- Dim outlookApp As Object (Outlookを操作)
- With (オブジェクトを繰り返し使用)
- MsgBox (メッセージボックス)
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub CreateMail_WithDirAttachments()
- プロシージャ(マクロ)を定義します。
この行からコードが実行されます。
- プロシージャ(マクロ)を定義します。
- Dim outlookApp As Object
Dim mail As Object
Dim folderPath As String
Dim attachments() As String- 各種変数を宣言します。
- 「outlookApp」: Outlookアプリケーションのインスタンス。
- 「mail」: 新しいメールアイテム。
- 「folderPath」: 選択したフォルダのパス。
- 「attachments」: フォルダ内のファイルパスを格納する動的配列。
- 各種変数を宣言します。
- folderPath = GetFolderPath()
If folderPath = “” Then Exit Sub- 「GetFolderPath」関数でフォルダパスを取得します。
フォルダが選択されていない場合は処理を終了します。
- 「GetFolderPath」関数でフォルダパスを取得します。
- attachments = GetAllFilesInFolder(folderPath)
- 「GetAllFilesInFolder」関数で、指定フォルダ内のファイルパスを取得します。
- If UBound(attachments) < 1 Then
MsgBox “選択したフォルダには添付するファイルがありません。”, vbExclamation
Exit Sub
End If- ファイルが見つからない場合、警告を表示して処理を終了します。
- Set outlookApp = CreateObject(“Outlook.Application”)
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
- 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
- Set mail = outlookApp.CreateItem(olMailItem)
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
引数「olMailItem」は、新しい「メール」を作成することを指定します。
- 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
- With mail
.To = “recipient@example.com”
.Subject = “フォルダ内の全ファイルを添付”
.Body = “このメールには指定フォルダ内のすべてのファイルが添付されています。”- メールの宛先、件名、本文を設定します。
- For i = LBound(attachments) To UBound(attachments)
.Attachments.Add attachments(i)
Next i- 取得したすべてのファイルパスをループで添付します。
- .Display
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
- 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
- End With
- 「Withブロック」の終了を示します。
これ以降、メールオブジェクトへの設定は記述されていません。
- 「Withブロック」の終了を示します。
- Set mail = Nothing
Set outlookApp = Nothing- 使用したオブジェクトを解放。
- End Sub
- マクロの終了を示します。
■ GetFolderPath()関数を解説
- Private Function GetFolderPath() As String
- この関数は「FileDialog」を使用してユーザーが選択したフォルダパスを取得します。
- Dim folderPath As String
- ユーザーが選択したフォルダのパスを格納する文字列変数を宣言します。
- With Application.FileDialog(msoFileDialogFolderPicker)
- フォルダ選択ダイアログを表示します。
- .Title = “添付ファイルを選択するフォルダを選んでください”
- ダイアログのタイトルを設定します。
- If .Show = -1 Then
folderPath = .SelectedItems(1)
Else
folderPath = “”
End If- ユーザーがフォルダを選択した場合はそのパスを取得します。
選択がキャンセルされた場合は空文字を返す。
- ユーザーがフォルダを選択した場合はそのパスを取得します。
- End With
GetFolderPath = folderPath- 選択されたフォルダパスを関数の戻り値として返します。
- End Function
- 関数の終了です。
■ GetAllFilesInFolder()関数を解説
- Private Function GetAllFilesInFolder(folderPath As String) As String()
- この関数は、指定フォルダ内のすべてのファイルパスを取得して配列に格納します。
- Dim fileName As String
Dim files() As String
Dim fileCount As Long- 「fileName」: Dir 関数で取得するファイル名です。
- 「files」: ファイルパスを格納する動的配列です。
- 「fileCount」: 配列の要素数をカウントする変数です。
- fileName = Dir(folderPath & “*.*”)
fileCount = 0
ReDim files(1 To 1)- Dir関数を使ってフォルダ内の最初のファイルを取得します。
- 配列「files」を初期化します。
- Do While fileName <> “”
fileCount = fileCount + 1
ReDim Preserve files(1 To fileCount)
files(fileCount) = folderPath & “\” & fileName
fileName = Dir()
Loop - GetAllFilesInFolder = files
- ファイルパスを格納した配列を関数の戻り値として返します。
- End Function
- 関数の終了です。
総括・ポイント
このコードは、指定フォルダ内のすべてのファイルをメールに添付する一般的なシナリオを効率的に処理します。
このコードは、フォルダパス取得 (GetFolderPath
) とファイル取得 (GetAllFilesInFolder
) にサブルーチンが分かれているため、必要に応じて他のシナリオに適用可能です。
この記事のまとめ
この記事では、VBAを使用してOutlookのメール作成・送信を自動化する方法を解説しました。
初心者から応用まで学べるよう、実際の使用例を交えながら丁寧に説明しています。
ポイントのおさらい
- 参照設定でOutlookを操作できるようにする方法
- 参照設定の一覧から「Microsoft Outlook XX.X Object Library」を見つけ、チェックを入れて「OK」をクリックします。
⇒ 「Outlookライブラリファイルへの参照設定を行いましょう」をもう一度見る
- 参照設定の一覧から「Microsoft Outlook XX.X Object Library」を見つけ、チェックを入れて「OK」をクリックします。
- TO・CC・BCCでメールを作成する基本
- OutlookでTO(宛先)、CC(カーボンコピー)、BCC(ブラインドカーボンコピー)を指定してメールを作成する方法を解説しました。
⇒ 「MailItemオブジェクトのプロパティとメソッド一覧」をもう一度見る
- OutlookでTO(宛先)、CC(カーボンコピー)、BCC(ブラインドカーボンコピー)を指定してメールを作成する方法を解説しました。
- 複数の宛先にメールを送る方法
- 複数の宛先を配列で管理し、
Join
関数でセミコロン区切りに連結する方法を解説しました。
⇒ 「ポイント1: 複数宛先を指定する場合は、Join関数を使用しましょう」をもう一度見る
- 複数の宛先を配列で管理し、
- 添付ファイル付きのメールを作成する基本
.Attachments.Add
メソッドを使用し、メールに添付ファイルを追加する方法を学びました。
⇒ 「使用例3: 添付ファイルを1つ付ける方法」をもう一度見る
- 複数の添付ファイルを一括で追加する方法
- 配列と
For Next
ループを活用して、複数の添付ファイルを自動で追加する方法を解説しました。
⇒ 「使用例4: 添付ファイルを複数付ける方法」をもう一度見る
- 配列と
- フォルダ内の全ファイルを添付する方法
- 指定フォルダ内のすべてのファイルを自動で添付する方法を解説しました。
⇒ 「使用例8: 特定のフォルダ内の全ファイルを添付する方法」をもう一度見る
- 指定フォルダ内のすべてのファイルを自動で添付する方法を解説しました。
さらに学ぶために
VBAでOutlook操作を習得したことで、メール自動化だけでなく、データ処理スキルも向上しました。
このスキルを活かして、以下のようなExcelシートの自動化にも挑戦してみましょう!

