非プログラマーでもできる!業務の自動化

Outlookの返信を自動作成しファイルを添付するVBAマクロ

当ページのリンクの一部に広告が含まれています。

課題・悩み「定型文でOKなメールの返信作成を自動化したい」

解決策「選択したメールに変身を作成し、特定のファイルを添付するVBAマクロ」を解説

このVBAスクリプトは、Microsoft Outlookで特定のメールに自動で返信し、Excelファイルを添付するためのものです。

このスクリプトを実行すると、現在選択されているメールに対して返信メールが作成され、指定したExcelファイルが添付されます。

この記事では

【選択したメールに変身を作成し、特定のファイルを添付するVBAマクロ】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

Outlookの返信を自動作成しファイルを添付するVBAマクロのコード

このVBAマクロは、Microsoft Outlook内で現在選択されているメールに対して返信を行い、特定のファイルを添付する機能を実装しています。

Option Explicit

Sub ReplyWithEmailAttachment()
    Dim OutlookApp As Object
    Dim selectedMail As Object
    Dim replyMail As Object
    Dim fileToAttach As String
    Dim emailBody As String
    Dim attachFolder As String
    Dim attachPath As String
    
    ' Outlook アプリケーションのインスタンスを生成
    Set OutlookApp = CreateObject("Outlook.Application")
    
    ' 現在選択されているメールアイテムを取得
    On Error Resume Next ' エラーが発生した場合、次の行へ進む
    Set selectedMail = OutlookApp.ActiveExplorer.Selection.Item(1)
    On Error GoTo 0 ' エラーハンドリングをデフォルトに戻す
    
    If Not selectedMail Is Nothing Then
        ' 返信メールアイテムを生成(ReplyAllからReplyに変更)
        Set replyMail = selectedMail.Reply
        
        ' ThisWorkbookのSheet1から情報を取得
        With ThisWorkbook.Sheets("Sheet1")
            emailBody = .Range("C6").Value       ' メールの本文
            attachFolder = .Range("C8").Value    ' 添付ファイルのフォルダ
            fileToAttach = .Range("C7").Value    ' 添付するファイル名
        End With
        
        ' 添付ファイルのパスを組み立て
        attachPath = attachFolder & "\" & fileToAttach & ".xlsx"
        
        ' 返信メール設定
        With replyMail
            .Body = emailBody & vbCrLf & .Body  ' 返信するメールの本文を設定
            ' ファイルを添付(ファイルが存在する場合のみ)
            If Len(Dir(attachPath)) > 0 Then
                .Attachments.Add attachPath
            Else
                MsgBox attachPath & " が見つかりません。", vbCritical, "ファイル添付エラー"
                Exit Sub
            End If
            .Display ' メールを表示(または .Send で直接送信)
        End With
    Else
        MsgBox "メールが選択されていません。", vbExclamation, "エラー"
    End If
    
    ' オブジェクトを解放
    Set replyMail = Nothing
    Set selectedMail = Nothing
    Set OutlookApp = Nothing
End Sub

全体の処理の概要

Outlookアプリケーションのインスタンスを生成: Outlookと連携するための準備を行います。

現在選択されているメールアイテムを取得: 返信を作成する元のメールを特定します。

返信メールアイテムを生成: 選択したメールに対する返信メールを準備します。

Excelから情報を取得: Excelのシートからメール本文、添付ファイルの名前、フォルダパスを読み込みます。

添付ファイルのパスを組み立て: ファイルの完全なパスを作成します。

返信メールを設定し、表示または送信: メールに本文を設定し、ファイルを添付後、メールを表示または送信します。

オブジェクトの解放: リソースを解放し、終了処理を行います。

各処理の解説

Outlookアプリケーションのインスタンス生成

VBAからOutlookを操作するために、Outlookのアプリケーションオブジェクトを作成します。

Set OutlookApp = CreateObject("Outlook.Application")

選択されたメールアイテムの取得

Outlookで選択されているメールを取得します。

これが返信の基となるメールです。

