VBAでOutlookメールを自動送信!添付ファイル付きメール作成の基本

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

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


自動でメール送信するにはどうしたらいいの?

宛先(To、CC、BCC)を指定してメールを送信するには?

添付ファイルもメールに設定したい

その場合は、VBAで「Outlook操作」を
行うと解決します!


この記事では、「VBAを使用したメール自動送信方法」を詳しく解説します。

Outlookからメールを自動送信することで、Excelのセルに入力されたテンプレート情報(宛先、件名、本文など)を基に、一括でメールを送信できます。
これにより、手作業の手間を省き、業務効率が大幅に向上します!

使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

この記事で「できるようになる」こと

この記事を読むことで、次のことが分かるようになります。

OutlookをVBAで自動化したらできる便利なこと

VBAでOutlookを操作するスキルを身につけると、面倒なメール作業を簡単に自動化できます!

以下に、「これをやってみたい!」と思えるアイデアをいくつか紹介します。

Outlookを自動化出来たら何ができるの?
  • 定型メールをVBAで自動送信する方法
    • 毎日送るような定型メール(営業報告、会議案内、リマインダーなど)をワンクリックで自動送信できるようになります。
      宛先、件名、本文をテンプレートとして設定しておけば、送信のたびに内容を入力する必要がありません。
      • 使用例
        • 取引先への「日次報告メール」を定時に送信
        • チームメンバーへの「週次会議リマインダー」を自動で送信
  • 複数の宛先に一斉送信する
    • 手作業で1件ずつメールを送るのは大変ですが、VBAならExcelのリストに登録された宛先に一斉送信できます。
      送信ミスも減り、効率アップすることができます!
      • 使用例
        • 社員全員に「お知らせメール」を一括送信
        • 顧客リストを基に「キャンペーン案内メール」を送信
  • Outlookで添付ファイル付きメールを自動送信する方法
    • メールに複数の添付ファイルを付ける作業も、手作業では意外と時間がかかるもの。
      VBAを使えば、指定フォルダ内のファイルを自動で添付して送信できます。
      • 使用例
        • 見積書や請求書を顧客ごとに自動添付して送信
        • プロジェクト報告用のExcelファイルを毎月自動送付
スポンサーリンク

VBAでOutlookを操作するための準備をご紹介

まず、VBAでOutlookを操作するために必要な基本的な準備から始めましょう。

Outlookライブラリファイルへの参照設定を行いましょう

Outlookを操作するには、Outlookの機能をVBAで認識させる必要があります。

以下の手順でライブラリを設定してください。

設定手順

1. Excelを開き、Alt + F11 を押してVBAエディタを開きます。
 これで、VBAのコードを記述できる編集画面が表示されます。

1. Excelを開き、Alt + F11 を押してVBAエディタを開きます。

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

2. メニューから「ツール」→「参照設定」をクリックします。

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

3. 「Microsoft Outlook XX.X Object Library」を選択

これで、VBAからOutlookを操作する準備が整いました!

VBAでOutlookを操作するために知っておきたい基本オブジェクト

OutlookをVBAで操作するためには、Outlook特有のオブジェクトを使って操作を進める必要があります。

特に、Outlookのメール送信や受信トレイ操作には、Outlook.ApplicationOutlook.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通を表すオブジェクトです。

このオブジェクトを利用することで、以下のような操作が可能になります。

Outlook.MailItem で「できる」ようになること
  • 件名の設定
    • メールの件名を指定できます。
  • 本文の作成
    • テキスト形式または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 メソッドが「メール」を作成することを明確に指定できます。

olMailItem のポイント
  • 役割
    • Outlookでは、CreateItem メソッドを使用して様々な種類のアイテムを作成できます。
    • その中で olMailItem を指定することで、新しいメールを作成することを示します。
  • 数値との対応
    • olMailItem の値は数値 0 に相当します。
    • 直接 0 を指定しても正常に動作しますが、定数名を使用することでコードの可読性が向上します。
  • 定数を使用する利点
    • 定数名を使うことで、コードを読む人が何を作成しているのかを一目で理解できます。
    • 後からコードを見直す際や、他の人がコードを編集する際にも役立ちます。

