【VBA Outlook】添付ファイル付きメールを自動で作成する方法

3 min
【ExcelVBA】添付ファイル付きメールを自動で作成する

記事内に広告を含む場合があります。このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。問題のある表現がありましたら、お問い合わせいただけますと幸いです。

Excel VBAでOutlookのメールを添付ファイル付きで自動作成する方法を解説します。

実際のコード

早速ですが実際のコードはこちら。

Sub mail_create()
    
'--- Outlook操作のオブジェクト ---
    Dim objOutlook As Object
    Set objOutlook = New Outlook.Application
    
'--- メールオブジェクト ---
    Dim objMail As Object
    Set objMail = objOutlook.CreateItem(olMailItem)
        
'--- メールの内容を格納する変数 ---
    Dim toStr As String 'to(宛先)
    Dim ccStr As String  'cc(ccの宛先)
    Dim bccStr As String  'bcc(bccの宛先)
    Dim subjectStr As String 'メールの件名
    Dim bodyStr As String  'メールの本文
    Dim attachmentPath As String  '添付ファイルのパス


'---Excelから情報取得---
'セルは適当に入れています。Excel内にある場合は実際のセルに設定してください。
        toStr = Range("A1").Value
        ccStr = Range("A2").Value
        bccStr = Range("A3").Value
        subjectStr = Range("A4").Value
        attachmentPath = Range("A5").Value
      
  
'--- メールの内容をセット ---
'上のセルから取得もできますが、コードに書き込んでも可能です。
'どちらか一方を使ってください。
    'to宛先をセット
    toStr = "abc@gmail.com"
    
    'ccをセット
    ccStr = "abc@gmail.com"
    
    'Bccをセット
    'bccStr = "abc@gmail.com"
    
    '--- 件名の内容 ---
    subjectStr = "メールの件名を入力します。"
    
    '--- 本文の内容 ---
    bodyStr = "本文を入力します。"
        
'--- メールを作成 ---
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.BCC = bccStr
    objMail.Subject = subjectStr
    objMail.BodyFormat = olFormatPlain 'メールをテキスト形式に設定
    objMail.Body = bodyStr

 '添付ファイルパスが空白の場合にスルーする
    If attachmentPath = "" Then
    
    Else
     objMail.Attachments.Add (attachmentPath)
    End If
   
    
'--- メールを表示 ---
    objMail.Display
    
'--- メールを送付 ---
    'objMail.Send
        
End Sub

解説

参照設定

参照設定にはこちらを必ず入れてください。

  • ”Microsoft Outlook 16.0 Object Library”

添付ファイルのパス

添付ファイルのパスはフルパスで指定してください。

メールの形式

メールをテキスト形式や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

サンプルファイル

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

ダウンロードはこちら

参考

ふー

ふー

Microsoft Power Platformを使ったり、ガジェットを買ったり、アニメ見たり、バイクに乗ったり、色々しています。

FOLLOW

カテゴリー:
関連記事

