Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

 

通常、一度に 5 ~ 10 人にメールを送信するのは問題ありません。わずかに異なる名前、日付、オファー、リマインダー、またはフォローアップ メモを含む 30、50、または 500 人に電子メールを送信すると、プロセスが遅くなり、エラーが発生しやすくなります。そこで Excel と VBA が強力な組み合わせになります。適切に構造化されたワークシートと VBA コードを使用すると、スプレッドシートの行を、カスタムの件名、本文、およびオプションの添付ファイルを備えたパーソナライズされた Outlook メールに変換できます。

このチュートリアルでは、VBA を使用して Excel 電子メール ジェネレーターを構築し、スプレッドシートの行からパーソナライズされた Outlook メッセージを作成する方法を示します。目標は、各行に保存されているデータに基づいて、パーソナライズされた Outlook メールを自動化することです。

ステップ 1:Excel スプレッドシートの設定

VBA が簡単に読み取れるようにデータを構造化します。 「Data」という名前の単純なワークシートに次の列があり、行 2 から始まり行 1 がヘッダーに使用されると仮定します。

次のようなワークシートを作成します。

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

これらの列はユースケースに合わせて調整できますが、見出しは明確かつ一貫したものにしてください。

ステップ 2:メール テンプレートをデザインする

VBA コードを記述する前に、電子メールの外観を決定してください。

簡単な注文確認テンプレートを次に示します。

 

件名テンプレート:

Your Order Confirmation - #{OrderID}

本文テンプレート:

<p>Dear {Name},</p>
<p>Thank you for your recent purchase!</p>
<p>We are happy to confirm your order details:</p>
<ul>
<li><strong>Order ID:</strong> {OrderID}</li>
<li><strong>Total Amount:</strong> {Amount}</li>
</ul>
<p>Your order is now being processed and should ship within 2–3 business days.</p>
<p>If you have any questions, feel free to reply to this email.</p>
<p>Best regards,<br>
Shamima<br>
Customer Support Team<br>
Your Company Name<br>
Phone: +880-XXX-XXXXXXX</p>
  • 中括弧内のプレースホルダーは、Excel の各行から取得された値です。
  • VBA では、これらのプレースホルダーを実際のセル値に置き換えます。

テンプレートが複雑な場合は、別のワークシートに保存するか、ファイルから読み取ることができます。簡単にするために、セルに保存します。

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

ステップ 3:Outlook リファレンスを理解する

コードを記述する前に、Excel が Outlook のオブジェクト ライブラリにどのように接続できるかを理解するのに役立ちます。

  • VBA エディタを開きます。
  • 開発者に移動します。 タブ>> Visual Basic を選択します。 またはAlt + F11 を押します。 .
  • ツールに移動します。 メニュー>> 参考を選択します .
  • 下にスクロールして、「Microsoft Outlook XX.X オブジェクト ライブラリ」 をチェックします。 早期バインディングと Outlook 固有のオブジェクト タイプを使用する場合。
  • [OK] をクリックします。 .

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

この参照により、VBA はメール アイテム、添付ファイル、フォルダーを含む Outlook の完全なオブジェクト モデルにアクセスできるようになります。ただし、このチュートリアルのコード例では遅延バインディングを使用しています。 CreateObject(“Outlook.Application”) を使用 したがって、ここに示すコードでは Outlook 参照の設定はオプションです。

セキュリティ上の注意: 電子メールを自動化すると、Outlook のセキュリティ プロンプトが表示される場合があります。多くの環境では、この動作は Outlook のセキュリティ設定と組織のポリシーによって異なります。実際の受信者に対してマクロを使用する前に、必ず安全な環境でマクロをテストしてください。

ステップ 4:パーソナライズされた Outlook メールを生成するための VBA コードを作成する

  • 開発者に移動します。 タブ>> Visual Basic を選択します。 .
  • 挿入に移動します メニュー>> モジュールを選択します .
  • VBA コードを新しいモジュールに貼り付けます。
  • このスクリプトは行をループし、Outlook を通じてメールを作成します。