その他: 関連定数(CreateItem の引数例)

Outlookでは、CreateItem メソッドを使用してメール以外のアイテムも作成できます。

以下は関連する定数の例です。

スクロールできます
定数名説明
olMailItem0メールアイテムを作成する
olAppointmentItem1スケジュール(予定表)を作成する
olContactItem2連絡先アイテムを作成する
olTaskItem3タスク(ToDoリスト)を作成する
olJournalItem4ジャーナル(記録)を作成する
olNoteItem5メモを作成する
メールを送る人

MailItemオブジェクトのプロパティとメソッド一覧

MailItem オブジェクトには、メールを操作するために便利なプロパティとメソッドが用意されています。

それぞれの機能を理解することで、効率的にメールを作成・送信できます。

プロパティ一覧

プロパティ説明使用例
.Toメールの宛先を指定します。.To = "example@example.com"
.CCCC(カーボンコピー)の宛先を指定します。.CC = "cc@example.com"
.BCCBCC(ブラインドカーボンコピー)の宛先を指定します。.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
MailItem を使ってメールを作成する基本的なコード例

より詳しい情報は、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

処理結果

ポイント5: HTML形式のメールも作成できます

このように.HTMLBody を使うと、CSSで細かい調整ができるため、デザイン性の高いメールが簡単に作成可能です。

スポンサーリンク

VBAでOutlookを操作してメールを送る使用例をご紹介

ここでは、実際にVBAでOutlookを操作するためのコード例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べる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

処理結果

使用例1: TO・CC・BCCでメールを作成する方法の結果

コードの動作概要

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使用して、Outlookアプリケーションのインスタンスを作成します。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) で、新しいメールを作成します。

STEP
メールの設定

.To.CC.BCC.Subject.Body を使って、宛先、件名、本文などを設定します。

STEP
メールの下書き画面を表示

.Display を使って、メールのプレビュー画面を表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_SingleRecipient()
    • マクロの開始を示します。
      「Sub」はSubプロシージャを定義するキーワードです。
  2. Dim outlookApp As Object
    • 変数「outlookApp」を宣言します。
      この変数は、Outlookアプリケーションを操作するために使用します。
      Object 型を指定しているので、後でOutlookアプリケーションとリンクできます。
  3. Dim mail As Object
    • 変数「mail」を宣言します。
      この変数は、新しいメールを作成するために使います
      後ほど具体的な「メールアイテム」をこの変数に代入します。
  4. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」を使って、新しいOutlookアプリケーションのインスタンス(操作可能なプログラムの実体)を作成します。
      この行で「outlookApp」がOutlookとリンクされ、操作可能になります。
  5. Set mail = outlookApp.CreateItem(olMailItem)
    • Outlookアプリケーションの「CreateItemメソッド」を使って、新しいメールアイテムを作成します。
      引数「olMailItem(値: 0)」は、「メール」を作成することを指定しています。
      この行で作成されたメールアイテムが mail に代入されます。
  6. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  7. .To = “recipient@example.com”
    • To プロパティにメールの宛先(TO)を設定します。
  8. .CC = “cc@example.com”
    • CC(カーボンコピー)の宛先を指定します。
  9. .BCC = “bcc@example.com”
    • BCC(ブラインドカーボンコピー)の宛先を指定します。
  10. .Subject = “テストメール”
    • メールの件名を設定します。
  11. .Body = “これはテストメールです。”
    • 「Bodyプロパティ」にメールの本文をテキスト形式で設定します。
      この行では、「これはテストメールです。」という内容が本文として指定されています。
  12. .Display
    • メールを表示するためのメソッドです。
      これを実行すると、メールの下書き画面が開きます。
      この状態では送信されず、内容を確認して手動で送信できます。
  13. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  14. Set mail = Nothing
    Set outlookApp = Nothing
    • 変数「mail」と「outlookApp」を解放して、メモリを節約します。
      この行を記述することで、使用済みのオブジェクトを安全にクリーンアップできます。
  15. 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

処理結果

使用例2: 複数の宛先にメールを作成する方法の結果

コードの動作概要

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使用して、Outlookアプリケーションを起動します。
このコードが実行されると、VBAがOutlookを操作できるようになります。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) メソッドを使用して、新しいメール(MailItem)を作成します。
olMailItem は「メールアイテム」を意味する定数です。

STEP
メールの設定

.To.CC.BCC.Subject.Body を使って、宛先、件名、本文などを設定します。
複数の宛先を指定する場合は、セミコロン(;)で区切ります。

STEP
メールの下書き画面を表示

.Display を使用して、作成したメールの下書き画面をOutlookで表示します。
この操作により、送信前に内容を確認できます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_MultipleRecipients()
    • マクロ(Subプロシージャ)を定義するキーワードです。
      この行からプログラムが開始されます。マクロの名前は自由に設定できますが、わかりやすい名前が推奨されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Dim toRecipients As Variant
    Dim ccRecipients As Variant
    Dim bccRecipients As Variant
    • 「toRecipients」「ccRecipients」「bccRecipients」は、それぞれTO、CC、BCCの宛先を管理するための配列を格納します。
      配列は複数のメールアドレスをまとめて管理するために使用します。
      Array関数を使用して配列を管理するため、型はVariantになっています。
  5. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  6. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  7. toRecipients = Array(“to1@example.com”, “to2@example.com”, “to3@example.com”)
    • 「Array」関数を使って、TO宛先のメールアドレスを配列として定義します。
      例では3つのメールアドレスを指定しています。
  8. ccRecipients = Array(“cc1@example.com”, “cc2@example.com”)
    • 「ccRecipients」変数に、CC宛先のメールアドレスを配列として格納します。
      配列に複数の値を設定することで、一括管理が可能です。
  9. bccRecipients = Array(“bcc1@example.com”)
    • 「bccRecipients」変数に、BCC宛先のメールアドレスを配列として格納します。
    • 配列を使うことで、柔軟にアドレスを管理できます。
  10. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  11. .To = Join(toRecipients, “;”)
    • 「Join」関数を使い、配列「toRecipients」の値をセミコロン(”;”)で連結して、TOプロパティに設定します。
      これにより、複数の宛先を一度に指定できます。
  12. .CC = Join(ccRecipients, “;”)
    • 「ccRecipients」の配列値をセミコロンで連結し、CCプロパティに設定します。
  13. .BCC = Join(bccRecipients, “;”)
    • 「bccRecipients」の配列値をセミコロンで連結し、BCCプロパティに設定します。
  14. .Subject = “複数宛先のテストメール”
    • 「Subject」プロパティにメールの件名を指定します。
      例では「複数宛先のテストメール」としています。
  15. .Body = “このメールは複数の宛先に送信されます。”
    • 「Body」プロパティにメール本文を指定します。
      この行では、本文に「このメールは複数の宛先に送信されます。」と記述しています。
  16. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  17. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  18. Set mail = Nothing
    Set outlookApp = Nothing
    • 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
  19. 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

処理結果

使用例3: 添付ファイルを1つ付ける方法の結果

コードの動作概要

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使って、Outlookアプリケーションを操作可能にします。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) で、新しいメールアイテムを作成します。

STEP
メールの設定
  • .To で宛先を設定。
  • .Subject で件名を設定。
  • .Body で本文を設定。
STEP
添付ファイルの追加

Attachments.Add メソッドを使い、指定されたパスのファイルを添付します。

STEP
メールの下書き画面を表示

