• 締切済み

Outlookのメールの内容を抽出

Outlookのメールを手作業で抜き出しデスクトップ上のフォルダに入れた後、そのフォルダ内のメールの受信日とある文字列以降(工場No: 管理No: 項目No:)の文字列(数字かアルファベット4ケタのコード)を抽出しエクセル上に日付順に出力出来るVBAを組みたいのですが、同じようなVBAが無いか検索して見ましたが参考に出来る(理解出来る)ような情報が無かったため質問させていただいています。 環境は共に2010を使用しています。

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

どのあたりの解説をお望みでしょうか。 フォルダ内のメールを扱う方法でしょうか、メールから情報を抽出するところでしょうか。 フォルダがOutlookのフォルダではなくデスクトップつまりWindowsのファイルシステムのフォルダなので、そのあたりがよくわからないということでしょうか。 とりあえずはそこのところを解説します。 デスクトップのフォルダの中のメールということは、拡張子が.msgのファイルですね。 これをOutlook VBAで開く方法を調べてみたのですが、意外な事にVBAで.msgファイルを開く素直な方法はなさそうで、複数の情報があった方法は以下の2つでした。 1.CreateItemFromTemplate メソッドを使う方法 Outlook.ApplicationのCreateItemFromTemplate メソッドを使います。 この方法はメールを開くのではなく、メールをひな形として新しいメールを作るものです。 そのため、元のファイルに書き戻すことはできませんし、一部取り出せない情報もあるようです。しかし今回の用途にはこれが適していると思われます。 2.Shellから.msgファイルを開く方法 VBAのShell関数などを使ってOUTLOOK.EXEを/fと.msgファイルの2つの引数を与えて実行する方法です。(.msgファイル単体で開く方法もあります) 変更内容を書き戻すならこの方法しかないと思いますが、開いただけではMailItemオブジェクトは得られず、VBAで編集ウィンドウ (Inspector) を探さなければならないので、手順が煩雑なうえ不安定になる可能性があります。今回は書き戻す必要はないと思いますので不採用とします。 以下、デスクトップの"MSGS"というフォルダに.msgファイルが入っているとして、ファイルから受信日時を抽出してアクティブなワークシートのA列に出力するExcel VBAのサンプルコードを示します。 簡単のため、ファイルはすべて.msgファイルであるとし、本文や件名からの情報抽出は省略します。 Sub Sample1() Dim oOL As Object, MI As Object Dim oWShell As Object, oFSO As Object Dim mFs As String Dim RowAdr As Long Dim e As Variant Set oOL = CreateObject("Outlook.Application") Set oWShell = CreateObject("WScript.Shell") Set oFSO = CreateObject("Scripting.FileSystemObject") mFs = oWShell.SpecialFolders("Desktop") & "\MSGS" RowAdr = 1 For Each e In oFSO.getfolder(mFs).Files Set MI = oOL.CreateItemFromTemplate(e.Path) Cells(RowAdr, 1) = MI.ReceivedTime RowAdr = RowAdr + 1 MI.Close 1 'olDiscard Next End Sub ところで、フォルダはデスクトップ上ではなくOutlookのフォルダにしてはいかがでしょうか。もしOutlookのフォルダにすればVBAがもう少し簡単になります。 抜き出したメールが"個人用フォルダ"のサブフォルダ"MSGS"にあるとして例を示します。 Sub Sample2() Dim oOL As Object, NS As Object Dim ExFolder As Object Dim RowAdr As Long Dim e As Variant Set oOL = CreateObject("Outlook.Application") Set NS = oOL.GetNamespace("MAPI") Set ExFolder = NS.Folders("個人用フォルダ").Folders("MSGS") RowAdr = 1 For Each e In ExFolder.Items Cells(RowAdr, 1) = e.ReceivedTime RowAdr = RowAdr + 1 Next End Sub 動作確認はOffice2007, WindowsXPで行いましたが、おそらくOffice2010でも大丈夫だと思います。 疑問点や他の部分の解説希望等ありましたら補足ください。

sinnyatokkyu7
質問者

お礼

 回答ありがとうございます上記のとおり、Windowsのファイルシステムのフォルダから抽出方法がベストですが、調べても出てきませんでした。フォルダからの理由としてOutlookのフォルダから毎日読み込むため抽出データが重複してしまうと思っていたからです。フォルダ指定が出来るのであれば上記のマクロを利用して再度挑戦してみます。

