Outlook でフォルダーに含まれる多数の EML ファイルを一括インポートする方法


以前掲載した「Windows 7 上の Outlook で多数の EML ファイルを一括インポートする方法」のコメントにて以下のご要望をいただきました。


こんにちわ
1のicchoさんの操作をマクロ化できないでしょうか。
つまり、
取り込み元のフォルダ’A’とをOutlook上の移動ファルダ’B’を指定
Aのemlファイルを開く→[ファイル]-[フォルダーへ移動]→Bのフォルダを選択
以下、Aのファイルに対して繰り返し実行。

Excelマクロならわかるのですが、Outlookのマクロはまだ習得していないので、私にはかなりハードルが高くて作ることが出来ません。
会社でメールソフトがOutlook2010に変わったため、過去メールを扱いにちょっと困っています。
もし、こちらで公開していただけると助かります。


このコメントにある、icchoさんの操作というのは以下の通りです。


1.とても参考になりましたが、私の環境(Win7, Outlook2010)では2回目のNo.5で「0件」になってしまいました。
ですが、emlファイルをダブルクリックで開いて、ファイル→フォルダーへ移動→フォルダへコピーで、1件ずつ取り込むことができました。(面倒ですが)

コメント by iccho — 2012年12月12日


元記事のインポート方法は Windows Mail のコンポーネントを強引に使っているため、環境などによってはうまく動作しないようです。
そのため、eml ファイルを開いて移動という操作をスクリプト化してみました。
これも、手作業の操作をスクリプト化しているため、インポートするアイテムが表示されてしまいますが、これを表示させないようなことはできませんのでご了承ください。
また、スクリプトの実行中に PC の操作を行うと予期しない動作をする可能性があります。
以下のスクリプトをメモ帳などで拡張子を .vbs として保存して実行してください。

' ここをトリプルクリックでスクリプト全体を選択できます。
Const IMPORT_FOLDER = "C:\Users\UserName\Documents" ' EML ファイルがあるフォルダーを指定
Const olFolderInbox = 6
Dim olkApp
Dim fldImport
Dim wshShell
Dim objFSO
Dim objFolder
Dim objFile
Set olkApp = CreateObject("Outlook.Application")
Set fldImport = olkApp.Session.GetDefaultFolder(olFolderInbox)
fldImport.Display
Set wshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(IMPORT_FOLDER)
' IMPORT_FOLDER で指定されたフォルダーのファイルを取得
For Each objFile In objFolder.Files
    If LCase(Right(objFile.Name,4)) = ".eml" Then
        ' 拡張子が .eml ならインポート処理
        OpenEml objFile.Name
    End If
Next
olkApp.ActiveExplorer.Close
MsgBox "インポートは終了しました。", vbOKOnly, "EML ファイル インポート"
' eml ファイルを開いてインポートするルーチン
Sub OpenEml( strFileName )
    On Error Resume Next
    Dim objCopied
    ' メールが開いていたら閉じる
    While Not olkApp.ActiveInspector Is Nothing
        olkApp.ActiveInspector.Close
        WScript.Sleep 1000
    Wend
    ' eml ファイルを Outlook で開くコマンドを実行
    wshShell.Run "outlook /eml """ & IMPORT_FOLDER & "\" & strFileName & """"
    ' 上記のコマンドで Outlook が起動するのを待つ
    While olkApp.ActiveInspector Is Nothing
        WScript.Sleep 1000
    Wend
    ' 開いたファイルを受信トレイに移動
    olkApp.ActiveInspector.CurrentItem.Move fldImport
    olkApp.ActiveInspector.Close
End Sub

なお、受信トレイにインポートするのではなく、たとえば受信トレイの下の「インポート」というフォルダーにインポートする場合は、Set fldImport = olkApp.Session.GetDefaultFolder(olFolderInbox) の次に以下の1行を追加します。

Set fldImport = fldImport.Folders("インポート")

広告

Outlook でフォルダーに含まれる多数の EML ファイルを一括インポートする方法」への1件のフィードバック

  1. ピンバックさん
    マクロの公開をお願いした「匿名」です。

    コメントをいただき、ありがとうございます!
    出来ました!!
    とても興奮しています!!!

    既存のOutlookのメールデータとは別にしたかったので、

    EMLデータフォルダ:C:\Users\UserName\Documents\eml
    移動メールフォルダ:受信トレイ\insert

    としました。
    複数のフォルダに分かれたメールデータがあったので、ひとつずつemlフォルダに移動し、マクロを実行。
    insertフォルダに移動したメールを新しいフォルダに移動。
    というカンジで、きれいにOutlook2010に格納できました。

    ほんと感激です。
    ありがとうございました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中