.Display メソッドで、作成したメールをプレビュー画面で表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_WithAttachment()
    • プロシージャ(マクロ)を定義します。この行からコードが実行されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  5. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  6. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  7. .To = “recipient@example.com”
    • 「Toプロパティ」に宛先メールアドレスを指定します。
  8. .Subject = “複数宛先のテストメール”
    • 「Subjectプロパティ」にメールの件名を設定します。
  9. .Body = “このメールには添付ファイルが含まれています。”
    • 「Bodyプロパティ」にメール本文を設定します。
  10. .Attachments.Add “C:\サンプル\サンプル1.xlsx”
    • 「Attachments.Add」メソッドを使用して、指定したパスにあるファイルをメールに添付します。
  11. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  12. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  13. Set mail = Nothing
    Set outlookApp = Nothing
    • 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
  14. 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

処理結果

使用例4: 添付ファイルを複数付ける方法の結果

コードの動作概要

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使って、Outlookアプリケーションを操作可能にします。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) で、新しいメールアイテムを作成します。

STEP
添付ファイルのパスを配列で管理

Array 関数を使用して、添付ファイルのパスを管理します。

STEP
添付ファイルを追加

For Next ループを使用して、配列内の全てのファイルパスを順番に .Attachments.Add メソッドで追加します。

STEP
メールの下書き画面を表示

.Display メソッドで、作成したメールをプレビュー画面で表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_WithMultipleAttachments()
    • プロシージャ(マクロ)を定義します。
      この行からコードが実行されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Dim attachments As Variant
    • 「attachments」は、複数のファイルパスを格納する配列変数です。
  5. Dim i As Long
    • 「i」は、配列を順番に処理するためのカウンタ変数です。
  6. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  7. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  8. attachments = Array(“C:\Users\YourUserName\Documents\file1.txt”, _
    “C:\Users\YourUserName\Documents\file2.pdf”, _
    “C:\Users\YourUserName\Documents\file3.xlsx”)
    • 「Array」関数を使用して、複数の添付ファイルパスをまとめて管理します。
  9. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  10. .To = “recipient@example.com”
    • 「Toプロパティ」に宛先メールアドレスを指定します。
  11. .Subject = “複数宛先のテストメール”
    • 「Subjectプロパティ」にメールの件名を設定します。
  12. .Body = “このメールには添付ファイルが含まれています。”
    • 「Bodyプロパティ」にメール本文を設定します。
  13. For i = LBound(attachments) To UBound(attachments)
    .Attachments.Add attachments(i)
    Next i
    • For Next ループを使用して、配列内の全てのファイルパスを順番に「Attachments.Add」で添付します。
  14. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  15. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  16. Set mail = Nothing
    Set outlookApp = Nothing
    • 「Set … = Nothing」を使い、使用済みのオブジェクトを解放してメモリをクリーンアップします。
  17. 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

処理結果

使用例5: エクセルのセルから宛先を指定してメールを作成する方法

コードの動作概要

STEP
Excelから宛先情報を取得

Range("A1").ValueTo の宛先を取得し、ArrayJoin を使用して CC の複数宛先を設定します。

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使って、Outlookアプリケーションのインスタンスを作成します。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) で、新しいメールを作成します。

STEP
宛先情報を設定

To プロパティに1人の宛先を設定し、CC プロパティに複数の宛先をセミコロンで連結して設定します。

STEP
メールの下書き画面を表示

