Items.Restrictリストリクト メソッド

本ページには広告が含まれています。

Items コレクションにフィルタをかけ、一致するアイテムのコレクションを返します。

条件式はJetクエリまたはDASLクエリで記述します。

コレクションにフィルタをかけるメソッドとしてItems.Restrict メソッドもありますが、違いは検索速度くらいで検索対象のアイテムが少ないときに使います。検索対象のアイテムが多いときはItems.Restrict メソッドを使うと良いです。

構文
  1. Items = Items.Restrict( Filter )
引数
Filter 省略可
適用するフィルター文字列式
戻り値
Items コレクションにフィルターを適用し、フィルターに一致するアイテムを含む新しいItems コレクションを返します。

Items オブジェクトを返すメソッド・プロパティ

Items.Restrict メソッド
Items コレクションにフィルタを適用し、フィルタに一致する元のすべてのアイテムを含む新しいItems コレクションを返します。

フィルタ

Jetクエリ

Outlook 2003以前のバージョンで使用されていたフィルタ式の記述方法で、AccessのJetデータベースエンジンと同じ構文を使用しています。

Jetクエリで使えるカラム([ ]で囲まれた名前)はMailItem オブジェクトのプロパティと同じと考えて大丈夫だと思います。

フィルタ説明
[BCC]ブラインド・カーボン・コピー(Blind Carbon Copy)
[CC]カーボン・コピー(Carbon Copy)
[Importance]重要度。0:低、1:標準、2:高。
[LastModificationTime]最終更新日時。日時の形式を参照。
[ReceivedTime]受信日時。日時の形式を参照。
[SenderEmailAddress]送信元アドレス
[SenderName]送信者名
[SentOn]送信日時
[Size]メールのサイズ、バイト(Byte)単位。
[Subject]件名
[To]宛先
[UnRead]メールの未既読を指定。TRUEなら未読、FALSEなら既読。
重要度(Importance)

重要度で絞り込みます。

UWSC
Items = Items.Restrict("[Importance] = 0")        // 低
Items = Items.Restrict("[Importance] = 1")        // 標準
Items = Items.Restrict("[Importance] = 2")        // 高
Items = Items.Restrict("[Importance] <= 1")    // 低~標準
受信日時(ReceivedTime)

受信日時で絞り込みます。以下は受信日が2023/05/01のメール。[ReceivedTime]は日時情報も含んでいて日時と日付の比較ではマッチしないので、以下のように範囲で指定します。

UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01' AND [ReceivedTime] < '2023/05/02'")
UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 0:00' AND [ReceivedTime] < '2023/05/02 0:00'")

受信日時で絞り込みます。以下は受信日時が2023/05/08 09:00:002023/05/08 09:59:59のメール。

UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/08 09:00 PM' AND [ReceivedTime] < '2023/05/08 10:00 PM'")

受信日時は分単位でしか指定できないため、秒単位で絞ることはできず範囲で絞るしかありません。以下は2023/05/08 21:15:002023/05/08 21:15:59に受信したメール。

UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/08 09:15 PM' AND [ReceivedTime] < '2023/05/08 09:16 PM'")
送信者アドレス(SenderEmailAddress)

送信者アドレスで絞り込みます。以下は送信者アドレスがinfo@example.comのメール。

UWSC
Items = Items.Restrict("[SenderEmailAddress] = 'info@example.com'")
送信者名(SenderName)

送信者名が空欄ではないメール。

UWSC
Items = Items.Restrict("[SenderName] <> ''")
件名(Subject)

件名キーワードに一致するメール。

UWSC
Items = Items.Restrict("[Subject] = 'キーワード'")
サイズ(Size)

サイズで絞り込みます。以下はサイズが5000バイト以上のメール

UWSC
Items = Items.Restrict("[Size] >= 5000")

サイズが10005000バイトのメール。

UWSC
Items = Items.Restrict("[Size] >= 1000 AND [Size] <= 5000")
宛先(To)

宛先info@example.comのメール。

