【Outlook/VBA】Excelファイルを新規作成してメール情報を書き出して保存する
以前、質問を受けて以下の記事のようなものを作ったのですが、同じ人からOutlook側で処理したいとの質問を改めて受けました。
依頼内容は以下の通り
- 前回と同じことをOutlook側のマクロで行いたい。(Outlookの特定フォルダのメール情報を抽出してExcelに転記)
- 所定のフォルダに「20231215資料.xlsx」というファイルを作成。
- そのファイルに前回と同じ要領で書き出して保存。
ということで、やってみましょう。
Outlook上でVBAエディターを開く
まずOutlook上でマクロを組む場合はExcelと同じく「開発」タブから「Visual Basic」をクリックするとエディターが現れます。デフォルトでは「開発」タブはないのでリボンの設定で表示させましょう。まあExcelマクロを触ったことある人はおなじみなので説明するまでもありませんが。
Visual Basic Editor(VBE)が現れたら標準モジュールを追加しましょう。
Outlookのルートフォルダと対象のフォルダを確認
OutlookをVBAで制御するにあたり確認しておかなきゃいけないのが、ルートフォルダ名です。
下図の場所を確認してください。だいたい自分のメールアドレスになっていると思いますが「OUTLOOK」のような文字になっているケースもあります。あと、今回は特定のフォルダ内のメールを対象とするので、「未決」というフォルダを作ってサンプルメールを投げておきました。
ソースコード
以下がソースコードです。これをVBEにコピペしましょう。もちろん、<ルートフォルダ名>と<対象フォルダ名>には適宜修正してください。
Sub OutlookToExcel() Dim r, idx As Long Set myapp = CreateObject("Outlook.Application") Set myFolder = myapp.Session.Folders("<ルートフォルダ名>").Folders("<対象フォルダ名>") Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set wb = ExcelApp.Workbooks.Add wb.SaveAs FileName:="C:\Test\" & Format(Now(), "yyyymmdd") & "資料.xlsx" '項目行 wb.Worksheets("Sheet1").Range("A1").Value = "件名" wb.Worksheets("Sheet1").Range("B1").Value = "送信者" wb.Worksheets("Sheet1").Range("C1").Value = "メールアドレス" wb.Worksheets("Sheet1").Range("D1").Value = "受信日時" '列幅 wb.Worksheets("Sheet1").Range("A1").ColumnWidth = 20 wb.Worksheets("Sheet1").Range("B1").ColumnWidth = 10 wb.Worksheets("Sheet1").Range("C1").ColumnWidth = 25 wb.Worksheets("Sheet1").Range("D1").ColumnWidth = 17 r = 2 For idx = myFolder.Items.Count To 1 Step -1 wb.Worksheets("Sheet1").Cells(r, 1).Value = myFolder.Items(idx).Subject wb.Worksheets("Sheet1").Cells(r, 2).Value = myFolder.Items(idx).SenderName wb.Worksheets("Sheet1").Cells(r, 3).Value = myFolder.Items(idx).SenderEmailAddress wb.Worksheets("Sheet1").Cells(r, 4).Value = myFolder.Items(idx).ReceivedTime r = r + 1 Next End Sub
実行結果
実行結果は動画にしています。参考にしてください。
Outlookにマクロ実行ボタンを設置
毎回VBE上から実行するわけにもいかないので、リボンに自作マクロのボタンを設置しましょう。
以下の記事を参考に。
スポンサーリンク