Outlookメール整理: Excel VBAで「自動返信」メールを特定フォルダに移動する方法

この記事では、Excel VBAを用いてOutlookの「自動返信」メールを「自動返信」フォルダに移動する方法について詳しく解説します。初心者向けに基本的なコードから、それを応用した実践的な例までを取り上げ、Excel VBAの豊富な応用性を体感していただきます。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本のコード

Outlookのメールボックス内で「自動返信」という文字列をタイトルに持つメールを特定し、「自動返信」フォルダに移動する基本的なVBAコードを以下に示します。


Sub MoveAutoReplyEmails()
    Dim olApp As Object
    Dim olNS As Object
    Dim Inbox As Object
    Dim MailItem As Object
    Dim AutoReplyFolder As Object

    Set olApp = CreateObject("Outlook.Application")
    Set olNS = olApp.GetNamespace("MAPI")
    Set Inbox = olNS.GetDefaultFolder(6) 'Inbox folder
    Set AutoReplyFolder = Inbox.Folders("自動返信")

    For Each MailItem In Inbox.Items
        If InStr(1, MailItem.Subject, "自動返信") > 0 Then
            MailItem.Move AutoReplyFolder
        End If
    Next MailItem

    Set MailItem = Nothing
    Set Inbox = Nothing
    Set olNS = Nothing
    Set olApp = Nothing
End Sub

コードの詳細解説

上記のコードはOutlookの「自動返信」というタイトルのメールを「自動返信」というフォルダに移動するものです。

1. Outlookオブジェクトを初期化し、`olApp`として設定。
2. `olNS`をMAPIの名前空間として設定。
3. `Inbox`をデフォルトの受信トレイフォルダとして設定。
4. `AutoReplyFolder`を受信トレイ内の「自動返信」という名前のフォルダとして設定。
5. `Inbox`内のすべてのメールアイテムをループ処理。
6. メールのタイトルに「自動返信」という文字列が含まれている場合、そのメールを「自動返信」フォルダに移動。

応用例1: 特定の期間内のメールだけを移動

特定の期間内(例:先週)に受信した「自動返信」メールだけを移動したい場合のコードです。


Sub MoveAutoReplyEmailsWithinDateRange()
    ' ... [前の変数宣言は省略]
    
    Dim startDate As Date
    Dim endDate As Date
    startDate = DateAdd("d", -7, Date) '1週間前
    endDate = Date '今日の日付
    For Each MailItem In Inbox.Items
        If MailItem.ReceivedTime >= startDate And MailItem.ReceivedTime <= endDate And _
           InStr(1, MailItem.Subject, "自動返信") > 0 Then
            MailItem.Move AutoReplyFolder
        End If
    Next MailItem
    ' ... [後のオブジェクト解放は省略]
End Sub

コードの詳細解説

このコードでは、受信日が指定した日付範囲内で、かつタイトルに「自動返信」という文字列を含むメールを「自動返信」フォルダに移動します。

応用例2: 送信者が特定のアドレスの場合のみ移動


Sub MoveAutoReplyEmailsFromSpecificSender()
    ' ... [前の変数宣言は省略]
    
    Dim specificSender As String
    specificSender = "noreply@example.com"

    For Each MailItem In Inbox.Items
        If MailItem.SenderEmailAddress = specificSender And _
           InStr(1, MailItem.Subject, "自動返信") > 0 Then
            MailItem.Move AutoReplyFolder
        End If
    Next MailItem

    ' ... [後のオブジェクト解放は省略]
End Sub

コードの詳細解説

特定の送信者からのメールだけを移動するためのコードです。この例では、”noreply@example.com”からの「自動返信」メールを移動しています。

応用例3: メールの本文に特定のキーワードが含まれている場合のみ移動


Sub MoveAutoReplyEmailsContainingKeyword()
    ' ... [前の変数宣言は省略]
    
    Dim keyword As String
    keyword = "ありがとうございます"

    For Each MailItem In Inbox.Items
        If InStr(1, MailItem.Body, keyword) > 0 And _
           InStr(1, MailItem.Subject, "自動返信") > 0 Then
            MailItem.Move AutoReplyFolder
        End If
    Next MailItem

    ' ... [後のオブジェクト解放は省略]
End Sub

コードの詳細解説

メールの本文に特定のキーワードが含まれている場合のみ移動するためのコードです。この例では、メールの本文に「ありがとうございます」というキーワードが含まれている「自動返信」メールを移動しています。

まとめ

Excel VBAを用いることで

、Outlookのメール整理作業を自動化できます。基本のコードからさまざまな応用例までを学び、効率的なメール管理を実現しましょう。是非、上記のコードを参考に、ご自身のニーズに合わせたカスタマイズを楽しんでください。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次