UWSC
Items = Items.Restrict("[To] = 'info@example.com'")
未既読(UnRead)

未読のメール。

UWSC
Items = Items.Restrict("[UnRead] = TRUE")

既読のメール。

UWSC
Items = Items.Restrict("[UnRead] = FALSE")
複数条件

複数の条件を指定する場合は条件を論理演算子(ANDOR)で繋げます。

UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/09' AND [ReceivedTime] < '2023/05/10'")

DASLクエリ

Outlook 2007以降のバージョンで導入されたフィルタ式の記述方法で、SQLに似た構文を使用しています。

UWSC
@SQL = 名前空間:プロパティ名 = 値
@SQL = 名前空間#フィールド名 = 値
@SQL = 名前空間#フィールド名 = 値1;値2;値3;
@SQL = 名前空間:プロパティ LIKE '%文字列%'
@SQL = 名前空間:プロパティ LIKE '%文字列'
@SQL = 名前空間:プロパティ名 IS NULL
urn:schemas:httpmail: Namespace | Microsoft Learn
名前空間
urn:schemas:httpmail
プロパティ名 説明
attachmentfilename
bccBCC
calendar
contacts
content-disposition-type
content-media-type
date
datereceived受信日時
deleteditems
displaybcc
displaycc
displayto
drafts
expiry-date
flagcompleted
from
fromemail送信元アドレス
fromname
hasattachment添付ファイル
True:あり、False:なし
htmldescription
importance重要度
0:低、1:標準、2:高
inbox
journal
messageflag
msgfolderroot
normalizedsubject
notes
outbox
priority
read未既読。0:未読、1:既読
reply-by
reply-to
savedestination
saveinsent
sendmsg
sender
senderemail
sendername
sentitems
subject件名
submitted
tasks
textdescription本文
thread-topic
to
unreadcount
urn:schemas-microsoft-com:office:office Keywords 分類項目
重要度(Importance)

重要度標準のメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:importance=1")
受信日時(datereceived)

受信日2023/05/01のメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:datereceived >= '2023/05/01'")

受信日が今日のメール。

UWSC
Items = Items.Restrict("@SQL=%today(urn:schemas:httpmail:datereceived)%")

受信日が昨日のメール。

UWSC
Items = Items.Restrict("@SQL=%yesterday(urn:schemas:httpmail:datereceived)%")

受信日が今週のメール。

UWSC
Items = Items.Restrict("@SQL= %thisweek(urn:schemas:httpmail:datereceived)%")

受信日が先週のメール。

UWSC
Items = Items.Restrict("@SQL= %lastweek(urn:schemas:httpmail:datereceived)%")

受信日が今月のメール。

UWSC
Items = Items.Restrict("@SQL=%thismonth(urn:schemas:httpmail:datereceived)%")

受信日が先月のメール。

UWSC
Items = Items.Restrict("@SQL=%lastmonth(urn:schemas:httpmail:datereceived)%")

SQLで複数の条件を指定する場合は、Restrictメソッドを繰り返し実行します。以下は受信日時が今日で件名重要を含むメール。

UWSC
Items = Items.Restrict("@SQL=%today(urn:schemas:httpmail:datereceived)%")
Items = Items.Restrict("@SQL=urn:schemas:httpmail:subject LIKE '%重要%'")
件名(Subject)

件名重要で始まるメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:subject LIKE '重要%'")

件名重要を含むメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:subject LIKE '%重要%'")

件名RE:で始まるメール。大文字小文字の区別はなし。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:subject like 'RE:%'")

件名FW:で始まるメール。大文字小文字の区別はなし。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:subject like 'FW:%'")
カテゴリ(Categories)

カテゴリがついていないメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:categories like ''")
添付ファイル

添付ファイルがあるメール。

UWSC
Items = Items.Restrict("@SQL= urn:schemas:httpmail:hasattachment=True")

添付ファイルがないメール。

UWSC
Items = Items.Restrict("@SQL= urn:schemas:httpmail:hasattachment=False")
送信元アドレス(fromemail)

