[Excel VBA] Outlookを経由してメール送信

VBAプログラミング

ExcelのVBAで実はメール送信も出来ちゃう!今回はOutlookがインストールされていて、それ経由で送信する方法を教えるよ。

宛先やCC、件名、本文、添付ファイルの保存先をリストにしておいて、リストの一番上から順々にメール送信していくことが出来るよ。

まずは参照設定というのを行って、Outlookの機能をExcelから呼び出せるようにします。

  1. メニューバーのツールから、参照設定を開く。

2. Microsoft Outlook xx Object LibraryにチェックをつけてOKをクリック。

xxのところはインストールされているOfficeのバージョンによって異なるよ。

そして、Excelの表をこんな感じにしてね。

セルB2が送信元アドレス。5行目から送信情報を記入。

A列が宛先、B列がCC、C列がBCC、D列が件名、E列ば本文、F列が添付ファイルのパスを記入します。

次にコードです!

Sub ボタン1_Click()

    Dim SendMailadd As String
    Dim rowcounter As Integer
    Dim SendTo As String
    Dim MailTitle As String
    Dim MailBody As String
    
    '5行目からのデータを取得
    rowcounter = 5

    With Sheets("Sheet1")
        
        '送信元アドレス取得
        SendFrom = Cells(2, 2)
        
        '5行目から宛先が空になるまでループ
        Do Until Cells(rowcounter, 1) = ""
        
            SendTo = Cells(rowcounter, 1)
            SendCC = Cells(rowcounter, 2)
            SendBCC = Cells(rowcounter, 3)
            MailTitle = Cells(rowcounter, 4)
            MailBody = Cells(rowcounter, 5)
            AttachFile = Cells(rowcounter, 6)
            
            'メール送信
            Call SendMail(SendFrom, SendTo, SendCC, SendBCC, MailTitle, MailBody, AttachFile)
            
            rowcounter = rowcounter + 1
        
        Loop
    
    
    End With
    
End Sub
' メール配信する
Sub SendMail(SendFrom, SendTo, SendCC, SendBCC, MailTitle, MailBody, AttachFile)

On Error GoTo ErrorHandler

    Set oApp = CreateObject("Outlook.Application")
    Set objMAIL = oApp.CreateItem(0)

    objMAIL.SentOnBehalfOfName = SendFrom


    objMAIL.BodyFormat = 2          'HTML形式
    objMAIL.Subject = MailTitle     ' 件名
    objMAIL.Body = MailBody         ' 本文
    objMAIL.To = SendTo
    objMAIL.CC = SendCC
    objMAIL.BCC = SendBCC
    If AttachFile <> "" Then
        objMAIL.Attachments.Add AttachFile
    End If

    objMAIL.Display

    ' メール送信
    objMAIL.send

    Set objMAIL = Nothing
    Set oApp = Nothing

    Exit Sub

ErrorHandler:

    MsgBox (Err.Description)

End Sub

このサンプルでは宛先が空白になるまで処理をループさせているから、もし宛先が空白でCC、BCCのみの場合は対応出来ないから、必要に応じて Do Until Cells(rowcounter, 1) = “” の1の部分をループ対象とする列番号に変更してね。

このExcelからのメール送信をうまく使えば、例えば定期的に同じ人に同じメッセージまたは添付を送るような時は、あらかじめExcel上に送信先などの情報を入れておいて、後は好きなタイミングで送信ボタンを押すだけでメールが送信できるので、とても便利です。

あと、もし業務でFAXを一斉に送信したい時は、インターネットFAXというサービスを利用すれば、FAX送信したい文書を添付して、送信先のFAX番号を宛先に入れて、@マーク以降を決められたドメイン名を入れると、メール送信したものがそのままFAX送信してくれるというものがあるから、その時に今回のExcelをうまく使えば、FAX送信の手間がものすごく省けるよ。

インターネットFAXにもし興味があれば、下記のサービスがオススメだよ。

[Excel VBA] CSV検索ツール
Vlookup不要のCSV検索CSVのファイルを検索するときに、ある一つの情報だけを検索したいのであれば、Excelで開いて、検索をすればいいけれど、もし大量の行数の中から複数行探したいような場合、1件ずつ検索していくと大変だ...

コメント

  1. いまむらひろみ より:

    とても参考にさせていただいております。
    コンパイルエラーが出てしまうのは私だけでしょうか?
    SendMail部分。

タイトルとURLをコピーしました