【Outlook VBA】メール本文にExcelグラフを挿入し作成/送信する方法!

Outlook VBAでメール本文にExcelグラフを挿入した上でメールを作成/送信したいときはないでしょうか。

たとえば、日報など報告内容をExcelのグラフを張り付けてメールをしたい場合などです。

けど、そんな中で悩むことは、

・Outlook VBAでメール本文にExcelグラフを挿入しメールを作成したいが方法がわからない。
・複数のメールに対してExcelのグラフを本文に挿入したいが方法がわからない。

ですよね。

今回はそんなお悩みを解決する

・Outlook VBAでメール本文にExcelのグラフを挿入し作成/送信する方法
・Outlook VBAで複数のメール本文にExcelのグラフを挿入し作成/送信する方法

についてまとめます!

Outlook VBAでメール本文にExcelのグラフを挿入し作成/送信するイメージ

Outlook VBAでメール本文にExcelのグラフを挿入し作成/送信するイメージについて説明をします。

まず、メール本文に挿入したいExcelのグラフを用意します。

次にメールの宛先や件名など他の項目の内容について別シートにまとめます。

Outlook側へVBAを実装します。

メールを新規作成したいときにマクロを実行すると、

VBAに設定した内容に沿ってメールが作成され、本文へ別シートのグラフが挿入されます!

VBAのコードを変えると、送信もできます!

さらに、複数のメールに対してExcelのグラフを挿入し作成/送信することもできます!!

日常繰り返しているメール作成作業が自動化できると便利ですね。

それでは早速やってみましょう!

メール本文にExcelのグラフを挿入し作成/送信するVBA

メールを作成するデータを用意する

Excel側にOutlookのメールを作成するデータを用意しましょう。

サンプルのデータは以下のように1シート目へA列を件名、B列を本文、C列をTo、D列をCcにしました。

件名 本文 To Cc
業務日報(2021年12月10日) 宛先各位

本日の状況について以下の通り報告いたします。

<グラフ挿入位置>

以上/A部タカヒロ

user1@extan.jp user2@extan.jp

メール本文に挿入するグラフを用意する

メール本文に挿入するグラフを別シートに用意しましょう。

VBAの処理の流れ

次にVBAの処理の流れについて説明をします。

処理の流れは以下の通りです。

 

①Outlook VBA→ このExcelブックのデータをグラフも含めてちょうだい→ Excel VBA

②Outlook VBA ←データを送るよ ←Excel VBA

③Outlook VBA →グラフ挿入の機能ないので代わりにやって →Word VBA

④Outlook VBA ←グラフを挿入したよ ←Word VBA

⑤Outlook VBA →メール作成/送信!

 

タカヒロ
タカヒロ
実行するVBAはExcel、Outlook、Wordの3種類で、Excelのメールデータを取り出しOutlookのメールを作成した上、さらにWordエディッタの機能を利用しグラフを本文へ挿入し、送信するという処理の流れとなります。

VBAの環境設定

メール本文にExcelのグラフを挿入し作成/送信するVBAの実装方法について説明をします。

ExcelとWordのオブジェクトを使えるようにする設定を行います。

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[ツール] > [参照設定]をクリックし、
参照設定ウインドウが表示されたら、「Microsoft Excel **.* Object Library」と「Microsoft Word **.* Object Library」をチェックし「OK」をクリックします。

VBAの準備

今回のサンプルコードは以下の通りです。

