当サイトの記事にはプロモーションが含まれています。

Outlook VBAでメールをExcelに自動出力する方法

パソコンパソコン・スマホ教室
スポンサーリンク

皆さん、こんにちは!

今日は、Outlookで受信したメールを自動的にExcelに記録する方法をご紹介します。これをマスターすれば、日々の業務効率が格段にアップしますよ!

スポンサーリンク

Outlook VBAとは?

まず、Outlook VBAについて簡単に説明します。VBAとは、Visual Basic for Applicationsの略で、Microsoft Office製品に組み込まれているプログラミング言語です。これを使うことで、Outlookの操作を自動化し、Excelなど他のOffice製品と連携させることができます。

開発環境の準備

では、早速始めましょう。まずは、OutlookでVBAを使うための準備を行います。

1. 開発タブの表示

Outlookを起動し、以下の手順で開発タブを表示させます。

  1. 「ファイル」タブをクリック
  2. 「オプション」を選択
  3. 「リボンのユーザー設定」をクリック
  4. 右側の「開発」のチェックボックスにチェックを入れる

これで、リボンに「開発」タブが表示されます。

2. Visual Basic Editor(VBE)の起動

次に、VBEを起動します。

  1. 「開発」タブをクリック
  2. 左端の「Visual Basic」をクリック

これで、VBAの編集画面が開きます。

3. 参照設定の追加

OutlookからExcelを操作するためには、参照設定を行う必要があります。

  1. VBEのメニューから「ツール」をクリック
  2. 「参照設定」を選択
  3. 表示された一覧から「Microsoft Excel xx.x Object Library」にチェックを入れる
  4. 「OK」をクリック

これで、Outlook VBAからExcelを操作する準備が整いました。

メールをExcelに自動記録するVBAコード

それでは、実際にコードを書いていきましょう。以下のコードは、Outlookでメールを受信した際に、その内容を指定したExcelファイルに自動で追記するものです。

vbaコード
' Sleep関数を利用するためのAPI宣言
#If Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

' メール受信時に実行されるイベントプロシージャ
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
' Outlookのネームスペースを取得
Dim myNameSpace As NameSpace
Set myNameSpace = GetNamespace("MAPI")

' 受信したメールアイテムを取得
Dim objMail As MailItem
Set objMail = myNameSpace.GetItemFromID(EntryIDCollection)

' Excel関連のオブジェクトを宣言
Dim objExcel As Object
Dim wb As Object
Dim ws As Object
Dim strFile As String
Dim i As Long

' 保存先のExcelファイルのパスを指定
strFile = "C:Usersユーザー名Documentsメール記録.xlsx"

' Excelアプリケーションを起動
Set objExcel = CreateObject("Excel.Application")
' 非表示で起動
objExcel.Visible = False
' 指定したExcelファイルを開く
Set wb = objExcel.Workbooks.Open(strFile)
' 操作するシートを指定
Set ws = wb.Sheets("Sheet1")

' 最終行を取得し、次の入力行を決定
i = ws.Cells(ws.Rows.Count, 1).End(-4162).Row + 1

' メールの情報をExcelに書き込む
With objMail
ws.Cells(i, 1).Value = .ReceivedTime ' 受信日時
ws.Cells(i, 2).Value = .SenderName ' 送信者名
ws.Cells(i, 3).Value = .Subject ' 件名
ws.Cells(i, 4).Value = .Body ' 本文
End With

' Excelファイルを保存して閉じる
wb.Save
wb.Close False
objExcel.Quit

' オブジェクトを解放
Set ws = Nothing
Set wb = Nothing
Set objExcel = Nothing
Set objMail = Nothing
Set myNameSpace = Nothing
End Sub

このコードを、VBE内の「ThisOutlookSession」に貼り付けてください。これにより、Outlookで新しいメールを受信するたびに、指定したExcelファイルにその情報が自動的に追記されます。

よくある質問や疑問

Q1. Excelファイルが開いているときでも動作しますか?

はい、このコードはExcelファイルが開いている場合でも正常に動作します。ただし、他のユーザーと共有している場合は、同時編集に注意が必要です。

Q2. 特定のフォルダに受信したメールだけを記録することは可能ですか?

はい、可能です。`Application_NewMailEx`イベント内で、メールのフォルダをチェックし、特定のフォルダに受信したメールのみ処理するようにコードを修正できます。

相談しに行く

まとめ

いかがでしたか?

Outlook VBAを活用することで、メールの情報を自動的にExcelに記録することができます。これにより、手作業での記録作業が不要になり、業務効率が大幅に向上します。ぜひ、試してみてくださいね!

この記事を書いた人
この記事を書いた人

企業の情報システム部門で10年以上、PC・アカウント・社内ネットワーク・Microsoft 365/Google Workspace運用を担当。年間数百件の問い合わせ対応(PC不調、メール送受信、Excel/Word資料、Teams会議、スマホ連携など)を通じて、初心者がつまずくポイントを「再現→原因切り分け→最短解決」の手順に落とし込んできました

現場や身近で実際に起きたトラブルをベースに、手順だけでなく「なぜそうなるか」「失敗しやすい落とし穴」「安全な設定(セキュリティ)」まで含めて解説します。

相談窓口(問い合わせ/LINE等)を設け、記事で解決しないケースも個別にサポートしていますので「パソコンが急に動かなくなった」「スマホの設定がわからない」などの悩みは一人で抱え込まず、お気軽にご相談ください。

【お問い合わせは下記URLから】
https://m32006400n.xsrv.jp/inquiry-form/

【公式LINEは下記URLから】
https://lin.ee/t8TDjcj

uri uriをフォローする
スポンサーリンク
よかったらシェアしてね! /
uri uriをフォローする

コメント

タイトルとURLをコピーしました