ソフトウエア

メールExcel抽出ツール

更新日:

最近、メール関連で問題となっていて、メール情報を消失していました。

・メールアドレスのパスワードが無効化していて、突然HDDアクセスできなくなる。(昨年)
・フリーメールの運用中止があり、バックアップが間に合わなかった。(一昨年)

現在、利用できるメールは、ファイル感覚で管理したいと思っていたが、
フリーメールを主に使うので、メール専用アプリは所有していなく、
身近にあるアプリは、ノートPC購入時にオマケのExcel2013・Word2013があるくらい。
これらで、メールのメンテナンスを手軽に行えないかと考えていました。

今年1月にWindows7サポート終了で、Windows10に切り替えたPCに、再インストールしたら、
Office2013扱いになったようで、Outlook2013とPowerPoint2013が追加していたのだ。

このアプリを使うようになり、ブラウザメールに比べ、高い機能を知ります。
・複数メールアドレスを登録するだけで同時に使用できる。
・メール情報は、Excelファイルに抽出できる。

Outlook本体だけでExportが可能でも、日時情報が欠落しているのです。
さらに、抽出領域の指定なので、フォルダ数分を繰り返す必要があるのです。
そこで、アドレス別にメールを全抽出するマクロを作ってみました。
Outlookの全フォルダを検索し、Excelシートに抽出するものです。

macro機能
入力:Outlook2013のメール
出力:Excel2013のシート

・1件以上フォルダにメールが存在すれば、抽出する
(個人が追加したフォルダも対象にする)
・メールアドレスをシート名として抽出メールを展開する
・抽出項目
メール件数、受信日時、題目、送信者名、送信元アドレス、本文(255文字まで)

Sub getMail()
    ' outlook関連の初期設定を行う
    Dim i As Long
    Dim outlookObj As Outlook.Application
    Dim inboxFolder As Outlook.folder
    Dim myNameSpace As Object
        Set outlookObj = CreateObject("Outlook.Application")
        Set myNameSpace = outlookObj.GetNamespace("MAPI")
        Set inboxFolder = myNameSpace.GetDefaultFolder(olFolderInbox) ' デフォルトの受信フォルダ
    ' Excel関連の初期設定を行う
    Dim n As Long
    Dim acc As Account
    Dim sheet As Worksheet

    For Each acc In inboxFolder.Session.Accounts
        n = 2 ' 2行目から展開
        Worksheets().Add After:=Worksheets(Worksheets.Count)   ' 末尾に追加
        Set sheet = ActiveSheet ' 現在アクティブなシートを取得する
        sheet.Name = acc
        ' Excelの先頭行に文字を設定する
        setSubject (sheet.Name)
        ' メールアドレス配下のoutlook情報を取得する
        Set inboxFolder = myNameSpace.folders(sheet.Name)
        ' メール情報のあるフォルダを検出する
        Call listSubFolders(inboxFolder, n, sheet.Name)
    Next
    ' 処理終了メッセージを表示する
    MsgBox "OutlookメールのExcel取得が完了しました。"
    ' 使用した変数を開放する
    Set outlookObj = Nothing
    Set myNameSpace = Nothing
    Set inboxFolder = Nothing
End Sub
Sub listSubFolders(ByVal folderOL As Outlook.folder, ByRef m As Long, ByRef nameSht As String)
    Dim fol As Outlook.folder
    For Each fol In folderOL.folders
        ' メール情報があれば、Excelに展開し、検索を続ける
        If fol.Items.Count > 0 Then
            ' Excelシートにメール情報を抽出する
            Call setCell(m, fol, nameSht)
            m = m + fol.Items.Count
            listSubFolders fol, m, nameSht
        End If
    Next
    Set fol = Nothing
End Sub
Sub setSubject(ByRef nameSht As String)
    With Sheets(nameSht)
        Range("A" & 1).Value = "件"
        Range("B" & 1).Value = "名前毎の件数"
        Range("C" & 1).Value = "受信日時"
        Range("D" & 1).Value = "題目"
        Range("E" & 1).Value = "送信者名"
        Range("F" & 1).Value = "送信元アドレス"
        Range("G" & 1).Value = "本文"
    End With
End Sub
Sub setCell(ByVal num As Integer, ByRef folder As Outlook.folder, ByRef nameSht As String)
    Dim i As Long
    Dim objItem As Object
    For i = 1 To folder.Items.Count
        Set objItem = folder.Items(i)
        With Sheets(nameSht)
            Range("A" & num).Value = num - 1
            Range("B" & num).Value = folder & "[" & CStr(i) & "]"
            Range("C" & num).Value = objItem.ReceivedTime
            Range("D" & num).Value = objItem.Subject
            Range("E" & num).Value = objItem.SenderName
            Range("F" & num).Value = objItem.SenderEmailAddress
            Range("G" & num).Value = Left(objItem.Body, 255)
        End With
        num = num + 1
    Next
    Set objItem = Nothing
End Sub

件数が多いとそれなりに時間かかるので、ご注意ください。

素材ラボのイラスト使用

Z.comバナー



-ソフトウエア

Copyright© コンピュータ生活 , 2024 All Rights Reserved Powered by STINGER.