パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

VBAでOutlook受信トレイのサブフォルダ内のメールをエクセルに出力する方法

受信トレイのサブフォルダ内のメールをエクセルに一覧にしたい

この記事では、以下の画像の「サブ」という名前のフォルダ内のメールをエクセルに一覧するマクロを紹介します。

f:id:gene320:20171116220843p:plain

なお、受信トレイのメールを一覧にする方法は、こちらの記事で詳しく紹介しています。

www.fastclassinfo.com

VBAでOutlook受信メールのサブフォルダ内のメールをエクセルに一覧にする

outlookの受信トレイのサブフォルダ内のメールをエクセルに一覧にする

具体的なやり方やコードを紹介する前に、この記事で紹介するマクロで、どんなことができるか? を紹介します。

以下のような状態のエクセルを準備して、

f:id:gene320:20171116221126p:plain

この記事で紹介するマクロを使うと、以下のような結果がエクセルに一覧で出力されます。

f:id:gene320:20171116221138p:plain

メール添付ファイルは、以下のように自分で設定したフォルダに自動で保存されるようにします。

f:id:gene320:20170817005758p:plain

f:id:gene320:20170817010534p:plain

マクロを作成する前の準備|参照設定を変更する

エクセルVBAでoutlookのメールを操作するためのプログラミングに入る前に、準備しておくことがあります。

また、メールの添付ファイルを保存するフォルダも自動作成される設定も準備しておきます。それらの準備の方法は以下のとおりです。

準備|外部ライブラリへの参照設定を追加

参照設定とは、機能拡張させることです。この記事で利用するコードを使えるようにするには、以下の2つにチェックを入れます。

設定方法

1.Microsoft Outlook 15.0 Object Library
2.Microsoft Scripting Runtime

1.Microsoft Outlook 15.0 Object Libraryにチェックを入れることで、Outlook操作の設定ができるようになります。

もしかすると、Microsoft Outlook 15.0 Objectはないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。

2.Microsoft Scripting Runtimeにチェックを入れることで、添付ファイルを保存するフォルダを作成することができるようになります。

以下、具体的な設定方法を紹介します。

設定方法

1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
3.Microsoft Scripting Runtimeのライブラリにチェックを入れて、OKをクリック

詳細はこちらの画像の通りです。

1.VBEを開いて頂いて、「ツール」→「参照設定」

f:id:gene320:20170613213650p:plain

2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック

f:id:gene320:20170614231515p:plain

3.Runtimescript Libraryのライブラリにチェックを入れて、OKをクリック

f:id:gene320:20170817005013p:plain

プログラムはこちら

このままコピペして使ってください。

この記事で紹介するコードは以下の通り。

Option Explicit