送信元アドレス@docomo.ne.jpを含むメール。後方一致ができないので部分一致で行っています。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:fromemail LIKE '%@docomo.ne.jp%'")
複数条件

受信日時2023/05/01のメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:datereceived>='2023/05/01' AND urn:schemas:httpmail:datereceived<'2023/05/02'")

受信日時2023/01/01以降で添付ファイルがあるメール。

UWSC
Items = Items.Restrict("@SQL=urn:schemas:httpmail:datereceived>='2023/01/01' AND urn:schemas:httpmail:hasattachment=True")

日時の形式

以下の形式の組み合わせで記述することができます。時刻区分(午前/午後)を指定しなかった場合、時刻は24時間表記となります。

  • <日付>
  • <日付> <時刻>
  • <日付> <時刻><時刻区分>
  • <日付> <時刻> <時刻区分>
  • <日付> <時刻区分><時刻>
  • <日付> <時刻区分> <時刻>
  • <時刻区分><時刻> <日付>
  • <時刻区分> <時刻> <日付>
UWSC
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01'")
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 12:00'")
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 05:00AM'")
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 05:00 AM'")
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 AM05:00'")
Items = Items.Restrict("[ReceivedTime] >= '2023/05/01 AM 05:00'")
Items = Items.Restrict("[ReceivedTime] >= 'AM05:00 2023/05/01'")
Items = Items.Restrict("[ReceivedTime] >= 'AM 05:00 2023/05/01'")

日付の形式

  • YYYY/MM/DD
  • MM/DD/YYYY
  • YYYY/M/D
  • M/D/YYYY
  • YYYY年MM月DD日
  • MM月DD日YYYY年

時刻の形式

  • HH:MM
  • H:M

時刻区分

  • 午前/午後
  • AM/PM
  • A/P

AM0:00AM12:00は24時間表記の0:00PM0:00PM12:00は24時間表記の12:00を指します。

時刻を24時間表記で記述した場合、時刻区分は記述しても無視されます。

以下はどちらも2023/05/10 13:00を指します。

UWSC
2023/05/10 13:00 AM 
2023/05/10 13:00 PM

LIKE句

列(カラム)に対して文字列検索を行うことができます。

クエリ説明
LIKE '<文字列>'完全一致
LIKE '<文字列>%'前方一致
LIKE '%<文字列>%'文字列を含む

比較演算子・論理演算子

演算子意味
a = baとbが等しい
a < baがb未満より小さい
a <= baがb以下
a > baがbより大きい
a >= baがb以上
a <> baとbが等しくない
a AND baかつb
a OR baまたはb
IS NULL否定

フィルタにかけたメールの件数を求めるにはItems.Restrict メソッドを使います。以下は未読メールの件数を取得します。

UWSC
DIM Items = Folder.Items.Restrict("[UnRead] = TRUE")
PRINT Items.Count

ここにはない演算子を使って条件を指定する場合は、MailItemでループするときにIF文を使います。

以下は受信日時が2022/01/012022/01/31の範囲で、件名に重要を含むメールを抽出する例。

UWSC
Items = Items.Restrict("[ReceivedTime] >= '2022/01/01' AND [ReceivedTime] <= '2022/01/31'")

FOR MailItem IN Items
	IFB POS("重要", MailItem.Subject) <> 0 THEN
		
	ENDIF
NEXT

プログラム実行例

指定期間に受信したメールを取得(Outlook)

UWSC
CONST olFolderInbox = 6

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2022/01/01"
DIM end = "2022/01/31"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] < '" + end + "'")

FOR MailItem IN Items
	WITH MailItem
		PRINT "受信日時:<#TAB>" + .ReceivedTime
		PRINT "件名:<#TAB><#TAB>" + .Subject
		PRINT "----------"
	ENDWITH
NEXT
使用関数

指定期間のメール情報を取得(Outlook)

