皆さん、こんにちは!
今日は、Outlookで受信したメールを自動的にExcelに記録する方法をご紹介します。これをマスターすれば、日々の業務効率が格段にアップしますよ!
Outlook VBAとは?
まず、Outlook VBAについて簡単に説明します。VBAとは、Visual Basic for Applicationsの略で、Microsoft Office製品に組み込まれているプログラミング言語です。これを使うことで、Outlookの操作を自動化し、Excelなど他のOffice製品と連携させることができます。
開発環境の準備
では、早速始めましょう。まずは、OutlookでVBAを使うための準備を行います。
1. 開発タブの表示
Outlookを起動し、以下の手順で開発タブを表示させます。
- 「ファイル」タブをクリック
- 「オプション」を選択
- 「リボンのユーザー設定」をクリック
- 右側の「開発」のチェックボックスにチェックを入れる
これで、リボンに「開発」タブが表示されます。
2. Visual Basic Editor(VBE)の起動
次に、VBEを起動します。
- 「開発」タブをクリック
- 左端の「Visual Basic」をクリック
これで、VBAの編集画面が開きます。
3. 参照設定の追加
OutlookからExcelを操作するためには、参照設定を行う必要があります。
- VBEのメニューから「ツール」をクリック
- 「参照設定」を選択
- 表示された一覧から「Microsoft Excel xx.x Object Library」にチェックを入れる
- 「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に記録することができます。これにより、手作業での記録作業が不要になり、業務効率が大幅に向上します。ぜひ、試してみてくださいね!


コメント