5 件のコメント

  1. 上記のマクロ参考にしたいのですが
    別のプログラムで取得したファイルを添付するにはどうしたらよいでしょうか?

    別のプログラムが下記になります、これもネットで見つけた式ですが
    下記はファイルを開くマクロですが、これを開くのではなく添付したいのですが分かりますでしょうか?

    Sub ファイル()

    Dim FileTime As Date
    Dim MaxTime As Date
    Dim FileName As String
    Dim MaxFileName As String

    With CreateObject(“WScript.Shell”) ‘カレントフォルダを指定

    .CurrentDirectory = “D:実績”

    End With

    FileName = Dir(“横もち依頼*.xlsx”) ‘ワイルドカードで拡張子「xlsx」ファイルを取得

    Do While FileName “” ‘ファイルを取得出来なくなるまでループ

    FileTime = FileDateTime(FileName) ‘取得したファイルの日時を取得

    If FileTime > MaxTime Then ‘時間を比較

    MaxTime = FileTime ‘日付が大きい場合は格納
    MaxFileName = FileName ‘日付が大きい場合はファイル名を格納

    End If

    FileName = Dir()

    Loop

    Workbooks.Open MaxFileName ‘最終的に最新日時のファイルを開く

    End Sub

    • コメントありがとうございます。

      添付ファイルはファイルへのフルパスを利用しますので、そのフルパスを取得する必要があります。
      ファイル名は取得できているようですので、フォルダーのパスを結合させ、添付ファイルのパスとして利用します。

      若干コードを作り替えていますが、下記でどうでしょう。

      Sub mail_create()

      ‘— Outlook操作のオブジェクト —
      Dim objOutlook As Object
      Set objOutlook = New Outlook.Application

      ‘— メールオブジェクト —
      Dim objMail As Object
      Set objMail = objOutlook.CreateItem(olMailItem)

      ‘— メールの内容を格納する変数 —
      Dim toStr As String ‘to(宛先)
      Dim ccStr As String ‘cc(ccの宛先)
      Dim bccStr As String ‘bcc(bccの宛先)
      Dim subjectStr As String ‘メールの件名
      Dim bodyStr As String ‘メールの本文
      Dim attachmentPath As String ‘添付ファイルのパス

      ‘— ファイル取得の変数 —
      Dim FileTime As Date
      Dim MaxTime As Date
      Dim FileName As String
      Dim MaxFileName As String
      Dim FolderPath As String ‘ フォルダのパスを格納する変数を追加

      ‘FolderPath = “D:\実績\” ‘ フォルダのパスを指定

      FileName = Dir(FolderPath & “横もち依頼*.xlsx”) ‘ フルパスでのファイル取得

      Do While FileName <> “” ‘ ファイルを取得できる間ループ

      FileTime = FileDateTime(FolderPath & FileName) ‘ ファイルの日時を取得

      If FileTime > MaxTime Then ‘ 時間を比較
      MaxTime = FileTime ‘ 日付が大きい場合は格納
      MaxFileName = FileName ‘ 日付が大きい場合はファイル名を格納
      End If

      FileName = Dir()

      Loop

      ‘—Excelから情報取得—
      ‘セルは適当に入れています。Excel内にある場合は実際のセルに設定してください。
      toStr = Range(“A1”).Value
      ccStr = Range(“A2”).Value
      bccStr = Range(“A3”).Value
      subjectStr = Range(“A4”).Value
      attachmentPath = FolderPath & MaxFileName ’ 取得したファイルパスを利用

      ‘— メールの内容をセット —
      ‘上のセルから取得もできますが、コードに書き込んでも可能です。
      ‘どちらか一方を使ってください。
      ‘to宛先をセット
      toStr = “abc@gmail.com”

      ‘ccをセット
      ccStr = “abc@gmail.com”

      ‘Bccをセット
      ‘bccStr = “abc@gmail.com”

      ‘— 件名の内容 —
      subjectStr = “メールの件名を入力します。”

      ‘— 本文の内容 —
      bodyStr = “本文を入力します。”

      ‘— メールを作成 —
      objMail.To = toStr
      objMail.CC = ccStr
      objMail.BCC = bccStr
      objMail.Subject = subjectStr
      objMail.BodyFormat = olFormatPlain ‘メールをテキスト形式に設定
      objMail.Body = bodyStr

      ‘添付ファイルパスが空白の場合にスルーする
      If attachmentPath = “” Then

      Else
      objMail.Attachments.Add (attachmentPath)
      End If

      ‘— メールを表示 —
      objMail.Display

      ‘— メールを送付 —
      ‘objMail.Send

      End Sub

  2. 対応頂いてありがとうございます
    完璧です
    完全に求めて居た状態になりました

    感謝感激です。

  3. 1個教えて下さい。

    本文に色々と文字を入れるのですが、
    その間の部分を一部赤文字にする事は可能ですか?

    お疲れ様です。  ←黒文字
    今日も晴天です  ←黒文字
    至急の案件です  ←これを赤文字
    それではこれにて ←黒文字
    可能ですか?

コメントを残す

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

CAPTCHA