Excel VBAを用いたメール添付ファイルの受信者別整理方法

ExcelのVBAは、自動化やカスタマイズの強力なツールとして知られています。この記事では、Excel VBAを用いてメールの添付ファイルを受信者別に整理する処理について解説します。具体的なコードとその詳細解説、さらに実用的な応用例を通じて、この処理の利点や魅力を理解しましょう。

目次

Excel VBAの基本

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

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

メール添付ファイルの受信者別整理処理の基本

日常業務で受け取るメールの中には、添付ファイルがあるものも多いでしょう。受信者別にこれらを整理し、効率的にファイル管理を行うことが求められます。VBAを利用すれば、この作業を自動化できます。


Sub OrganizeAttachmentsByRecipient()
    Dim OutlookApp As Object
    Dim OutlookNamespace As Object
    Dim MailFolder As Object
    Dim MailItem As Object
    Dim Attachment As Object
    Dim SavePath As String
    Dim Recipient As String

    ' Outlookオブジェクトの作成
    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")

    ' 受信トレイの設定
    Set MailFolder = OutlookNamespace.GetDefaultFolder(6)

    ' 保存先の設定
    SavePath = "C:\MailAttachments\"

    ' メールを1つずつ処理
    For Each MailItem In MailFolder.Items
        If MailItem.Attachments.Count > 0 Then
            For Each Attachment In MailItem.Attachments
                Recipient = MailItem.Recipients(1).Name
                Attachment.SaveAsFile SavePath & Recipient & "\" & Attachment.FileName
            Next Attachment
        End If
    Next MailItem
End Sub

コードの詳細解説

上記のVBAコードは、Outlookの受信トレイにあるメールの添付ファイルを、受信者の名前のフォルダに整理して保存します。

– 最初にOutlookのアプリケーションオブジェクトと名前空間を作成します。
– `GetDefaultFolder(6)`を使用して、受信トレイのフォルダを指定します。
– `SavePath`で添付ファイルの保存先フォルダを指定します。
– 受信トレイの各メールを処理するための`For Each`ループを使用します。メールに添付ファイルがある場合、受信者の名前でフォルダを作成し、その中に添付ファイルを保存します。

応用例

1. 期間指定での添付ファイル整理

受信日を指定して、その期間中に受信したメールの添付ファイルだけを整理する場合、以下のようにコードを修正できます。


' ... [前のコードを省略]
For Each MailItem In MailFolder.Items
    If MailItem.ReceivedTime >= Date - 7 And MailItem.ReceivedTime <= Date Then
        If MailItem.Attachments.Count > 0 Then
            For Each Attachment In MailItem.Attachments
                Recipient = MailItem.Recipients(1).Name
                Attachment.SaveAsFile SavePath & Recipient & "\" & Attachment.FileName
            Next Attachment
        End If
    End If
Next MailItem

このコードは、過去7日間に受信したメールの添付ファイルのみを整理します。

2. 特定の拡張子の添付ファイルのみ整理

特定の拡張子(例:.pdf)の添付ファイルのみを整理する場合のコードは以下の通りです。


' ... [前のコードを省略]

For Each Attachment In MailItem.Attachments
    If Right(Attachment.FileName, 4) = ".pdf" Then
        Recipient = MailItem.Recipients(1).Name
        Attachment.SaveAsFile SavePath & Recipient & "\" & Attachment.FileName
    End If
Next Attachment

3. 受信者のドメイン別に整理

受信者のメールアドレスのドメイン部分(例:@example.com)で整理する場合のコードは以下となります。


' ... [前のコードを省略]

Dim Domain As String
Domain = Split(MailItem.Recipients(1).Address, "@")(1)
Attachment.SaveAsFile SavePath & Domain & "\" & Attachment.FileName

まとめ

ExcelのVBAを使用して、メールの添付ファイルを効率的に受信者別に整理することが可能です。上記の基本的なコードや応用例を参考に、独自のニーズに合わせてカスタマイズしてみてください。

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

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

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

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

コメント

コメントする

目次