ExcelVBA~Excelでメール送信補足~

1. 概要

Excel VBAを使用して、メール情報を取得し、Outlookを起動してメールを送信する際には、主に2つのアプローチがあります。

  1. シートからメール情報を取得してからOutlookを起動する方法
  2. Outlookを起動してからシートの情報を取得する方法

それぞれの方法には異なる特長があり、プロジェクトの要件に応じて適切な方法を選択することが重要です。本記事では、両者の違いと推奨される方法について解説します。


2. 必要な準備

  1. テンプレートの準備
    • シート名「メール送信」とし、以下の情報を入力してください。
      ここでは前回記事のフォーマットを使用します。参考:ExcelVBA~Excelで簡単メール送信~ | 会う出版社
  2. Outlookの設定
    • Outlookがインストールされ、正しく設定されていることを確認してください。

3. 実行方法

方法1: シートからメール情報を取得してからOutlookを起動する

この方法では、まずExcelのシートから必要なメール情報(宛先、件名、本文など)を取得してから、Outlookを起動し、メールを作成します。

メリット:

  • データ取得後にエラー処理ができ、無駄なOutlookの起動を防げる。
  • メモリ使用量を最小限に抑えられる。
  • データ検証が容易になり、処理の信頼性が向上。

コード例:

Sub データ取得後にアウトルックを起動()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

' シートから情報を取得
Dim recipientTo As String, subjectLine As String, emailBody As String
recipientTo = ws.Range("C2").Value
subjectLine = ws.Range("A2").Value
emailBody = ws.Range("B2").Value

' Outlookアプリケーションの起動(型指定なし)
Dim outlookObj As Object
Set outlookObj = CreateObject("Outlook.Application")

' メール作成(型指定なし)
Dim mymail As Object
Set mymail = outlookObj.CreateItem(0)

' メール情報を設定
mymail.To = recipientTo
mymail.Subject = subjectLine
mymail.Body = emailBody
mymail.Display
End Sub

方法2: Outlookを起動してからシートの情報を取得する

この方法では、まずOutlookを起動し、メールオブジェクトを作成してからExcelのシートからデータを取得します。

メリット:

  • Outlookが先に起動するため、処理の即応性が向上。
  • ユーザーがメール作成のプロセスが開始されたことをすぐに認識できる。

コード例:

Sub Outlookを起動してからデータを取得()
' Outlookアプリケーションの起動(型指定なし)
Dim outlookObj As Object
Set outlookObj = CreateObject("Outlook.Application")

' シート設定
Dim ws As Worksheet
Set ws = Worksheets("sheet1")

' メール情報を取得
Dim recipientTo As String, subjectLine As String, emailBody As String
recipientTo = ws.Range("C2").Value
subjectLine = ws.Range("A2").Value
emailBody = ws.Range("B2").Value

' メール作成(型指定なし)
Dim mymail As Object
Set mymail = outlookObj.CreateItem(0)

mymail.To = recipientTo
mymail.Subject = subjectLine
mymail.Body = emailBody
mymail.Display
End Sub

4. 出力結果

  1. 方法1: シートからメール情報を取得後にOutlook起動
    • データ取得後にメールを表示。エラー時にはOutlookを起動しないため、不要なリソース消費がない。
  2. 方法2: Outlookを先に起動してからシート情報を取得
    • Outlookがすぐに起動し、ユーザーに処理開始が視覚的に確認できる。ただし、データエラーがある場合、不要なインスタンスが起動してしまう。

5. 注意事項

  1. データの整合性を確認する
    • メール情報(宛先や件名など)が正しく入力されているか、マクロを実行する前に確認してください。
  2. Outlookの起動に注意
    • Outlookを先に起動すると、シートのデータに不備があった場合に無駄な起動が発生し、リソースを消費する可能性があります。
  3. 適切なアプローチの選択
    • シートのデータ検証が重要な場合は 「シートから情報取得→Outlook起動」 を推奨。
    • 即時にメール作成が必要な場合は 「Outlook起動→シート情報取得」 を選択。

結論(推奨方法)

一般的に、「シートからメール情報を取得してからOutlookを起動する」 方法が推奨されます。

理由は以下の三つです。

  • データが正しいかどうかを確認した後でOutlookを起動できるため、無駄な起動を防止できる。
  • メモリ使用量を削減し、パフォーマンスが向上する。
  • 必要なエラー処理が容易に行える。

コードの順番が違うだけで使用するリソースの量が異なります。コードが少し書けるようになったら、細かいところも意識してみましょう!

コメント