.Display メソッドを使用して、作成したメールをプレビュー画面で表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_FromExcel()
    • プロシージャ(マクロ)を定義します。
      この行からコードが実行されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Dim wb As Workbook
    • 現在のExcelワークブックを格納するオブジェクト変数を設定します。
  5. Dim ws As Worksheet
    • Excelシートを参照するためのオブジェクト変数を設定します。
  6. Dim toRecipient As String
    • To(宛先)のメールアドレスを格納する変数です。
  7. Dim ccRecipients As Variant
    • CC(カーボンコピー)の複数宛先を格納する配列変数です。
  8. Dim i As Long
    • 配列を処理するためのカウンタ変数です。
  9. Dim attachments As Variant
    • 「attachments」は、複数のファイルパスを格納する配列変数です。
  10. Dim i As Long
    • 「i」は、配列を順番に処理するためのカウンタ変数です。
  11. Set wb = ThisWorkbook
    • 「wb」に現在のブックを格納します。
  12. Set ws = wb.Sheets(“宛先リスト”)
    • 「ws」にシート「宛先リスト」を格納します。
  13. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  14. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  15. toRecipient = ws.Range(“A1”).Value
    • Excelシートのセル「A1」に入力された値を取得して、変数「toRecipient」に格納します。
  16. ccRecipients = Array(ws.Range(“B1”).Value, ws.Range(“C1”).Value)
    • セル「B1」と「C1」の値を配列として取得し、変数「ccRecipients」に格納します。
  17. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  18. .To = toRecipient
    • To宛先に、セル「A1」の値を設定します。
  19. .CC = Join(ccRecipients, “;”)
    • CC宛先に、セル「B1」と「C1」の値をセミコロンで連結して設定します。
  20. .Subject = “セルから宛先を設定したメール”
    • 「Subjectプロパティ」にメールの件名を設定します。
  21. .Body = “このメールはExcelセルの値を基に宛先を設定しています。”
    • 「Bodyプロパティ」にメール本文を設定します。
  22. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  23. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  24. Set mail = Nothing
    Set outlookApp = Nothing
    Set ws = Nothing
    Set wb = Nothing
    • 使用したオブジェクトを解放して、メモリを節約します。
  25. 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

処理結果

使用例6: メールのタイトルと本文をセルの内容から設定する方法の結果

コードの動作概要

STEP
Outlookアプリケーションを起動

CreateObject("Outlook.Application") を使用して、Outlookアプリケーションのインスタンスを作成します。

STEP
新しいメールアイテムを作成

CreateItem(olMailItem) メソッドを使い、新しいメール(MailItem)を作成します。

STEP
件名と本文をセルから取得

Range("A1").Value でセル「A1」の内容を取得して件名に設定します。
同様に、Range("B1").Value でセル「B1」の内容を取得して本文に設定します。

STEP
メールの設定

宛先(To)、件名(Subject)、本文(Body)を設定します。

STEP
下書き画面を表示

.Display メソッドを使用して、作成したメールをプレビュー画面で表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_FromCellContents()
    • プロシージャ(マクロ)を定義します。
      この行からコードが実行されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Dim subjectText As String
    • 件名(Subject)を格納するための文字列型変数を宣言します。
  5. Dim bodyText As String
    • 本文(Body)を格納するための文字列型変数を宣言します。
  6. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  7. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  8. subjectText = ThisWorkbook.Sheets(1).Range(“A1”).Value
    • 現在のExcelブック(ThisWorkbook)の1枚目のシート(Sheets(1))のセル「A1」の内容を取得し、変数「subjectText」に代入します。
      この内容がメールの件名になります。
  9. bodyText = ThisWorkbook.Sheets(1).Range(“B1”).Value
    • 同様に、セル「B1」の内容を取得し、変数「bodyText」に代入します。
      この内容がメールの本文になります。
  10. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  11. .To = “recipient@example.com”
    • メールの宛先(To)を設定します。
  12. .Subject = subjectText
    • 件名(Subject)を設定します。
      先ほどセル「A1」から取得した内容(subjectText)を件名に反映します。
  13. .Body = bodyText
    • 本文(Body)を設定します。
      先ほどセル「B1」から取得した内容(bodyText)を本文に反映します。
  14. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  15. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  16. Set mail = Nothing
    Set outlookApp = Nothing
    • 使用したオブジェクトを解放して、メモリを節約します。
  17. 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

処理結果

使用例7: 条件付きでメールを送信する方法の結果

コードの動作概要

STEP
Excelから宛先情報を取得

GetRecipients 関数で、条件(列Cが「送信」)に該当する行の列A(メールアドレス)を取得します。
その列A(メールアドレス)を Join 関数でセミコロン(;)区切りに変換して宛先リストを作成します。

