パソコンスキルの教科書

パソコンスキルの教科書

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

エクセルマクロVBAでOutlook受信メールを一覧に!添付ファイルも保存

f:id:gene320:20170614232819p:plain

Outlookで受信したメールをエクセルに一覧にしたい
アウトルックのメールに添付されている資料を、自動でフォルダに保管したい
受信メールを解析して、業務分析したい

そんなことを考えているなら、この記事を読んでみてください。この記事では、以下の内容を紹介します。

・outlookで受信したメールをエクセルに一覧にする方法
・受信したメールに添付されているファイルを保存
・受信メールの分析・解析の方法

すぐに使えるコードも紹介しますので、ぜひこのまま読みすすめていってください。

エクセルマクロVBAでOutlook受信メールを一覧に!添付ファイルも保存(コード付き)

outlookの受信トレイのメールをエクセルに一覧にして、メール情報を取得

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

この記事で紹介する内容を利用すれば、outlookの受信メール一つ一つを解析して、以下の7つの項目をエクセルに一覧で出力できます。

1.No(A列)|outlookを起動する
2.受信日時(B列)|メールを受信した日時を取得
3.件名(C列)|受信したメールの件名(タイトル)
4.送信者名(D列)|受信したメールの送信者名
5.送信元メールアドレス(E列)|受信したメールの送信元メールアドレス
6.本文(先頭100文字のみ)(F列)|受信したメールの本文。最初の100文字だけ
7.添付ファイル数(G列)|受信したメールの添付ファイル(フォルダ保管もマクロでやります)

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

f:id:gene320:20170817005817p:plain

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

f:id:gene320:20170817005808p:plain

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

f:id:gene320:20170817005758p:plain

f:id:gene320:20170817010534p:plain

ここで、紹介した7つの項目以外にも、条件を設定して、解析するメールを絞り込む方法も紹介しますので、ぜひこのまま読みすすめていってください。

受信メールの解析・分析するマクロを作成する前に!参照設定を変更する

エクセル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

サンプルコードの概要を紹介|コピペして活用しよう!

「outlookの受信トレイの中にあるメールの内容を解析」するコードを紹介します。具体的な解説の前に、全体のコードをお見せします。必要なら、このままコピペして使ってください。

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

Option Explicit

Sub Outlook_mail_list()
    
   '''---コード1|このコード内で使用する変数を宣言
    Dim InboxFolder, 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)    
    n = 2

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

    '''---コード4|解析する受信メールの範囲を決める
    MsgBox InboxFolder.Items.Count
    For i = 1 To InboxFolder.Items.Count
        Set objmailItem = InboxFolder.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

outlookの受信メールを読み込み、エクセルに書き出し!サンプルコードを解説

「outlookの受信トレイの中にあるメールの内容を解析する」という事例を、コードと合わせて紹介します。

サンプルコードを7つに分解して、それぞれ詳しく説明していきます。

コード1|このコード内で使用する変数を宣言
コード2|定義した変数に必要な項目をセット
コード3|メールの添付ファイルを保管するフォルダを作成
コード4|受信トレイに存在するメール件数を取得し、解析範囲を決める
コード5|受信メールの件数、受信日時、件名(タイトル)、送信者名(差出人)、送信元のメールアドレス、内容(本文)を取得
コード6|メールの添付ファイルをフォルダに保存する
コード7|セットした変数を解除

それでは、解説します。

コード1|このコード内で使用する変数を宣言

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

1行目:変数設定:受信トレイ、解析するメールの番号、エクセルの行数、添付ファイルの数、添付ファイルの数
2行目:変数設定:受信トレイ内の総メール件数メッセージ、添付ファイルの保管先
3行目:Outlookで使用するオブジェクト生成
4行目:Outlookで使用するオブジェクト(2つ)生成
5行目:フォルダ生成で使用するオブジェクト

コード2|定義した変数に必要な項目をセット

    Set outlookObj = CreateObject("Outlook.Application")
    Set myNameSpace = outlookObj.GetNamespace("MAPI")  
    Set InboxFolder = myNameSpace.GetDefaultFolder(6)    
    n = 2