VBA コード:

Sub SendPersonalizedEmails()
 Dim OutlookApp As Object
 Dim OutlookMail As Object
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long
 Dim subject As String
 Dim body As String
 Dim recipient As String
 Dim customerName As String
 Dim orderID As String
 Dim amount As String
 
 On Error GoTo ErrorHandler
 Set OutlookApp = CreateObject("Outlook.Application")
 Set ws = ThisWorkbook.Sheets("Data") ' Change sheet name if different
 
 ' Find last row (based on column A - Email)
 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
 
 For i = 2 To lastRow
 recipient = Trim(ws.Cells(i, 1).Value) ' Email
 customerName = Trim(ws.Cells(i, 2).Value) ' Name
 subject = Trim(ws.Cells(i, 3).Value) ' Subject
 orderID = Trim(ws.Cells(i, 4).Value) ' OrderID
 amount = Trim(ws.Cells(i, 5).Value) ' Amount
 
 ' Skip row if no valid email
 If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
 
 ' Personalize subject
 subject = Replace(subject, "#{OrderID}", orderID)
 
 ' Build body directly from cell values
 body = "Dear " & customerName & "," & vbCrLf & vbCrLf & _
 "Thank you for your order." & vbCrLf & vbCrLf & _
 "Here are your order details:" & vbCrLf & _
 "Order ID: " & orderID & vbCrLf & _
 "Amount: " & amount & vbCrLf & vbCrLf & _
 "We appreciate your business and will contact you if any further action is needed." & vbCrLf & vbCrLf & _
 "Best regards," & vbCrLf & _
 "Customer Support Team"
 
 ' Create & send email
 Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
 
 With OutlookMail
 .To = recipient
 .Subject = subject
 .Body = body
 
 .Display ' Shows the email so you can review it manually
 '.Send ' Uncomment when you're ready to send automatically
 End With
 
 Set OutlookMail = Nothing
 
NextRow:
 Next i
 
 MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation
 
CleanUp:
 Set OutlookMail = Nothing
 Set OutlookApp = Nothing
 Exit Sub
ErrorHandler:
 MsgBox "An error occurred: " & Err.Description, vbCritical
 Resume CleanUp
End Sub

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

この VBA コードは Outlook に接続し、ワークシート内の使用されている各行をループします。名前、電子メール、件名、注文 ID、金額などの値を読み取ります。次に、それらの値を直接使用して、パーソナライズされた件名と本文を構築します。最後に、電子メールを表示したり、少し変更を加えて下書きとして保存したり、送信したりできます。 .Display から始まるほとんどのビジネス ワークフローの場合 メッセージを送信する前に各メッセージを確認できるため、これが最適です。

ステップ 5:メッセージを再利用可能なテンプレート システムに変える

1 つの電子メール本文をハードコーディングすることは機能しますが、より柔軟な Excel 電子メール ジェネレーターはワークシート内にテンプレートを保存します。電子メール テンプレートのセルを追加し、基本テンプレートをそのセルにテキストとして貼り付けます。動的な置換には中括弧内のプレースホルダーを使用します。

  • コードを別のモジュールに挿入します。 .

VBA コード:

Sub SendPersonalizedEmails_Template()
 Dim OutlookApp As Object
 Dim OutlookMail As Object
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long
 Dim emailTemplate As String
 Dim subject As String
 Dim body As String
 Dim recipient As String
 Dim customerName As String
 Dim orderID As String
 Dim amount As String
 
 On Error GoTo ErrorHandler
 Set OutlookApp = CreateObject("Outlook.Application")
 Set ws = ThisWorkbook.Sheets("Data") ' Change sheet name if different
 
 ' Find last row (based on column A - Email)
 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
 
 ' Get template from cell F2 (adjust cell reference if you placed it elsewhere)
 emailTemplate = ws.Range("F2").Value
 
 If emailTemplate = "" Then
 MsgBox "Email template is empty. Please add it to cell F2.", vbExclamation
 Exit Sub
 End If
 
 For i = 2 To lastRow
 recipient = Trim(ws.Cells(i, 1).Value)
 customerName = Trim(ws.Cells(i, 2).Value)
 subject = Trim(ws.Cells(i, 3).Value)
 orderID = Trim(ws.Cells(i, 4).Value)
 amount = Trim(ws.Cells(i, 5).Value)
 
 ' Skip row if no valid email
 If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
 
 ' Personalize subject
 subject = Replace(subject, "#{OrderID}", orderID)
 
 ' Personalize body
 body = emailTemplate
 body = Replace(body, "{Name}", customerName)
 body = Replace(body, "{OrderID}", orderID)
 body = Replace(body, "{Amount}", amount)
 ' Add more Replace() lines for other placeholders if needed
 
 ' Create & send email
 Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
 
 With OutlookMail
 .To = recipient
 .Subject = subject
 .HTMLBody = body
 '.CC = "[email protected]"
 '.Attachments.Add "C:\Invoices\" & orderID & ".pdf" ' Optional
 
 .Display ' Shows the email so you can review it manually
 '.Send ' Uncomment when you're ready to send automatically
 End With
 
 Set OutlookMail = Nothing
 
NextRow:
 Next i
 
 MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation
 
CleanUp:
 Set OutlookMail = Nothing
 Set OutlookApp = Nothing
 Exit Sub
ErrorHandler:
 MsgBox "An error occurred: " & Err.Description, vbCritical
 Resume CleanUp
End Sub
  • [実行] をクリックします。 アイコンをクリックして、テンプレート化されたメールをプレビューします。

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

キーコードの説明:

  • Outlook の設定: CreateObject(“Outlook.Application”) 遅延バインディングを使用して Outlook インスタンスを作成します。これは、Office のバージョン間でより柔軟です。
  • 行をループする: マクロは最後の行を動的に検索し、行 2 から繰り返してヘッダーをスキップします。
  • テンプレートのカスタマイズ: 交換 関数は {Name} などのプレースホルダーを交換します 行固有のデータを使用します。これは、VBA 駆動のテンプレート システムの中核です。さらに置換を追加します 追加フィールドの行
  • メールの作成: .HTMLBody を使用します。 太字のテキストやリンクなどのリッチな書式設定に使用します。テンプレートがプレーン テキストの場合は、.Body を使用します。
  • 送信: .送信 .Display はメッセージを自動的に送信します。 レビュー用に開きます。これはテスト中に役立ちます。
  • エラー処理: 例には、基本的なエラー処理と、電子メール アドレスが欠落している行のスキップが含まれています。本番環境では、ロギングとより詳細な検証を追加することができます。

ステップ 6:マクロのテストと実行

  • ワークブックを.xlsmとして保存します。 ファイル。
  • サンプル データを入力します。不要なメッセージが送信されないように、テストには自分のメール アドレスを使用してください。
  • マクロをボタンに割り当てるか、開発者に移動します。 タブ>> マクロを選択します .
  • [個人用メールの送信] を選択します。 または SendPersonalizedEmails_Template>> [実行] をクリックします。 .

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

  • Outlook によって許可を求めるメッセージが表示される場合があります。許可されている場合は、テスト設定を確認した後にのみアクセスを許可してください。
  • .Display を使用したかどうかに応じて、表示されたメッセージまたは Outlook の送信済みアイテム フォルダーを確認します。 または .送信 .

Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する

テストのヒント: .ディスプレイから始めます .送信 の代わりに そのため、メールを送信せずにプレビューできます。

高度なテンプレートのカスタマイズ

  • 複数のプレースホルダ: 期日など、さらに列がある場合は、dueDate =ws.Cells(i, 6).Value のような変数を追加します。 body =Replace(body, “{DueDate}”, dueDate) を使用します。 .
  • 条件付きコンテンツ: 場合を使用します 動的セクションのステートメント:
