Outlookメール作成
課題・悩み「メールの作成を自動化したい」
解決策「Excelのデータからメールを作成するOutlook VBAマクロ」を解説
決まったメールは毎回1から作成するのは面倒だし、時間の無駄。
そこでOutlookマクロで自動化しました。
【ExcelのデータからOutlookメールを作成する】VBAマクロです。
このVBAマクロを使えば、定期的な報告メールの作成や、特定のファイルを頻繁に添付する必要がある作業を大幅に効率化できます。
【Excelのデータからメールを作成するOutlook VBAマクロ】を図解で解説しています。
VBAマクロファイルを配布中。
以下のボタンよりダウンロードしてください。
Outlookメール作成
Outlookメール作成Excelファイルの使い方
Excelに内容を入力する
ExcelファイルのSheet1の以下のセルに、作成したいメールの条件や内容を入力してください。
メール本文のフォント
メール本文に使用したいフォントは、Sheet1のC2に入力してください。
メール本文のフォントサイズ
メール本文のフォントサイズは、Sheet1のC3に入力してください。
メールのToの宛先
メールのToの宛先は、Sheet1のC4に入力してください。
メールのCcの宛先
メールのCcの宛先は、Sheet1のC5、D5…に入力してください。
メールのタイトル
メールのタイトルは、Sheet1のC6に入力してください。
メールの本文
メールの本文は、Sheet1のC7に入力してください。
添付ファイルの保存フォルダ
添付ファイルはそのファイルが保存されているフォルダのパスを、Sheet1のC8に入力してください。
入力したフォルダ内のすべてのファイルを添付します。
【メール作成】のボタンを押す
Excelファイルの【メール作成】のボタンを押すと、入力された内容でメールが作成されます。
ExcelのデータからOutlookのメールを作成するVBAマクロのコード
ExcelとOutlookを連携させてメールを自動生成するVBAマクロの作成方法についてご紹介します。
これは、Excelシートに保存されたデータを基にして、Outlookでメールを作成し、必要なファイルを添付するプログラムです。
これは特に、定期的に報告メールを送る必要がある業務などで役立ちます。
Option Explicit
' メール作成と送信準備のメイン処理
Sub CreateAndPrepareEmail()
On Error GoTo ErrorHandler
' シート名の指定
Dim sheetName As String
sheetName = "Sheet1"
' OutlookとMailItemオブジェクトの初期化
Dim OL As Object
Set OL = CreateOutlookObject()
Dim MI As Object
Set MI = CreateMailItem(OL)
' ワークシートの取得
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(sheetName)
' 基本情報の設定
SetBasicEmailInfo MI, ws
' ファイルの添付
AttachFilesFromFolder MI, ws.Range("C8").Value
AddSelectedAttachment MI
' メールの表示
MI.Display
' オブジェクトの解放
CleanExit:
Set OL = Nothing
Set MI = Nothing
Set ws = Nothing
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
Resume CleanExit
End Sub
' Outlookオブジェクトの作成
Function CreateOutlookObject() As Object
On Error Resume Next
Set CreateOutlookObject = CreateObject("Outlook.Application")
On Error GoTo 0
End Function
' MailItemオブジェクトの作成
Function CreateMailItem(OL As Object) As Object
If Not OL Is Nothing Then
Set CreateMailItem = OL.CreateItem(0) ' olMailItem
End If
End Function
' メールの基本情報を設定
Sub SetBasicEmailInfo(ByRef MI As Object, ByRef ws As Worksheet)
If MI Is Nothing Or ws Is Nothing Then Exit Sub
' 宛先、CC、件名、本文の設定
MI.To = ws.Range("C4").Value
MI.Cc = ws.Range("C5").Value
MI.Subject = ws.Range("C6").Value
' メール本文のHTML形式での設定
Dim emailBody As String
emailBody = ws.Range("C7").Value
emailBody = Replace(emailBody, vbLf, "")
' フォントの設定
Dim fontName As String
Dim fontSize As String
fontName = ws.Range("C2").Value
fontSize = ws.Range("C3").Value
MI.HTMLBody = "" & emailBody & ""
End Sub
' 指定されたフォルダ内のファイルをメールに添付
Sub AttachFilesFromFolder(ByRef MI As Object, folderPath As String)
If MI Is Nothing Or folderPath = "" Then Exit Sub
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(folderPath) Then Exit Sub
Dim folder As Object
Set folder = fso.GetFolder(folderPath)
Dim file As Object
For Each file In folder.Files
MI.Attachments.Add file.Path
Next file
Set fso = Nothing
Set folder = Nothing
End Sub
' ファイル選択ダイアログを表示し、選択されたファイルをメールに添付
Sub AddSelectedAttachment(ByRef MI As Object)
If MI Is Nothing Then Exit Sub
Dim selectedFilePath As String
selectedFilePath = SelectAttachmentFile()
If selectedFilePath <> "" Then
MI.Attachments.Add selectedFilePath
End If
End Sub
' ファイル選択ダイアログを表示し、選択されたファイルのパスを返す
Function SelectAttachmentFile() As String
Dim fd As Object
Set fd = Application.FileDialog(3) ' msoFileDialogFilePicker
With fd
.AllowMultiSelect = False
.Title = "添付ファイルを選択してください"
.InitialFileName = ThisWorkbook.Path & "\"
If .Show = -1 Then
SelectAttachmentFile = .SelectedItems(1)
Else
SelectAttachmentFile = ""
End If
End With
Set fd = Nothing
End Function
コードの概要
Outlookオブジェクトの作成
最初に、Outlookアプリケーションオブジェクトを生成します。
Function CreateOutlookObject() As Object
Set CreateOutlookObject = CreateObject("Outlook.Application")
End Function
MailItemオブジェクトの作成
Outlookで新しいメールアイテム(メール)を生成します。
Function CreateMailItem(OL As Object) As Object
Set CreateMailItem = OL.CreateItem(0) ' olMailItem
End Function
Excelシートからのデータ読み込み
指定したExcelシートからメールの宛先、件名、本文などの情報を取得します。
Sub SetBasicEmailInfo(ByRef MI As Object, ByRef ws As Worksheet)
MI.To = ws.Range("C4").Value
MI.Cc = ws.Range("C5").Value
MI.Subject = ws.Range("C6").Value
' 以下、本文とフォント設定のコード
End Sub
フォルダ内のファイル添付
指定されたフォルダ内の全ファイルをメールに添付します。
Sub AttachFilesFromFolder(ByRef MI As Object, folderPath As String)
' フォルダ内のファイルをメールに添付する処理
End Sub
手動でのファイル添付
ユーザーがファイル選択ダイアログを通じてファイルを選択し、メールに添付します。
Sub AddSelectedAttachment(ByRef MI As Object)
' ユーザーが選択したファイルをメールに添付する処理
End Sub
メールの表示
作成されたメールをOutlook上で表示します。
MI.Display
カスタイマイズ箇所
シート名の指定
コードは特定のExcelシートに依存しています。
使用するシート名に応じてこの値を変更してください。
sheetName = "YourSheetName"
メールの宛先、CC、件名、本文のセル参照
メールの各情報はExcelシートの特定のセルから取得されます。
これらのセルの参照を実際のデータが含まれているセルに変更する必要があります。
MI.To = ws.Range("YourCellForTo").ValueMI.Cc = ws.Range("YourCellForCc").ValueMI.Subject = ws.Range("YourCellForSubject").ValueemailBody = ws.Range("YourCellForBody").Value
フォント名とフォントサイズのセル参照
メール本文のHTMLフォーマットに使用するフォント名とサイズを設定するセル参照を適切なものに変更します。
fontName = ws.Range("YourCellForFontName").ValuefontSize = ws.Range("YourCellForFontSize").Value
添付ファイルのフォルダパスのセル参照
添付ファイルとして指定されたフォルダのパスが含まれるセル参照を適切なものに変更します。
folderPath = ws.Range("YourCellForFolderPath").Value
ファイル選択ダイアログの初期パス設定
ファイル選択ダイアログが開かれたときの初期ディレクトリパスを変更します。
.InitialFileName = "YourInitialPath\"
マクロ実行時の注意点
データ量と処理時間
Excelシートにデータが多い場合や、フォルダ内に多くのファイルがある場合、処理に時間がかかる可能性があります。
操作の取り消し
VBAマクロで実行した操作は通常、元に戻せません。
重要なデータを扱う場合は、事前にバックアップを取ることをお勧めします。
マクロ実行に必要な環境設定
このコードはMicrosoft ExcelとOutlookがインストールされている環境でのみ動作します。
また、Excelのセキュリティ設定でマクロの実行が許可されている必要があります。
エラーハンドリングが含まれていますが、特定のエラーについてはより詳細な対処が必要になる場合があります。
参照設定
【ツール】→【参照設定】→【Microsoft Outlook 16.0 Object Library】にチェックを入れます。
まとめ:VBAマクロでメール作成のミス削減
Outlookメール作成
Outlookの作業を自動化する便利なVBAマクロのコードの一覧です。
コピペでOK!Outlook VBAのコード一覧
Outlook VBAの基本
Outlookの操作
Outlookメール作成
Outlook メール本文作成
Outlook メール管理
Outlook 予定表の操作
Outlook VBA おすすめ参考書籍
Outlookの作業を自動化する便利なVBAマクロのコードの一覧です。
コメント