1行目:受信メールを解析するシート名を「受信メール一覧」で設定
2行目:outlookのメールを解析のおまじない
3行目:(6)とすることで、受信トレイを指す。6以外の数値を入れることで、受信トレイ以外を設定することも可能
4行目:受信メールを解析結果を出力する最初の行数(エクセル)を指定(ここではエクセルの2行目から使用)

コード3|メールの添付ファイルを保管するフォルダを作成

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

1行目:メール添付ファイルを保管するフォルダの名称を決める
2行目:メール添付ファイルを保管するフォルダは、使用しているエクセルファイルと同じフォルダに生成
3行目:フォルダ生成に使うオブジェクトを設定
4行目:メール添付ファイルを保管するフォルダを生成

コード4|受信トレイに存在するメール件数を取得し、解析範囲を決める

    MsgBox InboxFolder.Items.Count
    For i = 1 To InboxFolder.Items.Count
        Set objmailItem = InboxFolder.Items(i)

1行目:現在、受信トレイに保管されているメールが何通あるかメッセージを出す
2行目:i=(1,2,3,・・・,受信トレイ内の総メール件数)を順次セット。受信トレイの(1通目、2通目、…、受信トレイ内の最後のメール)までを繰り返し解析
3行目:objmailItemに受信トレイの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)

1行目:セルAn(nは1,2,3,…)に、何通目のメールを解析しているかカウントする。(iをそのまま転用)
2行目:セルBn(nは1,2,3,…)に、解析したメールの受信日時を出力
3行目:セルCn(nは1,2,3,…)に、解析したメールの件名(タイトル)を出力
4行目:セルDn(nは1,2,3,…)に、解析したメールの送信者名を出力
5行目:セルEn(nは1,2,3,…)に、解析したメールの送信元のメールアドレスを出力
6行目:セルFn(nは1,2,3,…)に、解析したメールの内容(本文)を出力。ただし、長いので先頭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

1行目:attno=解析しているメールの添付ファイル数
2行目:もし、解析しているメールに添付ファイル数が0より大きいならば(1つ以上あるなら)
3行目~5行目:for next文で一つずつ、添付ファイルをフォルダへ保管する
6行目:セルGn(nは1,2,3,…)に、解析したメールに含まれる添付ファイル数(k)を出力。
7行目:もし、解析しているメールに添付ファイル数がないなら
8行目:セルGn(nは1,2,3,…)に、「なし」と出力。
9行目:End If でif文終了のおまじない
10行目:出力するエクセルの行数を+1する

コード7|セットした変数を解除

    Set outlookObj = Nothing
    Set myNameSpace = Nothing
    Set InboxFolder = Nothing
End Sub

1行目~3行目:セットした変数を解除

outlookメール解析のテクニック

メールそのものを保存して、フォルダに取り込む

outlookのメールを.msgで保管することも可能です。その場合は、以下のコードを使います。

objmailItem.SaveAs xxxx & ".msg", olMSG

xxxxには、指定したフォルダが入ります。

既読or未読のみ解析する

解析するメールの内を既読と未読で分けることが可能です。その場合は、以下のコードを使います。

if objmailItem.UnRead = False then
    処理1
elseif objmailItem.UnRead = True then
    処理2
end if

1行目:もし、解析しているメールが未読でないなら(=既読なら)
2行目:処理1
3行目:もし、解析しているメールが既読でないなら(=未読なら)
4行目:処理2
5行目:End If でif文終了のおまじない

OutlookのサブフォルダやGmailの受信トレイのメールを一覧にする方法

OutlookのサブフォルダやGmailの受信トレイのメールを一覧にする方法は、以下の記事で紹介しています。合わせて読んでみてください。

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

受信トレイのサブフォルダ内のメールをエクセルに一覧にしたい場合は、こちらの記事で詳しく紹介しています。

www.fastclassinfo.com