Sub Outlook_mail_list_subfolder()
    
   '''---コード1|このコード内で使用する変数を宣言
    Dim InboxFolder, subfolder, i, n, k, attno As Long
    Dim sender, mes, path1 As String
    Dim outlookObj As Outlook.Application
    Dim myNameSpace, objmailItem As Object
    Dim fso As FileSystemObject

    '''---コード2|定義した変数に必要な項目をセット
    Set outlookObj = CreateObject("Outlook.Application")
    Set myNameSpace = outlookObj.GetNamespace("MAPI")
    Set InboxFolder = myNameSpace.GetDefaultFolder(6)
    Set subfolder = InboxFolder.Folders("サブ")
    n = 2

    '''---コード3|メールの添付ファイルを保管するフォルダを作成
    mes = InputBox("メールの添付資料を保管用フォルダを新しく作成します。フォルダ名を入力してください")
    path1 = ThisWorkbook.Path & "\" & mes
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder (path1)

    '''---コード4|解析する受信メールの範囲を決める]
    MsgBox subfolder.Items.Count
    For i = 1 To subfolder.Items.Count
        Set objmailItem = subfolder.Items(i)

        '''---コード5|受信メールの件数、受信日時、件名(タイトル)、送信者名、送信元のメールアドレス、内容(本文)を取得
        Range("A" & n).Value = i
        Range("B" & n).Value = objmailItem.ReceivedTime
        Range("C" & n).Value = objmailItem.subject
        Range("D" & n).Value = objmailItem.SenderName
        Range("E" & n).Value = objmailItem.SenderEmailAddress
        Range("F" & n).Value = Left(objmailItem.Body, 100)

        '''---コード6|メールの添付ファイルを保管する

        attno = objmailItem.Attachments.Count
        If attno > 0 Then
            For k = 1 To attno
                objmailItem.Attachments(k).SaveAsFile (path1 & "\" & objmailItem.Attachments(k).DisplayName)
            Next
            Range("G" & n).Value = k
        Else
            Range("G" & n).Value = "なし"
        End If

        n = n + 1
    Next

    '''---コード7|セットした変数を解除
    Set outlookObj = Nothing
    Set myNameSpace = Nothing
    Set InboxFolder = Nothing

End Sub

サンプルプログラムの解説

基本的には、こちらの記事で紹介しています。

www.fastclassinfo.com

上の記事で紹介している内容と異なる部分だけを解説します。異なるのは、2か所だけです。

2行目:subfolder を追加
12行目:InboxFolder.Folders("サブ") を追加

   '''---コード1|このコード内で使用する変数を宣言
    Dim InboxFolder, subfolder, i, n, k, attno As Long '''
    Dim sender, mes, path1 As String
    Dim outlookObj As Outlook.Application
    Dim myNameSpace, objmailItem As Object
    Dim fso As FileSystemObject

    '''---コード2|定義した変数に必要な項目をセット
    Set outlookObj = CreateObject("Outlook.Application")
    Set myNameSpace = outlookObj.GetNamespace("MAPI")
    Set InboxFolder = myNameSpace.GetDefaultFolder(6)
    Set subfolder = InboxFolder.Folders("サブ")
    n = 2

12行目:InboxFolder.Folders("サブ") を追加

もし、あなたのサブフォルダの名称が「サブ」ではなく、他の名称だったら、 「サブ」を変えてください。

たとえば、以下の画像であれば、

f:id:gene320:20171116221339p:plain

InboxFolder.Folders("サブ") 
InboxFolder.Folders("問い合わせ")

1行目:①「サブ」のフォルダに含まれるメールを一覧に
2行目:②「問い合わせ」のフォルダに含まれるメールを一覧にする

となります。

フォルダのフォルダを解析する場合

フォルダのフォルダを解析する場合も考えます。

たとえば、サブ2のフォルダを解析したい場合は、以下のプログラムに変更して使ってください。

f:id:gene320:20171116221429p:plain

変更前

    '''---コード2|定義した変数に必要な項目をセット
    Set outlookObj = CreateObject("Outlook.Application")
    Set myNameSpace = outlookObj.GetNamespace("MAPI")
    Set InboxFolder = myNameSpace.GetDefaultFolder(6)
    Set subfolder = InboxFolder.Folders("サブ")
    n = 2

変更後

    '''---コード2|定義した変数に必要な項目をセット
    Set outlookObj = CreateObject("Outlook.Application")
    Set myNameSpace = outlookObj.GetNamespace("MAPI")
    Set InboxFolder = myNameSpace.GetDefaultFolder(6)
    Set subfolder = InboxFolder.Folders("サブ").Folders("サブ2")  '←ここだけ変更
    n = 2

変更は、4行目だけです。

テンプレートファイルをダウンロードしたい方はコチラから

紹介したIEを操作するコードを一から作るのは大変なので、記事の中で紹介したマクロのコードが入ったファイルは無料でダウンロードできるようにします。以下のフォームにメールアドレスを入力いただくと、返信メールからエクセルファイルをダウンロードできます。

受信メール解析コードを編集・アレンジしたいなら、手書きできると便利

エクセルVBAを使ったoutlookの受信メールの解析方法について、事例をあわせて紹介しました。今回の内容をぜひVBAの勉強に活かしてみてください。

紹介したコードを編集して利用すれば、outlookでの受信メールの解析はかなりのことができます。ぜひ、あなたがやりたいことに応用してくださいね。

しかし、この記事を読んだけど、「私にはまだチンプンカンプン…」、「自分で編集できそうにもない…」、「マクロの基礎も理解していない…」という場合なら、アウトルックとの連携を学ぶ前に、エクセルマクロの基礎から学ぶことをオススメします。

エクセルからoutlookを操作するマクロは、かなりハイレベルの内容です。土台ができていない内に学ぶと、挫折の原因になってしまいます。ですので、まずは基本を学びましょう。

もしきちんと学ぶなら、こちらの無料動画がオススメです。講師に質問できますので、分からないところがあっても安心ですし、今すぐ始めることができます。

この記事がVBAでアウトルックを操作して、自動メールを送ることができるようになれば、幸いです。もし、もう少しエクセルマクロついて知りたいなら、こちらの記事がおすすめです。

エクセルマクロを独学で習得したいなら

www.fastclassinfo.com

エクセルマクロとは?もっと詳しく知りたいなら

www.fastclassinfo.com

エクセルマクロの難易度や習得までの期間を知りたいなら

www.fastclassinfo.com