【サンプルファイル付き】複数の宛先への添付ファイル付きメールを一括で自動作成する方法【ExcelVBA】

【サンプルファイル付き】複数の宛先への添付ファイル付きメールを一括で自動作成する方法【ExcelVBA】

複数の宛先に一括でメールを添付ファイル付きで作成することができるVBAです。シート上に入力した宛先やメール文でメールを一括で作成することができます。

この記事では「複数の宛先に添付ファイル付きメールを一括で作成する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


添付ファイルのパスを取得してセルに入力する

こちらは添付ファイルのパスを取得して、セルに入力する部分です。

VBA
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

サンプルファイル

下からサンプルファイルがダウンロードできます。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA