ExcelからOutlookへ自動でメールを送信する4つの方法【VBAマクロ・HYPERLINK関数】
顧客や上司にメールを頻繁に送る業務では、送信履歴の管理が難しくなりがちです。そんなとき、Excelを活用すれば作業を大幅に効率化できます。「ExcelからOutlookへ自動的にメールを送信する」手法は、時間短縮に非常に有効なアプローチとして知られています。Excel VBAマクロやHYPERLINK関数を使えば、Excelに入力されたデータをもとに、メールの自動送信や下書きの作成が可能です。
ここでは、Excelに「従業員の再構成後給与データ」がある状態を想定し、Outlookを使って自動メールを送信する方法を解説します。

本記事では、VBAマクロの複数のバリエーションとHYPERLINK関数を使って、ExcelからOutlookへ自動メールを送信するさまざまな方法をご紹介します。
Excelワークブックのダウンロード
⧭ Microsoft Visual Basicの起動とモジュールへのコード挿入
各種方法を試す前に、まずはExcelのMicrosoft Visual Basic(VBE)を開き、モジュールを挿入する基本操作を押さえておきましょう。
🔄 Microsoft Visual Basicの起動方法:主に以下の3つの方法があります。
1. キーボードショートカットを使う:ALT + F11キーを同時に押すと、Microsoft Visual Basicのウィンドウが開きます。
2. 「開発」タブを使う:Excelワークシートで「開発」タブ > 「Visual Basic」を選択すると、Microsoft Visual Basicウィンドウが表示されます。

3. シートタブを使う:任意のワークシートタブ上で右クリックし、コンテキストメニューから「コードの表示」を選択します。

🔄 Microsoft Visual Basicへのモジュール挿入方法:モジュールの挿入には2つの方法があります。
1. シートのオプションから挿入:Visual Basicウィンドウを開いたら、プロジェクト内のワークシートを選択して右クリック > コンテキストメニューから「挿入」 > 「標準モジュール」を選びます。

2. ツールバーから挿入:ツールバーの「挿入」メニューから「標準モジュール」を選択することでも挿入できます。

ExcelからOutlookへ自動メールを送信する4つの簡単な方法
方法1:VBAマクロで選択した宛先に自動メールを送信する
この方法では、マクロ実行用のボタン(図形)を作成し、クリックひとつで選択した宛先にメールを送れるようにします。
ステップ1:「挿入」タブ > 「図形」をクリックし、好きな図形(例:角丸四角形)を選択します。

ステップ2:下の画像のように、プラスアイコンをドラッグして、ボタンを配置したい場所に図形を挿入します。

ステップ3:好みの塗りつぶし色と枠線の色を設定し、図形を右クリックして「テキストの編集」を選んで文字を入力します。

ステップ4:前述の手順でMicrosoft Visual Basicを開き、モジュールを挿入します。次のマクロコードを貼り付けてください。
Sub ExcelToOutlookSR()
Dim mApp As Object
Dim mMail As Object
Dim SendToMail As String
Dim MailSubject As String
Dim mMailBody As String
For Each r In Selection
SendToMail = Range("C" & r.Row)
MailSubject = Range("F" & r.Row)
mMailBody = Range("G" & r.Row)
Set mApp = CreateObject("Outlook.Application")
Set mMail = mApp.CreateItem(0)
With mMail
.To = SendToMail
.Subject = MailSubject
.Body = mMailBody
.Display ' .Send も使用可能
End With
Next r
End Sub

➤ コードの解説:
1 – 変数をObject型およびString型として宣言し、マクロ処理を開始します。
2 – 選択範囲の各行に対してVBAのFORループを実行し、行のデータからメールの宛先(To)、件名(Subject)、本文(Body)を取得します。
3 – 各変数に値を代入します。
4 – VBAのWithステートメントを使い、宛先や件名などのOutlook項目を設定します。ここではDisplayコマンドのみを実行しているため、メール下書き画面が表示されるだけです。もしSendコマンドをDisplayの代わり(または後)に使えば、作成したメールが選択した宛先に自動送信されます。
5 – FORループを終了します。
ステップ5:ワークシートに戻り、図形を右クリックして、コンテキストメニューから「マクロの登録」を選択します。

ステップ6:「マクロ名」欄で該当のマクロ(例:ExcelToOutlookSR)を選択し、「マクロの保存先」を「作業中のブック」にしてOKをクリックします。

ステップ7:ワークシート上で、対象となる従業員を1人または複数選択し、作成した図形ボタンをクリックします。

ステップ8:ExcelがOutlookを起動し、選択した従業員宛てにメールを作成または送信します。2人の従業員を選択した場合、Outlookは送信準備のできた2通のメール下書きを生成します。

このマクロはDisplayコマンドのみを実行するため、Outlookはメールを送信せず下書きを表示するだけです。セルの内容をもとにExcelからOutlookへ自動送信したい場合は、Sendコマンドを使用してください。
関連記事:Excelマクロでメールを自動送信する方法(3つの実例)
方法2:特定のセルの値に応じてExcelからOutlookへ自動送信する
「目標達成後に自動でメールを送りたい」というケースもあるでしょう。そのような条件付きの自動送信も、マクロコードなら簡単に実現できます。
たとえば、下図のような「四半期売上データ」があり、目標を達成した場合(例:売上が2000超)、指定したメールアドレス宛てにOutlook経由で自動的にメールを送信する仕組みです。

ステップ1:任意のモジュールに次のマクロコードを入力します。
Option Explicit
Dim Rng As Range
Sub Worksheet_Change(ByVal mRng As Range)
On Error Resume Next
If mRng.Cells.Count > 1 Then Exit Sub
Set Rng = Intersect(Range("F17"), mRng)
If Rng Is Nothing Then Exit Sub
If IsNumeric(mRng.Value) And Target.Value > 2000 Then
Call ExcelToOutlook
End If
End Sub
Sub ExcelToOutlook()
Dim mApp As Object
Dim mMail As Object
Dim mMailBody As String
Set mApp = CreateObject("Outlook.Application")
Set mMail = mApp.CreateItem(0)
mMailBody = "Greetings Sir" & vbNewLine & vbNewLine & _
"Our outlet has quarterly Sales more than the target." & vbNewLine & _
"It's a confirmation mail." & vbNewLine & vbNewLine & _
"Regards" & vbNewLine & _
"Outlet Team"
On Error Resume Next
With mMail
.To = "admin@wsxdn.com"
.CC = ""
.BCC = ""
.Subject = "Notification on Achieving Sales Target"
.Body = mMailBody
.Display 'または .Send を使用
End With
On Error GoTo 0
Set mMail = Nothing
Set mApp = Nothing
End Sub

➤ コードの解説:
1 – 特定のセル(例:F17)を監視対象として指定し、VBAのIFステートメントで条件判定を行います。条件がTrueになると、別のマクロを呼び出して実行します。
2 – 変数の型を宣言し、Outlookの各項目に割り当てます。
3 – VBAのWithステートメントでメール項目に変数を設定します。確認なしで直接送信したい場合は、Displayの代わりにSendコマンドを使用してください。宛先のメールアドレスはマクロ内に直接記述されています。宛先アドレスを自動的に取得したい場合は、別の方法を組み合わせてください。
4 – 使用済みの変数をクリアします。
ステップ2:F5キーでマクロを実行します。すると、ExcelがOutlookを呼び出し、下図のように自動生成されたメール下書きが表示されます。画面上で「送信」をクリックしてもよいですし、マクロ内のSendコマンドで自動送信することも可能です。

関連記事:セルの内容に基づいてExcelからメールを自動送信する方法(2つの方法)
あわせて読みたい記事
- 共有Excelファイルで誰が編集しているか確認する方法(クイックステップ付き)
- Excelでブックの共有を有効にする方法
- 複数ユーザーでExcelファイルを共有する方法
- 添付ファイル付きでExcelからメールを送るマクロの適用方法
方法3:VBAマクロでアクティブなワークシートを添付してOutlookから送信する
場合によっては、アクティブなシート全体を指定のメールアドレスに送信したいこともあります。その際は、マクロ内から呼び出せるVBAカスタム関数を活用しましょう。
ステップ1:次のマクロをモジュールに挿入します。
Function ExcelOutlook(mTo, mSub As String, Optional mCC As String, Optional mBd As String) As Boolean
On Error Resume Next
Dim mApp As Object
Dim rItem As Object
Set mApp = CreateObject("Outlook.Application")
Set rItem = mApp.CreateItem(0)
With rItem
.To = mTo
.CC = ""
.Subject = mSub
.Body = mBd
.Attachments.Add ActiveWorkbook.FullName
.Display 'または .Send を使用
End With
Set rItem = Nothing
Set mApp = Nothing
End Function
Sub OutlookMail()
Dim mTo As String
Dim mSub As String
Dim mBd As String
mTo = "admin@wsxdn.com"
mSub = "Quarterly Sales Data"
mBd = "Greetings Sir" & vbNewLine & vbNewLine & _
"Kindly find Outlet's Quarterly Sales data attached with this mail." & vbNewLine & _
"It's a notification mail." & vbNewLine & vbNewLine & _
"Regards" & vbNewLine & _
"Outlet Team"
If ExcelOutlook(mTo, mSub, , mBd) = True Then
MsgBox "Successfully created the Mail draft or Sent"
End If
End Sub

➤ コードの解説:
1 – 変数を宣言して設定します。
2 – VBAのWithステートメントで各コマンドを割り当てます。メールを確認してから送る場合はDisplay、直接送信する場合はSendを使用します。
3 – 設定済みの変数をクリアします。
4 – Withステートメントのコマンドに本文テキストなどを割り当てます。
5 – VBAカスタム関数を実行します。
ステップ2:F5キーでマクロを実行すると、すぐにExcelがOutlookを起動し、下図のような確認用のメール下書きが表示されます。内容を確認したら、そのまま送信できます。

関連記事:Excelを使ってOutlookから一括メールを送信する方法(3つの方法)
方法4:HYPERLINK関数を使ってExcelからOutlookへ自動メールを送信する
HYPERLINK関数を使うと、Excelのセル内にクリック可能なリンクを生成でき、そのリンクからOutlookを起動してメールを送信できます。マクロ不要なので、VBAに不慣れな方にもおすすめの方法です。
ステップ1:セルH5に次の数式を入力します。
=HYPERLINK("MailTo:"&C5&"?Subject="&F5&"&cc="&$D$2&"&body="&G5,"Click Here")このHYPERLINK関数では、「MailTo:」&C5&「?Subject=」&F5&「&cc=」&$D$2&「&body=」&G5がリンク先(link_location)、「Click Here」が表示名(friendly_name)として機能します。

ステップ2:Enterキーを押してリンクを確定させたら、そのリンクをクリックします。

ステップ3:ExcelからOutlookが起動し、Excelのデータが宛先・件名・CC・本文などすべての項目に自動反映されているのがわかります。あとは「送信」をクリックするだけです。

ステップ4:フィルハンドルをドラッグして、他のセルにも同じ数式を適用します。

関連記事:Excelで条件を満たしたときにメールを自動送信する方法
まとめ
VBAマクロの各バリエーションとHYPERLINK関数を活用すれば、ExcelからOutlookへのメール自動送信を効率的に実現できます。本記事で紹介した方法の中から、目的に合ったものを見つけていただければ幸いです。ご不明点や追加情報などがあれば、ぜひコメントでお知らせください。
関連記事
- VBAを使ってExcelワークシートからリマインダーメールを自動送信する方法
- 編集可能なExcelスプレッドシートをメールで送る方法(3つのクイック手法)
- 本文付きでExcelからメールを送るマクロ(3つの便利なケース)
- 日付に基づいてExcelからメールを自動送信する方法
- マクロで本文付きのメールをExcelから送信する方法(簡単な手順付き)
-
メールで送る前に!Excelファイルを圧縮する13の簡単な方法
Excelのワークシートファイルは、時に非常に大きなサイズになることがあります。そうしたファイルを扱う際は、編集のたびに更新や起動に時間がかかるため忍耐が必要ですし、何よりメールへの添付がとても困難です。Excelファイルのサイズを減らす方法はいくつかありますが、本記事では、メール送信用にExcelファイルを圧縮するためのおすすめの方法をご紹介します。 メール送信用にExcelファイルを圧縮する13の方法 1. 不要なワークシートを削除して圧縮する 5つのワークシートを含むExcelブックがあるとします。不要なワークシートを削除するだけで、メール送信用にファイルを簡単に軽量化できます。ここでは
-
Excelでデータモデルからデータを取得する2つの簡単な方法
Excelのデータモデルからデータを取り出す便利なテクニックをお探しの方は、ぜひこの記事をご覧ください。データモデルからデータを取得する方法は実にさまざまありますが、本記事では代表的な2つの方法を詳しく解説します。手順を一つずつ丁寧に追って説明しますので、最後まで読んでマスターしましょう。 データモデルとは? データモデルはデータ分析において欠かせない機能です。データモデルを使うと、テーブルなどのデータをExcelのメモリ上に読み込むことができます。さらに、共通の列(キー列)を指定することで、複数のテーブル同士を関連付けることも可能です。データモデルにおける「モデル」という言葉は、各テーブル間