UWSC
CONST olFolderInbox = 6
CONST xlTop = -4160
CONST xlLeft = -4131

DIM Excel = ExcelBoot()

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2021/01/01"
DIM end = "2021/01/02"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] < '" + end + "'")

DIM array[][1] = "受信日時", "ReceivedTime", + _
					"送信者メールアドレス", "SenderEmailAddress", + _
					"送信者", "SenderName", + _
					"CC", "CC", + _
					"BCC", "BCC", + _
					"件名", "Subject", + _
					"本文", "Body", + _
					"HTML本文", "HTMLBody"

Excel.Application.ScreenUpdating = FALSE

FOR i = 0 TO UBound(array)
	Excel.Cells(1, i + 1).Value = array[i][0]
NEXT

DIM row = 2

FOR MailItem IN Items
	FUKIDASI(row + "/" + Items.Count)
	WITH MailItem
		FOR i = 0 TO UBound(array)
			Excel.Cells(row, i + 1).Value = EVAL("." + array[i][1])
		NEXT
	ENDWITH
	row = row + 1
NEXT

WITH Excel.Range("A1").CurrentRegion
	.ColumnWidth = 20
	.RowHeight = 30
	.VerticalAlignment = xlTop
	.HorizontalAlignment = xlLeft
ENDWITH

Excel.Application.ScreenUpdating = TRUE
使用関数

指定期間に受信したメールからURLを抽出(Outlook)

UWSC
HASHTBL url = HASH_SORT

CONST olFolderInbox = 6

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2021/01/01"
DIM end = "2021/01/07"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] <= '" + end + "'")

DIM row = 1

FOR MailItem IN Items
	FUKIDASI(row + "/" + Items.Count)
	DIM Matches = reExecute(MailItem.Body, "https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?")
	FOR Match IN Matches
		url[Match.Value] = url[Match.Value] + 1
	NEXT
	row = row + 1
NEXT

FOR i = 0 TO LENGTH(url) - 1
	FUKIDASI(i + "/" + (LENGTH(url) - 1))
	PRINT url[i, HASH_KEY]
NEXT
使用関数
解説

指定期間に受信したメールの添付ファイルをすべて保存(Outlook)

UWSC
CONST olFolderInbox = 6

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2021/01/01"
DIM end = "2021/01/31"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] <= '" + end + "'")

DIM folderspec = "D:\Desktop\Outlook\"
CreateFolders(folderspec)

DIM row = 1

FOR MailItem IN Items
	FUKIDASI(row + "/" + Items.Count)
	FOR i = 1 TO MailItem.Attachments.Count
		DIM Attachment = MailItem.Attachments.Item(i)
		DIM path = folderspec + Attachment
		path = uniqueFilename(path)
		Attachment.SaveAsFile(path)
		PRINT path
	NEXT
	row = row + 1
NEXT
使用関数
解説

指定期間のメールを日毎に集計(Outlook)

UWSC
CONST olFolderIndex = 6

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderIndex)
DIM Items = Folder.Items

Items = Items.Restrict("[ReceivedTime] >= '2020/12/01' AND [ReceivedTime] < '2020/12/31'")

HASHTBL dates = HASH_SORT

FOR MailItem IN Items
	DIM datetime = MailItem.ReceivedTime
	GETTIME(0, datetime)
	DIM date = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
	dates[date] = dates[date] + 1 
NEXT

FOR i = 0 TO LENGTH(dates) - 1
	PRINT dates[i, HASH_KEY] + "<#TAB>" + dates[i, HASH_VAL]
NEXT
結果
プレーンテキスト
2020/12/05	78
2020/12/06	60
2020/12/07	72
2020/12/08	82
2020/12/09	75
2020/12/10	91
2020/12/11	82
2020/12/12	77
2020/12/13	63
2020/12/14	71
2020/12/15	104
2020/12/16	84
2020/12/17	80
2020/12/18	93
2020/12/19	78
2020/12/20	66
2020/12/21	67
2020/12/22	75
2020/12/23	82
2020/12/24	73
2020/12/25	87
2020/12/26	73
2020/12/27	56
2020/12/28	65
2020/12/29	69
2020/12/30	44
2020/12/31	1
使用関数