STEP
Outlookアプリケーションの起動

CreateObject("Outlook.Application") を使用してOutlookアプリケーションを操作可能にします。

STEP
新しいメールアイテムの作成

CreateItem(olMailItem) を使用して、新しいメールアイテムを作成します。

STEP
メールの設定

宛先(To)は、Excelから取得したデータをセミコロン区切りで設定します。
件名(Subject)や本文(Body)を設定します。

STEP
メールの下書き画面を表示

.Display メソッドを使用して、作成したメールのプレビュー画面を表示します。

STEP
エラーハンドリング

条件に該当する宛先がない場合は、MsgBox で通知します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub SendConditionalEmail_Refactored()
    • プロシージャ(マクロ)を定義します。
      この行からコードが実行されます。
  2. Dim outlookApp As Object
    • 「outlookApp」は、Outlookアプリケーションを操作するための変数です。
      変数の型を「Object」に設定しているので、後でOutlookアプリケーションをリンクさせて操作可能にします。
  3. Dim mail As Object
    • 「mail」は、新しいメールアイテムを作成するための変数です。
      この変数にメールアイテムを代入して操作します。
  4. Dim toRecipients() As String
    • 複数の宛先を格納するための文字列配列「toRecipients」を宣言しています。
      ここでは 「 () 」 を付けることで、配列として扱う準備をしています。
  5. toRecipients = GetRecipients()
    • 宛先リストを取得するための関数「GetRecipients」を呼び出し、その結果を変数「toRecipients」に代入します。
      「GetRecipients」は後述されている関数で、条件に基づいて宛先を配列として返します。
  6. If UBound(toRecipients) >= 1 Then
    • 宛先配列「toRecipients」にデータがあるかを判定しています。
      「UBound(toRecipients)」は配列の最終インデックスを返します。
      もし最終インデックスが1以上なら、少なくとも1つの宛先があると判断し、メール作成処理を続けます。
  7. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」を使って、Outlookアプリケーションのインスタンスを作成し、「outlookApp」に代入します。
      この行でOutlookアプリケーションを操作可能な状態にします。
  8. Set mail = outlookApp.CreateItem(olMailItem)
    • Outlookアプリケーションの「CreateItemメソッド」を使用して、新しいメールアイテムを作成します。
      引数「olMailItem(値は 0)」を指定することで、「メール」を作成することを指定しています。
      作成したメールアイテムを「mail」に代入します。
  9. With mail
    • 「Withブロック」の開始を示します。
      この中で、メールオブジェクト(mail)の設定をまとめて記述できます。
  10. .To = Join(toRecipients, “;”)
    • 「Join関数」を使用して、配列「toRecipients」の要素をセミコロン「;」で連結し、宛先(To)に設定します。
      これにより、複数の宛先を1つの文字列として「Toプロパティ」に格納できます。
  11. .Subject = “条件付きメール送信”
    • 「Subjectプロパティ」にメールの件名を設定します。
  12. .Body = “このメールは条件を満たした宛先に送信されます。”
    • 「Bodyプロパティ」にメール本文を設定します。
  13. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  14. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  15. Set mail = Nothing
    Set outlookApp = Nothing
    • 使用済みのオブジェクト(mail と outlookApp)を解放して、メモリを節約します。
      オブジェクトを解放することで、後続の処理に影響を与えることを防ぎます。
  16. Else
    MsgBox “送信条件に該当する宛先が見つかりませんでした。”, vbExclamation
    • 条件に該当する宛先がない場合、警告メッセージボックスを表示します。
      「vbExclamation」を指定することで、注意を促す警告アイコンを表示します。
  17. End If
    • 条件分岐(If 文)の終了を示します。
      宛先があった場合の処理と、なかった場合の処理をここで終了します。
  18. End Sub
    • マクロの終了を示します。