Gmailの受信トレイのメールをシートに一覧にしたいなら

Gmailの受信メールもプログラムを使って、シートに一覧にできます。ただし、VBAではなくGAS(Google Apps Script)を使ったやり方を紹介します。

www.fastclassinfo.com

ぜひ参考にしてみてください。

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

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

ぜひご活用ください。

outlookの受信メール解析で注意すること

この記事で紹介した受信メール解析マクロには、2つの注意点があります。

・解析に時間がかかる|メール100通で2分必要
・添付ファイルを探すのに時間がかかる

解析に時間がかかる|メール100通で2分必要

outlookのメール解析は時間がかかります。メール100通でおよそ2分必要な場合があります。対策としては、「お昼休みに解析する」、「解析するメールを限定する」などがあります。「解析するメールを限定する」場合は、あらかじめ、日時で範囲を指定するとやりやすいでしょう。

解析するメールの受信日が、指定範囲内ならば、解析する。指定範囲外なら解析しない。というコードを手書きで加えれば、対処できます。ぜひ試してみてください。

添付ファイルを探すのに時間がかかる

この記事で紹介しているコードでは、添付ファイルの保管フォルダにとにかく入れ込んでいくだけです。目的の添付ファイルを探すのには、手間がかかるでしょう。

もし、分かりやすくしたいなら、添付ファイルの保管フォルダの下層に、さらにフォルダを生成するコードを記載するといいでしょう。欲を言えば、エクセルにハイパーリンクを自動作成して、エクセルのハイパーリンクをクリックしたら、フォルダの保管先に移動できるようにする。そのようなコードを手書きで加えれば、探す時間が一気に削減できます。ぜひ試してみてください。

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

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

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

しかし、このコードを編集するといっても、「自分にはハードルが高そう、、、」と感じている方も多いのではないでしょうか。残念ながら、VBAのアウトルック操作に関しては、なかなかいい教材はありませんし、ウェブでも詳しい解説はあまり見当たりません。もし、あなたがもう少し勉強をするなら、以下の2つがオススメです。

1.アウトルック連携をもう少し詳しく学ぶなら|オススメ本

オフィスの達人〈5〉VBA活用術―Excel/Word/Access/PowerPoint/Outlook Office 2003対応 (オフィスの達人 (5))

オフィスの達人〈5〉VBA活用術―Excel/Word/Access/PowerPoint/Outlook Office 2003対応 (オフィスの達人 (5))

この本を使えば、outlook操作の方法を手軽に勉強することができます。しかし、本だと「分からない部分を質問できない」、「情報がアップデートされていない」ことがあります。この本もタイトルに書いてあるようにoffice 2003で、情報がしっくりこない部分があるかもしれません。ですので、がっつり学びたい方には、物足りないでしょう。

2.アウトルック連携を含めた外部アプリケーション連携をマスターしたいなら

アウトルックとの連携を学ぶなら、エクセルからアウトルックなどの外部アプリとの連携について、マスターすることをオススメします。そうすることで、アウトルック連携が本当に意味で理解できるようになります。さらに、パワポ、ワード、ファイル操作、フォルダ操作までカンタンに応用できるようになります。

outlook、パワポ、ワード、ファイル操作、フォルダ操作は一見異なるように見えますが、原理原則は同じです。ですので、もし学ぶなら、原理原則の部分を学び、すべてに応用できるようになることをオススメします。

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

3.アウトルック連携より、エクセルマクロの基礎から詳しく学ぶなら

この記事を読んだけど、「私にはまだチンプンカンプン…」、「自分で編集できそうにもない…」、「マクロの基礎も理解していない…」という場合なら、アウトルックとの連携を学ぶ前に、エクセルマクロの基礎から学ぶことをオススメします。エクセルからoutlookを操作するマクロは、かなりハイレベルの内容です。土台ができていない内に学ぶと、挫折の原因になってしまいます。ですので、まずは基本を学びましょう。

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

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

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

www.fastclassinfo.com

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

www.fastclassinfo.com

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

www.fastclassinfo.com