LoginSignup
4
4

More than 1 year has passed since last update.

【Outlook VBA】メールや予定をフィルターで検索する

Last updated at Posted at 2020-06-23

※この記事の最新版はこちらへ移動しました。

はじめに

VBAを使ってOutlookを操作し、メールや予定の検索を行う際、Items.Find()Items.Restrict()を使用する。このメソッドに指定するフィルター構文について分かった部分をまとめた。

MSドキュメント:https://docs.microsoft.com/ja-jp/office/vba/outlook/how-to/search-and-filter/filtering-items

Outlookのバージョン:Office 365

基礎知識

フィルターに指定できる構文は2つ。Jet構文とDASL構文。
Jet構文の方はSQLのWHERE句のような書き方。ただし前方一致検索がない。
DASL構文には前方一致検索があるが、ci_startswithなどci_で始まる構文が使用できない。「検索操作にコンテンツ インデックス キーワードを使用することはできません。」のエラーになる。

Jet構文で使用できる列名(ぽいもの)は、VBAのMailItemなどのItemオブジェクトのプロパティと同じだと思われる。

文字列のフィルター

Jet構文のサンプル:

  • [Subject]='あいう'
    • 件名が「あいう」に一致する。頭にRE:FW:が付いているものも含まれる。

DASL構文のサンプル:

  • @SQL="urn:schemas:httpmail:subject" = 'あいう'
    • 件名が「あいう」に一致する。頭にRE:などが付いていたら対象外。
  • @SQL="urn:schemas:httpmail:subject" like 'RE:%'
    • 件名が「RE:」で始まる(前方一致)

日付のフィルター

日付の書式は、「yyyy/MM/dd H:mm」。時刻は「HH」でも可。厳密には、Outlookが使っている書式に合わせる。
image.png
時刻までちゃんと指定しないと、[Start] >= '2020/06/10 0:00'としたときに、6月10日0時開始の予定がフィルターに引っかからない。

  • [ReceivedTime] >= '2020/04/15'
    • メールの受信日が2020/04/15以降
  • [Start] >= '2020/06/10 0:00' AND [End] <= '2020/06/30 0:00'
    • 予定の開始日が6/10以降 かつ 終了日が6/30以前

Booleanのフィルター

  • [UnRead] = True
    • メールが未読である
  • [AllDayEvent] = True
    • 予定が「終日」である

列挙型のフィルター

Importance(重要度)などはVBAでは列挙型で指定するが、フィルター構文ではすべて数字へ置き換える。

  • [Importance] = 2
    • 重要度が「高」である

MailItem (メール)

検索に使いそうなプロパティを載せておく。

プロパティ名 説明
Subject 文字 件名
SenderEmailAddress 文字 送信者のメールアドレス
ReceivedTime 日付 受信日時
UnRead Boolean 未読かどうか

AppointmentItem (予定)

プロパティ名 説明
Subject 文字 件名
Start 日付 開始日時
End 日付 終了日時
AllDayEvent Boolean 終日かどうか
Location 文字 場所
4
4
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
4
4