Sub Outlookのメールを新規作成する_Excelデータとグラフを取得()

    'Outlook用の定義
    Dim objMail As Object
    
    'Excel用の定義
    Dim appExl As Excel.Application
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    Dim lnContactCount As Long
    
    'グラフ貼り付け用定義
    Dim objWRG As Word.Range
    Dim strPastePos As String
    Dim strGraphName As String
    Dim objChart As ChartObject
    

    'Excelのブックとワークシートのオブジェクトを設定します。
    Set appExl = CreateObject("Excel.Application")
    
    'Excelウインドウをグラフ示させます。非グラフ示としたい場合はFalseを設定してください。
    appExl.Visible = True
    
    '指定したExcelブックを開き、オブジェクトに設定します。パスは環境にあわせて変更してください。
    Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")


    'グラフ名とグラフがあるシートを指定します。
    strGraphName = "グラフ 1"
    Set objSheet = wbBook.Sheets("Sheet6")
    Set objChart = objSheet.ChartObjects(strGraphName)
    
    'グラフ貼り付けの位置となる文字列を指定します。""内の文字列は適宜変更してください。
    strPastePos = "<グラフ挿入位置>"
    
     'Excelブック1シート目をオブジェクトに設定します。
    Set wsSheet = wbBook.Worksheets(1)

    '取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
    lnContactCount = 2

    If MsgBox("Outlookメールを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
    
        '一覧の件数分繰り返します。
        For i = lnContactCount To wsSheet.Cells(1, 1).End(xlDown).Row
            
            'メールを作成します。
            Set objMail = CreateItem(olMailItem)

            With objMail
                
                .BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
                .Subject = wsSheet.Cells(i, 1) '件名を指定します。
                .Body = wsSheet.Cells(i, 2) '本文を指定します。
                .To = wsSheet.Cells(i, 3) 'Toを指定します。
                .CC = wsSheet.Cells(i, 4) 'CCを指定します。


                'Excelグラフ貼り付け処理----ここから

                '本文にグラフ貼り付けの位置を示す文字があるかチェックします。
                If InStr(.Body, strPastePos) Then


                    ' 指定されたグラフを画像としてコピーします。
                    objChart.CopyPicture Appearance:=xlScreen, Format:=xlPicture
                    
                    'メールアイテムをWordEditor経由で編集します。
                    Set objWRG = .GetInspector.WordEditor.Range(0, 0)
                    
                    '対象位置の文字列を選択します。
                    objWRG.Find.Text = strPastePos
                    objWRG.Find.Execute
                    
                    'グラフを本文へ貼り付けます。
                    objWRG.Paste
                End If
                'Excelグラフ貼り付け処理----ここまで
    
    
                '宛先が空欄であるか判定します。
                If wsSheet.Cells(i, 3) = "" Then
                    .Display  'メールをグラフ示します。
                Else
                    .Display 'メールをグラフ示します。
                    '.Send  'メールを送信します。
                End If
           End With
    Next
    
    Else
        MsgBox "処理を中断します"
    End If
    
    'Excelウインドウを閉じます。
     appExl.Quit
     
    'オブジェクトを解放します。

    Set olItem = Nothing
    Set wbBook = Nothing
    Set wsSheet = Nothing
    Set objChart = Nothing
    Set objWRG = Nothing


    MsgBox "Outlookメールの作成が完了しました!", vbInformation
    
End Sub

VBAの設定

VBAの設定をおこないましょう。

指定したExcelブックを開き、オブジェクトに設定します。パスは環境にあわせて変更してください。

Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")

グラフ名を指定します。

strGraphName = "グラフ 1"

対象グラフを選択し、左上のボックスに出ている文字をそのままコピペしてください。

グラフがあるシートを指定します。

Set objSheet = wbBook.Sheets("Sheet6")

グラフ貼り付けの位置となる文字列を指定します。””内の文字列は適宜変更してください。

strPastePos = "<グラフ挿入位置>"

本文のフォーマットを指定します。
「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。

.BodyFormat = 3

VBAの実装手順

実装手順は以下の通りです。

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。

右ペインのコードエリアへ、VBAコードを貼り付けて保存します。

こちらで完了です。

VBAの実行

VBAを実行してみましょう。

まずはメールが作成されるか確認をします。

「”Outlookメールの作成が完了しました!”」と表示されたら完了です。

作成されたメールを確認してみましょう。

はい、件名、宛先、本文に指定した値に加えグラフが挿入されていますね!

つづいて送信をしてみましょう。

.Send

のコメントアウトを外し、Sendメソッドを有効化します。

実行してみましょう。

はい、送信されていますね!

VBAの説明

新規にアイテムを作成し、オブジェクトにセットします。

Set objMail = CreateItem(olMailItem)

Excelアプリケーションのオブジェクトを設定します。

Set appExl = CreateObject("Excel.Application")

Excelウインドウを表示させます。非表示としたい場合はFalseを設定してください。

appExl.Visible = True

指定したExcelブックを開き、オブジェクトに設定します。

Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")

タカヒロ
タカヒロ
パスは環境にあわせて変更してください。

Excelブック1シート目をオブジェクトに設定します。

Set wsSheet = wbBook.Worksheets(1)

取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。

lnContactCount = 2

件名を指定します。

.Subject = wsSheet.Cells(i, 1)

本文を指定します。

.Body = wsSheet.Cells(i, 2)

Toを指定します。

.To = wsSheet.Cells(i, 3)

CCを指定します。

.CC = wsSheet.Cells(i, 4)

本文にグラフを貼り付けの位置を示す文字があるかチェックします。

If InStr(.Body, strPastePos) Then

指定されたグラフを画像としてコピーします。

objChart.CopyPicture Appearance:=xlScreen, Format:=xlPicture

メールアイテムをWordEditor経由で編集します。

Set objWRG = .GetInspector.WordEditor.Range(0, 0)

対象位置の文字列を選択します。

objWRG.Find.Text = strPastePos
objWRG.Find.Execute

グラフを本文へ貼り付けます。

objWRG.Paste

メールを表示します。

.Display

メールを送信します。

'.Send

複数のメール本文にExcelのグラフを挿入し作成/送信するVBA

次は複数のメール本文にExcelのグラフを挿入し作成/送信するVBAについて説明をします。

タカヒロ
タカヒロ
すでに機能は備わっているのでコードの編集は不要です。

複数メールを作成するデータを用意する

Excel側にOutlookのメールを作成するデータを用意しましょう。

以下のように1シート目へ1行増やして2行にしA列を件名、B列を本文、C列をTo、D列をCcに値を入力します。

VBAの実行

VBAを実行してみましょう。

「”Outlookメールの作成が完了しました!”」と表示されたら完了です。

作成されたメールを確認してみましょう。

複数のメールが作成され、グラフも挿入されていますね!

Sendメソッドを有効化しメールを送信してみましょう。

はい、送信されていますね!

さいごに

いかがでしょうか。

今回は、

・Outlook VBAでメール本文にExcelのグラフを挿入し作成/送信する方法
・Outlook VBAで複数のメール本文にExcelのグラフを挿入し作成/送信する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

コメントを残す

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