OutlookメールをエクセルVBAで作成する方法

動作確認:Microsoft Excel 2019、Microsoft Outlook 2019

皆さん、お元気ですかrittiです。

今回は普段の業務でメール作成をする方向けの役立ちツールを紹介します。
複数の相手に同じ連絡をする際に手作業で作業するとミスする場合がありますよね。
Excel VBAでツールを作り、正確にメール作成出来る様にする方法をお伝えします。

まずはExcelの設定を確認します。まず新規のエクセルを開きます。

VBAを使用する場合、マクロ有効ブックのExcelにする必要があります。
設定の仕方は左上の「ファイル」を開き、

名前を付けて保存を選択します。

保存先はどこでも構いません。ファイルの種類を「Excel マクロ有効ブック(*.xlsm)」で保存します。

これでマクロが作成できるExcelが作成できました。このままではマクロを使用する事が出来ない為、マクロを有効にするための設定をします。保存したExcelを開きます。

Excelの一番左上のファイルを選択し、オプションを選択します。

次にトラストセンターを選択し、トラストセンターの設定をクリックします。

マクロの設定を選択し、マクロの設定を「警告を表示してすべてのマクロを無効にする」に変更します。

これでマクロを有効にする設定に変更できました。

次にマクロを機能を使用できるように「開発」のツールを表示させる設定を行います。マクロを有効にするための設定をしたときと同じように1番左上のファイルを選択し、オプションを選択。

リボンのユーザ設定を選択し、開発にチェックボックスを入れ、OKを押します。

これで「開発」の機能が表示されるようになりました。

次に参照設定の「Microsoft Outlook 16.0 Object Library」にチェックが無いと、
プログラムを実行してもOutlookメールが作成されないので設定します。

「開発」を選択し、「Visual Basic」を選択

「ツール」の参照設定をクリックする。

「Microsoft Outlook 16.0 Object Library」にチェックをつけます。

これでOutlookのメールが作成できるようになります。

次にExcelのシートを2つ用意します。シート名は「Sheet1」「Sheet2」とします。
次にSheet1に下記図のようにレイアウトを作成します。ソースコードも記載します。

A列 管理コード 手入力
B列 宛先:VLOOKUP関数を使用してSheet2から参照
C列 Ccメンバー:G14、G15にある「上司、部下」のどちらかを入力
D列 Cc:VLOOKUP関数を使用してSheet1のG14:H15から参照
E列 会社名:VLOOKUP関数を使用してSheet2から参照
F列 担当者:VLOOKUP関数を使用してSheet2から参照
G列 件名:A14、A15にある「日程調整の件、受領連絡」のどちらかを入力
H列 内容:VLOOKUP関数を使用してSheet1のA14:F15から参照
I列 作成:〇か×を入力
J、K列 :本文

B、D、E、F、H 列はVLOOKUP関数を使用しています。使い方はこちらを見てください。
VLOOKUP関数の使い方

C、G、I 列は入力規則で、入れられる文字を制限しています。
設定方法の詳細は下記ページを見てください。
Excel入力規則の設定方法

Sheet2は下記のように取引先情報を作成します。

サンプルデータ

Enum num '1以降の数値を省略すると以降は+1される
    管理コード = 1
    宛先
    Ccメンバー
    共有
    会社名
    担当者
    件名
    内容
    作成
End Enum

Sub Outlookメール一括作成()
 
    Dim OutlookObj As Outlook.Application 'Outlookオブジェクト作成
    Set OutlookObj = CreateObject("Outlook.Application")
    
    Dim r As Long
    For r = 2 To Cells(1, 1).End(xlDown).Row '対象人数の処理を繰り返す
    
        Dim mailItemObj As Outlook.MailItem 'メールアイテムオブジェクト作成
        Set mailItemObj = OutlookObj.CreateItem(olMailItem)
        
 If Cells(r, "i") = "〇" Then '〇の場合メールを作成する
        Dim MailBody As String
        MailBody = cMailBody(r) 'メール本文作成
        
        With mailItemObj 'メールアイテム作成
.To = Cells(r, num.宛先).Value 'Toの設定
.CC = Cells(r, num.共有).Value 'CCの設定
.Subject = Cells(r, num.件名).Value '件名の設定
.body = MailBody '本文を設定
        End With
        
        mailItemObj.Display '下書き表示
    
    '次のメールを作成するため一旦破棄
    Set mailItemObj = Nothing
    
    Else: Cells(r, "i") = "×" 'の場合、次の処理を行う
    Set mailItemObj = Nothing
    
    End If
    
    Next r
 
End Sub
 
Function cMailBody(r As Long) As String
'シート上の指定行番号のメール本文の作成
   
    Dim name As String, DayOfUse As String, price As Long
    syamei = Cells(r, num.会社名).Value
    tanto = Cells(r, num.担当者).Value
    naiyou = Cells(r, num.内容).Value
    
    Dim body As String '本文
    body = Cells(2, "j").Value '初期値の設定
    body = Replace(body, "(会社名)", syamei)
    body = Replace(body, "(担当者)", tanto)
    body = Replace(body, "(内容)", naiyou)
    
    body = body & vbCLf
    cMailBody = body

End Function

送信をする取引先には、送信に〇を付けます。そうでない場合は×を選択します。
vbaの実行を行うと、メールが作成されます。

プログラムを実行するには「開発」のマクロを選択します。

「Sheet1.Outlookメール一括作成」を選択し、実行を選択します。

問題がなければメールが作成されます。

以上となります。

コメントを残す