過去7日間に受信した迷惑メールの受信日時とメールアドレスを取得

UWSC
DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folders = NameSpace.Folders("Yahoo!_新").Folders("迷惑メール")
DIM startDate = dateAdd("d", -7, today())
DIM endDate = dateAdd("d", -1, today())
DIM Items = Folders.Items.Restrict("[ReceivedTime] >= '" + startDate + "' AND [ReceivedTime] < '" + endDate + "'")
DIM count = Items.Count

Items.Sort("受信日時")

FOR Index = 1 TO count
	WITH Items.Item(Index)
		PRINT .ReceivedTime + "<#TAB>" + .SenderEmailAddress
	ENDWITH
NEXT
使用関数
解説

未読メールの本文からURLを抽出

UWSC
DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.Folders("Android_新").Folders("受信トレイ")
DIM Items = Folder.Items.Restrict("[UnRead] = TRUE")

Items.Sort("受信日時", TRUE)

// クリックするURLを格納した配列(部分一致)
DIM urls[] = "://example.com"

DIM driver = CREATEOLEOBJ("Selenium.WebDriver")
WebDriverDownload.Chrome()

// ログイン情報を保存
CONST PROFILE_PATH = "C:\Users\" + BETWEENSTR(DOSCMD("SET"), "USERNAME=", "<#CR>") + "\AppData\Local\Google\Chrome\User Data\Default"
driver.AddArgument("user-data-dir=" + PROFILE_PATH)
driver.Start("chrome")

DIM count = Items.Count

FOR Index = count TO 1 STEP -1
	WITH Items.Item(Index)
		FUKIDASI(Index + "<#TAB>" + .SenderEmailAddress + "<#TAB>" + .ReceivedTime)
		DIM Matches = reExecute(.Body, "https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?")
		// メール本文のURLをループ
		FOR Match IN Matches
			// クリックするURLをチェック
			FOR i = 0 TO UBound(urls)
				IF POS(urls[i], Match.Value) = 0 THEN CONTINUE
				driver.Get(Match.Value)		// リンクを開く
			NEXT
		NEXT
		SLEEP(1.000)
	ENDWITH
NEXT
使用関数

参考文献

  1. Items.Restrict メソッド (Outlook) | Microsoft Learn
  2. https://platform.kobot.jp/support/solutions/articles/47001150388-outlook%E3%83%A1%E3%83%BC%E3%83%AB%E5%8F%96%E5%BE%97%E6%99%82%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
  3. https://vicugna-pacos.github.io/vba/outlook/search-and-filter/
  4. Get Outlook Mail activity Filter with From AND Subject - Help - UiPath Community Forum
  5. Compoze Software API Documentation: Class HttpMailProperty

関連記事

MailItem オブジェクト
メールメッセージを表します。
MailItem.Attachments プロパティ (Outlook)
メールに添付されているすべての添付ファイルを表すOutlook.Restrictを返します。
MailItem.BodyFormat プロパティ (Outlook)
メール本文の形式を表すOlBodyFormatクラスの定数を取得または設定します。
MailItem.To プロパティ (Outlook)
Outlook アイテムの宛先の受信者の表示名一覧を表す、セミコロン(;)で区切られた文字列型(String) の一覧を設定します。
MailItem.HTMLBody プロパティ (Outlook)
メールのHTML形式の本文を表す文字列型の値を取得または設定します。
MailItem.Parent プロパティ (Outlook)
指定したオブジェクトの親オブジェクトを返します。
MailItem.ReceivedTime プロパティ (Outlook)
アイテムを受信した日付と時刻を示す日付型(Date)の値を取得します。
CDO.From プロパティ
メッセージの差出人(From)を指定します。
AppointmentItem オブジェクト
新しい予定を表すAppointmentItemオブジェクトを作成します。
Folder オブジェクト