Set selectedMail = OutlookApp.ActiveExplorer.Selection.Item(1)

返信メールアイテムの生成

選択したメールに対して返信オブジェクトを作成します。

ここではReplyメソッドを使い、CCを含まない返信を準備します。

Set replyMail = selectedMail.Reply

Excelからの情報取得

Excelのシートからメールの本文、添付するファイルの名前、ファイルが保存されているフォルダのパスを取得します。

With ThisWorkbook.Sheets("Sheet1") ... End With

添付ファイルのパス組み立て

取得したフォルダパスとファイル名から、添付するファイルの完全なパスを生成します。

attachPath = attachFolder & "\" & fileToAttach & ".xlsx"

メールの設定と表示/送信

返信メールに本文を設定し、ファイルを添付後、メールを表示または送信します。

With replyMail ... End With

オブジェクトの解放

使用したオブジェクトを解放し、メモリをクリアします。

Set replyMail = Nothing ... Set OutlookApp = Nothing

注意点

処理時間

大量のデータを扱う場合、特にファイルの添付やExcelからの情報読み取りに時間がかかる可能性があります。

操作の取り消し

VBAマクロで実行した操作は基本的に取り消しできません。

特にメールを送信した場合、取り消しは不可能ですので、実行前に内容を確認してください。

セキュリティ設定

マクロを実行するためには、OutlookおよびExcelのセキュリティ設定でマクロを許可している必要があります。

企業環境では、セキュリティポリシーによりマクロの実行が制限されている場合があります。

必要な環境設定

参照設定の追加

特にこのコードでは必要ありませんが、一般にVBAで外部アプリケーション(Outlookなど)を操作する場合は、適切なオブジェクトライブラリへの参照設定が必要になることがあります。

このコードではCreateObjectを使用しているため、追加の参照設定は不要です。

Outlookのインストール

当然ですが、Outlookがインストールされていない環境ではこのマクロは動作しません。

利用する環境に合わせて変更する必要がある箇所を明確にするために、以下の表を参考にしてください。

変更が必要な主な部分は、Excelシートから情報を取得する箇所です。

これは、メールの本文、添付ファイルの名前、およびファイルが保存されているフォルダのパスに関連しています。

コードのカスタマイズ箇所

特定のセルから情報を取得する部分のコードは以下のようになります。この部分を自分の環境に合わせて変更する必要があります。

たとえば、メールの本文がSheet1のD10セルにある場合、.Range(“C6”).Valueを.Range(“D10”).Valueに変更する必要があります。

同様に、添付ファイルの情報が異なる場所にある場合も、適切なセル参照に更新してください。

With ThisWorkbook.Sheets("Sheet1")
    emailBody = .Range("C6").Value       ' メールの本文
    attachFolder = .Range("C8").Value    ' 添付ファイルのフォルダ
    fileToAttach = .Range("C7").Value    ' 添付するファイル名
End With

メールの本文

メールの本文として使用するテキストは、Excelの特定のセル(例:C6)から取得します。

このセルの位置が異なる場合は、適切なセル参照に変更してください。

.Range("C6").Value

添付ファイルのフォルダパス

添付ファイルが保存されているフォルダのパスを指定するセル(例:C8)です。

パスが異なる場合や、別のセルに情報がある場合は、この部分を変更する必要があります。

.Range("C8").Value

添付ファイルの名前

添付するファイルの名前を指定するセル(例:C7)です。

ファイル名や格納されているセルが異なる場合は、ここを変更してください。

.Range("C7").Value

まとめ:

このコードは、Outlookで選択されたメールに返信し、Excelファイルを添付する自動化スクリプトの一例です。

VBAを使ってOutlookの操作を自動化することで、日常的なタスクを効率化できます。

このスクリプトは、基本的なフレームワークを提供し、必要に応じてカスタマイズが可能です。

コピペでOK!Outlook VBAのコード一覧

Outlook VBAの基本

Outlookの操作

Outlookメール作成

Outlook メール本文作成

Outlook メール管理

Outlook 予定表

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次