関連するQ&A

  • 特定の桁数を抽出

    教えてください。 エクセルのVBAで、 特定の桁数を抽出するにはどうすれば、よいでしょうか。 イメージは、添付ファイルのC列のようなVBAを作りたい、 と考えています。 条件としては、 (1)先頭~10桁までを抽出 (2)それ以降は削除 (3)文字列にする、 です。 使用ソフトは、EXCEL2010です。 よろしくお願いします。

  • Outlookの迷惑メール抽出はウイルスソフトか

    自営業ですが仕事のメールではOutlook、ウイルスフソトはウイルスバスターを使っています。 Outlookを毎朝開くと、受信したメールの中から迷惑メールが抽出されて自動的に迷惑メールフォルダーに入ります。 このような「受信したメールの中から迷惑メールを抽出して自動的に迷惑メールフォルダーに入れる」という機能は、 (1)Outlookそのものが持っている機能でしょうか?、それとも、 (2)ウイルスソフト(ウイルスバスター)が、受信した迷惑メールを抽出してOutlookの迷惑メールフォルダーの中に入れているのでしょうか?

  • 【Outlook】受信メールアドレスを抽出したい

    こんにちは Outlookで受信したメールの「送信者」のアドレスを抽出する方法が以下に記されていましたが、Outlookで受信したメールの「受信者」のアドレスを抽出したいのですが、SenderMailAddressに対するRecepientMailAddressのようなプロパティが見つけられず、困っています。 http://okwave.jp/qa/q1246445.html できれば、他に「CC」に入っているアドレスを抽出する方法も分かれば、最高です。 どなたか良い方法を教えてください。 (VBA超初心者です)

  • 今日の日付のデータをすばやく抽出するには・・

    売上日報をエクセルで作っています。 A列に1から順にNOを入れています(LOOKUP関数を使うためです) B列に日付を入れています。 C列に社名を入れています。 その他の列にもいろんなデータが入っています。 本日の日付だけをすばやく抽出したいと思うのですが、どうすれいいか分かりません。 オートフィルタで今日の日付を選ぶ方法はやれます。 でも、もっと早く抽出できる方法はないでしょうか? 数ヶ月分のデータが入っているため、オートフィルタの三角をおしたあと、今日の日付を探すのに結構手間取ります。 もっとすばやく抽出したいのです。どんな方法でもいいです。どなたか教えて下さい。

  • Outlook Expressの送信者と受信者の抽出

    Outlook Expressで、送信者と受信者のメールアドレスが出てくるのですが、それの受信フォルダのすべての項目から抽出してエクセルか何かで表示させたいのですが、どういった方法がありますか? ちなみに日付と送信者名、件名の抽出できるソフトはわかったんですが・・・

  • outlookで指定フォルダのメールを日付指定削除

    outlook で指定したフォルダにあるメールを日付選択し、削除済みにいどうするvba を教えてもらえませんか 迷惑なメールを一旦、設定したフォルダに受信トレイからルールにより、指定フォルダに移し、その指定フォルダに残っているメールを日付で自動削除がやりたいことです よろしくお願いします

  • エクセルで日付順で抽出

    エクセルで関数を使用して、別シートから日付順で抽出するのは可能でしょうか? 1.シート1に、会員NO(A列)名前(B列)フリガナ(C列)~…購入チケットの種類(H列)チケットの残数(J列)チケット購入日(K列)チケット期限(L列)~ 2.シート2に、セルB2に会員NOを入力した時に、チケットの購入履歴【購入チケットの種類(A列)チケットの残数(B列)チケット購入日(C列)チケット期限(D列)】を日付順に抽出されるようにしたいです。 宜しくお願い致します。

  • ExcelのVBAからのOutlookメール発信

    ExcelのVBAを使ってOutlookからメールを発信させています。その時のメール本文に付けているハイパーリンクの設定について教えて頂けないでしょうか。 困っている具体的な内容は、メール本文にハイパーリンクをつける際に、文字数が多いとOutlook側で文字列が折り返えされてしまい、ハイパーリンクが機能しない、というものです。 実際のリンク先のアドレスではなく、例えば「関連データ」の様な決った文字列をExcelのVBAを使ってメール本文にハイパーリンクとして表示させる方法を教えて頂けないでしょうか。 (Outlook側の折り返し文字数の設定で文字数を増やす方法では、使用者毎に設定しなければならないと思うので上記方法を教えて頂けないでしょうか。) 宜しくお願いします。

  • EXCELでの抽出なのですが…

    各工場における製品精度が順不同で±0.00%という形で列に入力されています。 この時、 (1)各工場ごとの最小精度(0%に最も近い精度) (2)各工場ごとの最大精度(0%から最も遠い精度) の抽出方法をお教え下さい。 悩んでいるところは、 「絶対値で比較→実際の%を抽出」です。 どなたかご存じの方、よろしくお願いします。

  • メール添付の内容を別のEXCELに自動転記したい。

    1)VBAをこれから学ぶレベルですが、日々メールで送られてくるPDFまたはExcelの特定の内容(納期)を別のExcelに転記するのをVBAで自動化したいのですが、可能でしょうか。 (1)PDFの参照欄=英数字、EXCELの参照欄=日付(dd.yy.mm) (2)別のExcelは基幹ソフトから抽出(セルおよび列内に文字・数字が混じっている) (3)納期の変更が分かるように、特定の検査値の新しい列に10分毎、1日2回など定期的に転記されるようにする。また変更された日付を色別し、遅延は赤、前倒しは青とする。 2)メール添付のPDFの内容を読み取り、その内容の特定の名前のフォルダ(複数、増加する)に保存することもVBAで自動化したいと考えています。 説明内容が不十分の場合はご指摘ください。 すべて手作業には限界があるのて少しでも簡略化したいのですが、大変困っています。 初心者でもわかるようにご教示いただけたら幸いです。

専門家に質問してみよう