複数の宛先に一括でメールを添付ファイル付きで作成することができるVBAです。シート上に入力した宛先やメール文でメールを一括で作成することができます。
この記事では「複数の宛先に添付ファイル付きメールを一括で作成するVBA」を解説していきます。サンプルファイルもありますので、実際に使ってみてください。
全体
送信先のアドレスが入力されいる「送信先」シートの一覧全員に対して、「メール内容」シートの内容のメールを一括で作成するものです。
サンプルファイルはこちらからダウンロードできます。
実際のコード
早速ですが実際のコードはこちら
Sub mail_create_ikkatu()
Dim objOutlook As Outlook.Application
Dim i
Dim rowMax As Long
Dim wsList As Worksheet
Dim wsMail As Worksheet
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set wsList = ThisWorkbook.Sheets("送信先")
Set wsMail = ThisWorkbook.Sheets("メール内容")
'---添付ファイル1---
Dim attachmentPath1 As String attachmentPath1 = wsMail.Range("B3")
'---添付ファイル2---
Dim attachmentPath2 As String attachmentPath2 = wsMail.Range("B4")
With wsList '送信先シートの件数 rowMax = .Cells(Rows.Count, 1).End(xlUp).Row '送信先の件数分繰り返す For i = 2 To rowMax Set objMail = objOutlook.CreateItem(olMailItem) With wsMail objMail.To = wsList.Cells(i, 4).Value 'メール宛先 objMail.CC = wsList.Cells(i, 5).Value 'メール宛先 CC objMail.BCC = wsList.Cells(i, 6).Value 'メール宛先 BCC objMail.Subject = .Range("B1").Value 'メール件名 objMail.BodyFormat = olFormatPlain 'メールの形式 objMail.Body = wsList.Cells(i, 1).Value & vbCrLf & _ wsList.Cells(i, 2).Value & " " & _ wsList.Cells(i, 3).Value & " 様" & vbCrLf & vbCrLf & _ .Range("B2").Value 'メール本文
'---添付ファイルを添付する---
'添付ファイルが空欄の場合は次へ If attachmentPath1 = "" Then GoTo Label1 Else objMail.Attachments.Add (attachmentPath1) '添付ファイル1 End If
Label1: If attachmentPath2 = "" Then GoTo Label2 Else objMail.Attachments.Add (attachmentPath2) '添付ファイル2 End If
Label2:
'--- メールを表示 --- objMail.Display
'--- メールを送付 --- 'objMail.Send End With Next i Set objOutlook = Nothing MsgBox "作成完了"
End With
End Sub
こちらは添付ファイルのパスを取得して、セルに入力する部分です。
Sub tenpfile()
Dim wsMail As Worksheet
Set wsMail = ThisWorkbook.Sheets("メール内容")
'--- ファイル選択ダイアログ ---' Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogOpen) '--- 選択可能なファイルの種類 ---' Call fd.Filters.Clear '--- ダイアログボックスの見出し(左上のやつ) ---' fd.Title = "添付ファイルの選択" '--- 初期表示フォルダ ---' fd.InitialFileName = "ファイルを選択してください" '--- 表示アイコンの大きさ ---' fd.InitialView = msoFileDialogViewSmallIcons '--- ファイルパスを格納する変数 ---' Dim strFilePath As String '--- 有効なボタンがクリックされた時の処理 --- If (fd.Show = True) Then strFilePath = fd.SelectedItems.Item(1) Else strFilePath = "" End If
'MsgBox (strFilePath) wsMail.Range("B3").Value = strFilePath
End Sub
解説
参照設定にはこちらを必ず入れてください。
- ”Microsoft Outlook 16.0 Object Library”
添付ファイルは、ダイアログ表示させて選択し、ファイルのフルパスを入力させたものを読み取って作成させています。
サンプルファイルでは添付ファイルは2つまで添付できるようにしています。Outlookに添付ファイルの添付の制限数はありません。3つ以上のファイルを自動で添付するには、コードの追加と、マクロのボタンを新たに追加する必要があります。
メールをテキスト形式やHTML形式などが設定できます。本文をHTMLで作成する場合などはHTMLにしておきましょう。
また、企業のセキュリティポリシーなどで、HTMLメールでの送信が禁止されている場合もあります。そうした場合には、テキスト形式などへ設定しておきましょう。
内容 | コード |
---|---|
HTML形式 | objMail.BodyFormat = olFormatHTML |
テキスト形式 | objMail.BodyFormat = olFormatPlain |
リッチテキスト形式 | objMail.BodyFormat = olFormatRichText |
形式の指定なし | objMail.BodyFormat = olFormatUnspecified |
メールを作成した後に、送信をさせるかどうかを設定できます。
メールを表示させずに送信する場合は”objMail.Send”を使いますが、作成されたメールを送信前に確認することができません。最初の1つ目などは誤送信を防いだり誤字のチェックなどのために、”objMail.Display”で一度作成して内容を確認することをおすすめします。
内容 | コード |
---|---|
メールを送信せず表示させる | objMail.Display |
メールを表示させず送信する | objMail.Send |
下からサンプルファイルがダウンロードできます。