If customField = "VIP" Then
 body = body & "<p>Exclusive offer for you!</p>"
End If
  • ファイルからのテンプレート: テンプレートをセルに保存する代わりに、テキスト ファイルまたは HTML ファイルから読み取ります。
Dim filePath As String
filePath = "C:\Template.html"
Open filePath For Input As #1
emailTemplate = Input$(LOF(1), 1)
Close #1
  • HTML の機能強化: Excel 電子メール ジェネレーター:VBA を使用してパーソナライズされた Outlook メールを自動化する などの画像やリンクをテンプレートに埋め込むことができます。 またはここをクリック {Link} を置き換えます。 動的に。

一般的な問題のトラブルシューティング

  • Outlook が見つかりません: Outlook がシステムにインストールされていることを確認してください。
  • セキュリティ プロンプト: Outlook ではプログラムによるアクセスを制限できます。これは、Excel のマクロ設定だけでなく、Outlook と組織のセキュリティ設定によって制御されます。
  • 送信時のエラー: 次のようなエラー処理を追加します。
On Error GoTo ErrorHandler
' ... code ...
ErrorHandler:
 MsgBox "Error: " & Err.Description
  • パフォーマンス: メールのリストが大きい場合は、メッセージ間に短い遅延を追加できます。
Application.Wait Now + TimeValue("00:00:01")
  • HTML レンダリングの問題: テンプレートを慎重にテストし、プレースホルダーが HTML 構造に干渉しないことを確認してください。

この設定は、大量のパーソナライズされたメッセージングに適しています。添付ファイルを追加したり、送信されたメールを Excel に記録したり、さまざまなシナリオに合わせて複数のテンプレートを保存したりすることで、機能をさらに拡張できます。

結論

次の手順に従って、VBA を使用してスプレッドシートの行からパーソナライズされた Outlook メッセージを作成する Excel 電子メール ジェネレーターを構築できます。これは、VBA がワークシートを軽量の電子メール自動化ツールに変える方法を示す実践的な例です。繰り返しの Outlook メッセージを手動で作成する代わりに、再利用可能なテンプレートを作成し、Excel に各行から個人用の詳細を入力させることができます。これにより、プロセスがより速く、より一貫性があり、拡張が容易になります。基本バージョンを構築したら、HTML 形式、複数のテンプレート、条件付きロジック、添付ファイルの処理、ステータス追跡を使用して拡張し、完全にパーソナライズされたメール システムを作成できます。

ソリューション付きの高度な Excel 演習を無料で入手しましょう!
  1. Excelで温度計チャートを作成する方法

    温度計チャート 温度計のように見えます。温度計チャートは、 Microsoft Excelでデータを表すための優れた方法です。 実際の値と目標値があり、販売実績の分析に優れている場合。 Excelには温度計チャートがありますか? 温度計チャートは、ExcelまたはOfficeプログラムのデフォルトのチャートではありません。ゼロから作成する必要があります。このチュートリアルでは、MicrosoftExcelで温度計チャートを作成する方法を説明します。 Excelで体温計チャートを作成する方法 以下の手順に従って、Excelで温度計チャートを作成します。 Excelを起動します。 Exce

  2. OfficeOnline拡張機能を使用してEdgeとChromeでOfficeドキュメントを作成する

    Microsoftは、ユーザーがOfficeドキュメントをオンラインで作成および編集できるようにするChromeブラウザの拡張機能としてOfficeOnlineを追加しました。同じ拡張機能がMicrosoftEdgeChromiumで利用できるようになり、追加して利用できるようになりました。このガイドでは、OfficeOnline拡張機能を追加する方法を見ていきます。 エッジの場合 およびChrome Webブラウザとそれを使用してOfficeドキュメントをオンラインで作成する方法 。 EdgeとChromeでOfficeドキュメントを作成する MicrosoftのOfficeOnlineを