受信したメールの本文を 1 行ごとに処理するマクロ


決まった件名のメッセージを受信したら、データを CSV ファイルに保存するマクロのコメントにて以下のご要望をいただきました。


度々申し訳ございません。メールの本文を1行毎に処理するというのは可能でしょうか。

メール本文が何行あるかは定まってなく、
任意の文字列1
任意の文字列2
任意の文字列3

といった内容のメールが来た時、
任意の文字列1がXXで終わってたらXXの前N文字を取得してCSVに書き出し、
無ければ任意の文字列1を全てCSVに書き出すという処理を、
メール本文終わりまで行いたいです。


プログラミングにおいて「行」というのは改行コード (キャラクタ コード 13 および 10 ) で終わる一連の文字列となります。
そのため、本文を Split 関数で改行コードにより分割し、分割された文字列に対して必要な処理を行うことで、1 行ずつの処理ができます。
マクロは以下のようになります。
XX や N は冒頭の Const  で指定してください。

' ここをトリプルクリックでマクロ全体を選択できます。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
     Const XX = "XX"
     Const N = 5
     Const CSV_FILE = "c:\temp\report.csv"
     Dim objItem As Object
     Dim arrLine As Variant
     Dim strLine As String
     Dim i As Integer
     '
     Set objItem = Session.GetItemFromID(EntryIDCollection)
     If objItem.MessageClass = "IPM.Note" Then
         ' CSV ファイルを追記モードで開く
         Open CSV_FILE For Append As #1
         ' 本文を改行コードで行に分割
         arrLine = Split(objItem.Body, vbCrLf)
         For i = LBound(arrLine) To UBound(arrLine)
             strLine = arrLine(i)
             ' 行が指定のキーワードで終わるか確認
             If strLine Like "*" & XX Then
                 ' 行が指定のキーワードより前に文字列を含むかチェック
                 If Len(strLine) > Len(XX) Then
                     ' 行末の指定のキーワードを削除
                      strLine = Left(strLine, Len(strLine) - Len(XX))
                     ' 残りが N 以上か確認
                     If Len(strLine) >= N Then
                         ' N 文字だけ抜き出す
                          strLine = Mid(strLine, Len(strLine) - N + 1)
                     End If
                 End If
             End If
             If Len(strLine) > 0 Then
                 ' 取得した行を CSV ファイルに書き出す
                 Print #1, strLine
             End If
         Next
         Close #1
     End If
End Sub

マクロの登録方法やメニューへの追加について

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中