はじめに
ごきげんよう、百合宮桜(Miyu)です(*'▽')
Power Automate で SharePoint Lists の日時列をキーにして、フィルタリングしたいということがあります。日時のデータの扱いは意外と難しく、開発が難航しがちなので簡単にまとめておきます。
本記事では以下の SharePoint Lists から InputTime 列の値をフィルタリングする例を基に解説します。
✅フィルタリングの前に知っておいてほしいコト
フィルタリングで利用する列名は内部列名
SharePoint Lists でのフィルタリングは 内部列名 でフィルタする列を指定した フィルタクエリ を書くことで実現できます。
内部列名って何? どうやって確認するの? という方は以下をご覧ください。
データソースによって日時データの保存形式は異なる
SharePoint Lists をはじめとするデータソース(データの保管場所)では表示されている日時と内部で保存されている日時が異なるということがあります。なんでそんなことが起きるのか?という理由については以下にまとめてありますので、合わせてご確認ください。
フィルタリングするためには 内部で保存されている日時 にフィルタしたい値を合わせる処理が必要です。
SharePoint Lists の場合は UTC(世界協定時)で日時データが保存されています。その為、InputTime 列=日本時間の2026年03月30日13時00分のものを抽出したい場合、日本時間の2026年03月30日13時00分 を UTC(世界協定時)に変換するという作業が必要です。
キー値の考え方
日時でのフィルタリングは以下の順で考えると分かりやすいです。
- 日本時間で どの日時・どの範囲を取得したいか を決める
- 1で決めた値を UTC(世界協定時) に変換する
- 2の値 を利用してフィルタクエリを書く
📜フィルタクエリの書き方
演算子について
フィルタクエリでは ○○ 以上や ○○ 以下という条件式を記述する際に 演算子 というものを利用します。
条件の演算子として以下があります。
| 演算子 | 意味 |
|---|---|
| eq | 等しい(Equal) |
| ne | 等しくない(Not Equal) |
| ge | 以上(Greater Equal) |
| gt | より大きい(Greater Than) |
| le | 以下(Less Equal) |
| lt | より小さい / 未満(Less Than) |
演算子は英語の略称( eq なら Equal の略)になっていることが多いので、英語での意味も合わせて覚えると、覚えやすいです。
この他に複数の条件を組み合わせる時に利用する演算子として以下があります。
| 演算子 | 意味 |
|---|---|
| or | または |
| and | かつ |
単一条件の書き方
単一条件でのフィルタクエリの書き方のルールは以下の通りです。
列の内部列名 演算子 フィルタリングしたい値
複数条件の書き方
複数条件の式は以下のように単一条件の式を and か or で繋ぐ形で複数条件を記述します。
列の内部列名 演算子 フィルタリングしたい値 and 列の内部列名 演算子 フィルタリングしたい値
🤔ユースケース
決まった日時でフィルタしたい
InputTime 列=日本時間の2026年03月30日13時00分 のデータだけにフィルタリングしたいというケースです。UTC と日本の時差は +9時間なので、13時-9時間で 2026年03月30日午前04時00分が日本時間の13時にあたります。
ということで InputTIme列=日本時間2026年03月30日13時00分 に絞り込む場合の式は以下の通りです。
InputTime eq '2026-03-30T04:00:00Z'
日時の表示形式はいくつか種類がありますが、データソースの表示形式に合わせないとフィルタリングできません。ご注意ください(´・ω・`)
○時~○時の間でのフィルタリング
10時~17時までの間というフィルタリングをしたい場合は、複数の条件式を and か or で繋いで絞り込むことになります。今回の場合は、InputTime 列が「日本時間の2026年03月30日の10時以上 かつ 17時未満」という条件にしたいので、and 条件で式を書きます。
InputTime ge '2026-03-30T01:00:00Z' and InputTime lt '2026-03-30T08:00:00Z'
2026-03-30T01:00:00Z = 日本時間2026年03月30日10時00分
2026-03-30T08:00:00Z = 日本時間2026年03月30日17時00分
ge(以上)とlt(未満)の式を組み合わせることで、境界値の取りこぼしを防ぐことができます。
特定の日付でのフィルタリング
時間は気にせず、2026年03月30日のデータをすべて抽出するというパターンです。これは日本時間で2026年03月30日0時00分以上かつ2026年04月01日00時00分未満という条件なので、タイムゾーンをUTC(世界協定時)に変換して以下のように書きます。
InputTime ge '2026-03-29T15:00:00Z'
and InputTime lt '2026-03-30T15:00:00Z'
2026-03-29T15:00:00Z = 日本時間2026年03月30日00時00分
2026-03-30T15:00:00Z = 日本時間2026年04月01日00時00分
今日以降
フローの中で現在日時を取得して、動的に InputTime 列が今日以降のデータをフィルタリングするというパターンです。今日というのは 現在日の0時00分以降 のことと定義する場合、フィルタクエリは以下のようになります。
InputTime ge '@{formatDateTime(utcNow(),'yyyy-MM-ddT00:00:00Z')}'
utcNow 関数で現在日時の取得し、formatDateTime 関数でフィルタリングに適した日時形式への変換をしています。その上にフィルタークエリでの絞り込みを行っています。
終わりに
SharePoint Lists の日時フィルタリングは、
- 日本時間で考える
- UTC (世界協定時) に変換する
- フィルタクエリを書く
という考え方さえ押さえてしまえば、そこまで難しいものではありません。
一方で、表示されている日時と内部で保存されている日時が異なるため、 慣れるまでは なぜこの結果になるのか分からない と感じやすいポイントでもあります。
まずは今回紹介したユースケースを参考に、
固定日時 → 時間範囲 → 日付単位 → 動的条件
の順で実際に試してみてください。
それではごきげんよう✨