GetRecipients()関数を解説

  1. Private Function GetRecipients() As String()
    • 「GetRecipients」関数の開始を示します。
      この関数は、条件に基づいて宛先リストを配列として返します。
  2. 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」: 宛先の数をカウントする変数。
  3. Set ws = ThisWorkbook.Sheets(“メールリスト”)
    • 現在のブック内のシート「メールリスト」を参照し、「ws」に代入します。
      ここで操作対象のシートを指定します。
  4. lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
    • 列「A」の最終行を取得しています。
      「xlUp」を使用して、最後のデータが入力されたセルを特定します。
  5. ReDim recipients(1 To 1)
    recipientCount = 0
    • 動的配列「recipients」を初期化し、要素数を1つだけ確保します。
      「recipientCount」を「0」に設定し、これからカウントを始めます。
  6. For i = 2 To lastRow
    If ws.Cells(i, “C”).Value = “送信” Then
    • 2行目から最終行までループし、列「C」の値が「送信」であるかを判定します。
  7. recipientCount = recipientCount + 1
    ReDim Preserve recipients(1 To recipientCount)
    recipients(recipientCount) = ws.Cells(i, “A”).Value
    • 条件を満たす場合
      • 宛先カウントを「1」増加。
      • 「ReDim Preserve」を使用して、配列サイズを拡張(既存のデータを保持)。
      • 列「A」の値を配列に格納。
  8. Next i
    • 次の行に進みます。
    • これにより、2行目から最終行まで繰り返し処理を行います。
  9. GetRecipients = recipients
    • 「GetRecipients」関数の戻り値として、宛先リスト(配列)を返します。
  10. 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

処理結果

使用例8: 特定のフォルダ内の全ファイルを添付する方法の結果

コードの動作概要

STEP
フォルダ選択

GetFolderPath 関数で FileDialog を使用してフォルダを選択し、そのパスを取得します。

STEP
フォルダ内のファイルを取得

GetAllFilesInFolder 関数を使い、Dir 関数でフォルダ内のファイルパスを取得します。

STEP
メールの設定
  • 宛先(To): 宛先を指定します。
  • 件名(Subject): 件名を設定します。
  • 本文(Body): メール本文を設定します。
STEP
添付ファイルを追加

取得したすべてのファイルパスをループし、Attachments.Add メソッドでメールに添付します。

STEP
メールの下書き画面を表示

.Display メソッドを使用して、メールのプレビュー画面を表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateMail_WithDirAttachments()
    • プロシージャ(マクロ)を定義します。
      この行からコードが実行されます。
  2. Dim outlookApp As Object
    Dim mail As Object
    Dim folderPath As String
    Dim attachments() As String
    • 各種変数を宣言します。
      • 「outlookApp」: Outlookアプリケーションのインスタンス。
      • 「mail」: 新しいメールアイテム。
      • 「folderPath」: 選択したフォルダのパス。
      • 「attachments」: フォルダ内のファイルパスを格納する動的配列。
  3. folderPath = GetFolderPath()
    If folderPath = “” Then Exit Sub
    • 「GetFolderPath」関数でフォルダパスを取得します。
      フォルダが選択されていない場合は処理を終了します。
  4. attachments = GetAllFilesInFolder(folderPath)
    • 「GetAllFilesInFolder」関数で、指定フォルダ内のファイルパスを取得します。
  5. If UBound(attachments) < 1 Then
    MsgBox “選択したフォルダには添付するファイルがありません。”, vbExclamation
    Exit Sub
    End If
    • ファイルが見つからない場合、警告を表示して処理を終了します。
  6. Set outlookApp = CreateObject(“Outlook.Application”)
    • 「CreateObject」メソッドを使用して、Outlookアプリケーションのインスタンスを作成します。
      この行で、変数「outlookApp」にOutlookアプリケーションがリンクされ、操作可能になります。
  7. Set mail = outlookApp.CreateItem(olMailItem)
    • 「CreateItem」メソッドを使って、新しいメールアイテムを作成します。
      引数「olMailItem」は、新しい「メール」を作成することを指定します。
  8. With mail
    .To = “recipient@example.com”
    .Subject = “フォルダ内の全ファイルを添付”
    .Body = “このメールには指定フォルダ内のすべてのファイルが添付されています。”
    • メールの宛先、件名、本文を設定します。
  9. For i = LBound(attachments) To UBound(attachments)
    .Attachments.Add attachments(i)
    Next i
    • 取得したすべてのファイルパスをループで添付します。
  10. .Display
    • 「Display」メソッドを実行することで、メールのプレビュー画面を表示します。
      この行ではメールはまだ送信されず、内容を確認して手動で送信できます。
  11. End With
    • 「Withブロック」の終了を示します。
      これ以降、メールオブジェクトへの設定は記述されていません。
  12. Set mail = Nothing
    Set outlookApp = Nothing
    • 使用したオブジェクトを解放。
  13. End Sub
    • マクロの終了を示します。

