LoginSignup
1
2

More than 5 years have passed since last update.

OutLook VBA 二重にフィルタをかける方法

Posted at
MailItemDblFilter.BAS
Public Sub MailItemDblFilter()
    Dim myNamespace As Outlook.NameSpace
    Dim myContacts As Outlook.Items
    Dim myItems As Outlook.Items
    Dim myItem As Outlook.MailItem
    Dim myitems2 As Outlook.Items
    Set myNamespace = Application.GetNamespace("MAPI")
    Set myContacts = myNamespace.GetDefaultFolder(olFolderInbox).Items
    Set myItems = myContacts.Restrict("[ReceivedTime] >= '01/16/2017' AND [ReceivedTime] < '03/18/2017'")
For Each myItem In myItems
    If (myItem.Class = olmail) Then
    If myItem.Subject Like "*ない*" Then
            Debug.Print myItem.Subject & ": " & myItem.ReceivedTime & ":" & myItem.Sender & ":" & myItem.Recipients.Item(1).Address
    End If
    End If
Next
End Sub

今回のVBAは

OUTLOOK用のメールに複数の条件をかけるというプログラムです。
今回はDebug.Printでタイトルなどを抜き出していますが、msg形式で保存するようにするといいと思います。
選択したメッセージを MSG ファイルまたは RTF ファイルとして保存するマクロ

どういう時に使うか

たとえば自分をA、相手をBとして「この2か月間のやり取りだけ保存したい」という時があると思います。
そういう時にこれをMSg保存にすると自動的に保存できます。

Restrictに二重フィルタがかからない

今回苦労したのはどうやってもRestrictに二重に条件を付けることができないことでした。
そこで、日付だけぬきだし、IF文で条件をかけて絞り込むという方法で性交しました。

Restrictで抜き出すとMailItemではない

見る人が見るとわかりますが、受信フォルダのアイテムは通常MailItemになるはずなんです。
ところが、Myitem.Classにすると
If (myItem.Class = olmail) Then
でわかるようにolMailになります。
ここを別のプロパティにするとさらに三重のフィルタがかけられます。
またLikeも使えます。ワイルドカード文字は* アスタリスク
です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2