課題・悩み「定型文で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の操作を自動化することで、日常的なタスクを効率化できます。
このスクリプトは、基本的なフレームワークを提供し、必要に応じてカスタマイズが可能です。
Outlookの作業を自動化する便利なVBAマクロのコードの一覧です。
コメント