GetFolderPath()関数を解説

  1. Private Function GetFolderPath() As String
    • この関数はFileDialog」を使用してユーザーが選択したフォルダパスを取得します。
  2. Dim folderPath As String
    • ユーザーが選択したフォルダのパスを格納する文字列変数を宣言します。
  3. With Application.FileDialog(msoFileDialogFolderPicker)
    • フォルダ選択ダイアログを表示します。
  4. .Title = “添付ファイルを選択するフォルダを選んでください”
    • ダイアログのタイトルを設定します。
  5. If .Show = -1 Then
    folderPath = .SelectedItems(1)
    Else
    folderPath = “”
    End If
    • ユーザーがフォルダを選択した場合はそのパスを取得します。
      選択がキャンセルされた場合は空文字を返す。
  6. End With
    GetFolderPath = folderPath
    • 選択されたフォルダパスを関数の戻り値として返します。
  7. End Function
    • 関数の終了です。

GetAllFilesInFolder()関数を解説

  1. Private Function GetAllFilesInFolder(folderPath As String) As String()
    • この関数は、指定フォルダ内のすべてのファイルパスを取得して配列に格納します。
  2. Dim fileName As String
    Dim files() As String
    Dim fileCount As Long
    • 「fileName」: Dir 関数で取得するファイル名です。
    • 「files」: ファイルパスを格納する動的配列です。
    • 「fileCount」: 配列の要素数をカウントする変数です。
  3. fileName = Dir(folderPath & “*.*”)
    fileCount = 0
    ReDim files(1 To 1)
    • Dir関数を使ってフォルダ内の最初のファイルを取得します。
    • 配列「files」を初期化します。
  4. Do While fileName <> “”
    fileCount = fileCount + 1
    ReDim Preserve files(1 To fileCount)
    files(fileCount) = folderPath & “\” & fileName
    fileName = Dir()
    Loop
    • Dir関数でフォルダ内のすべてのファイルを取得します。
    • 動的配列「files」に順次ファイルパスを追加します。
  5. GetAllFilesInFolder = files
    • ファイルパスを格納した配列を関数の戻り値として返します。
  6. End Function
    • 関数の終了です。

総括・ポイント

このコードは、指定フォルダ内のすべてのファイルをメールに添付する一般的なシナリオを効率的に処理します。

このコードは、フォルダパス取得 (GetFolderPath) とファイル取得 (GetAllFilesInFolder) にサブルーチンが分かれているため、必要に応じて他のシナリオに適用可能です。

スポンサーリンク

この記事のまとめ

この記事では、VBAを使用してOutlookのメール作成・送信を自動化する方法を解説しました。

初心者から応用まで学べるよう、実際の使用例を交えながら丁寧に説明しています。

ポイントのおさらい

さらに学ぶために

VBAでOutlook操作を習得したことで、メール自動化だけでなく、データ処理スキルも向上しました。

このスキルを活かして、以下のようなExcelシートの自動化にも挑戦してみましょう!

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次