メールの内容を Excel ファイルにかき出すマクロのコメントにて以下のようなご要望をいただきました。
質問なのですが指定フォルダ(下書きフォルダ)にあるすべてのメールを上記のようにデータ化はできないのでしょうか?
いろいろやってみましたがわかりません可能であればデータ取得後にmgsファイルをファイルネームの頭に連番を付けたうえでcドライブ下のフォルダに入れたいです
よろしくお願いします
もちろん、フォルダーのアイテムをすべて取得するようにすることも可能です。
以下は、現在開いているフォルダーにあるすべてのメールの情報を Excel ファイルに書き出し、さらに c:\temp に msg ファイルとして保存するマクロです。
' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub ExportToExcelAndMSG()
Const EXCEL_FILE = "c:\temp\リスト.xlsx"
Const MSG_FILE_BASE = "c:\temp\メール No."
Dim fldCurrent As Folder
Dim objItem As MailItem
Dim objBook 'As Excel.Workbook
Dim objSheet 'As Excel.Worksheet
Dim r As Integer
Dim c As Integer
' 現在開いているフォルダーを取得
Set fldCurrent = ActiveExplorer.CurrentFolder
' Excel ファイルを開く
Set objBook = GetObject(EXCEL_FILE)
objBook.Windows(1).Activate
Set objSheet = objBook.Sheets(1)
' データがない行まで移動
r = 2
While objSheet.Cells(r, 1) <> ""
r = r + 1
Wend
c = 1
' メールの情報を Excel ファイルに追記
For Each objItem In fldCurrent.Items
With objSheet
.Cells(r, 1) = objItem.To
.Cells(r, 2) = objItem.CC
.Cells(r, 3) = objItem.Subject
.Cells(r, 4) = objItem.Body
.Cells(r, 5) = objItem.SenderName
End With
objItem.SaveAs MSG_FILE_BASE & c & ".msg", olMSGUnicode
r = r + 1
c = c + 1
Next
' Excel ファイルを閉じる
objBook.Close True
MsgBox fldCurrent.Name & "のアイテムを保存しました。"
End Sub
まったくのマクロ初心者ですが、こちらのサイトを拝見しながらなんとか取り組んでいるところです。いつもありがとうございます。
さて、上記の「フォルダー内のすべてのメールの内容をExcelファイルに書き出し、さらにMSGファイルとして保存するマクロ」についてなのですが、保存はされるのですが、昇順(日時)にどうしてもなりません。昇順になるように指示することはできますか。
Excelに書き出される順番にMSGファイルも書き出されており、順不同のような感じです。エクスポート時にOutlookでは昇順になっていることを確認しています。また、メッセージではなく、「予定表」などが混じっているせいかと思い、削除して試してみましたが同じでした。
どうも見当違いなところを見ている気がするのですが、アドバイスいただけると大変助かります。
For Each objItem In fldCurrent.Items
を
Set colItems = fldCurrent.Items
colItems.Sort “受信日時”
For Each objItem in colItems
としてみてください。
[…] 特定のフォルダーのすべてのメールを msg ファイルとして保存し、Excel に一覧化するマクロは、「フォルダー内のすべてのメールの内容を Excel ファイルに書き出し、さらに…」として公開しています。今回はこのマクロに期間を指定するコードを追加しました。マクロの実行時に期間を指定するには InputBox 関数により日付を入力します。そして、その期間のアイテムだけを取得するには Items オブジェクトの Restrict メソッドを使用します。マクロは以下のようになります。 […]