ユーザー定義関数コレクション No.002|日付範囲チェックを柔軟に行う関数 IsBetweenDateTimes 関数のご紹介

Power Apps
この記事は約5分で読めます。

日付の範囲チェックで困ったことはありませんか?

PowerAppsでアプリを作っていると、「この日付が指定された期間内にあるかどうか」をチェックしたい場面ってよくありますよね。でも、開始日だけ指定されていて終了日が空だったり、その逆のパターンだったりと、実際の業務では色々なケースに対応する必要があったりします。

実は、そんな時に便利なのが今回ご紹介するユーザー定義関数です。この関数を使えば、fromtoのどちらかが空でも、両方指定されていても、柔軟に日付範囲のチェックができるようになります。

Power Apps のユーザー定義関数とは?

ユーザー定義関数は Power Apps 内でプログラミングでいうところのメソッドを定義できる機能で、ユーザーごとに独自の関数を作成し、それをアプリ内で利用できる機能のことです。

どんな関数なのか

このユーザー定義関数では、3つのパラメータを指定できます:

  • value: チェックしたい日付
  • from: 範囲の開始日
  • to: 範囲の終了日

ここで重要なのは、単純に範囲内かどうかをチェックするだけじゃないということです。実は、この関数にはちょっとした工夫が施されているんです。

柔軟な判定ロジック

こちらが実際の関数 IsBetweenDateTimes の式になります

IsBetweenDateTimes(Value:DateTime, From:DateTime, To:DateTime):Boolean = 
If(
    IsBlank(Value),
    false, // 値がないので不正
    And(IsBlank(From), IsBlank(To)),
    true, // 両方とも null の場合は制約なしで true
    IsBlank(From),
    Value <= To,  // From が null の場合は「To 以下」をチェック
    IsBlank(To),
    From <= Value, // To が null の場合は「From 以上」をチェック
    And(From <= Value, Value <= To)
);

この関数の特徴的な動作を見てみましょう:

  • toの値がブランクの場合 → from以上かどうかのみをチェック
  • fromがブランクの場合 → to以下かどうかのみをチェック
  • 両方指定されている場合 → その範囲内にあるかをチェック

つまり、「〇月〇日以降」や「〇月〇日まで」といった片側だけのチェックも式の中に含まれています。

実際の使い方を見てみましょう

片方の日付だけを指定する場合

まずは、fromtoのどちらか一方だけを使うパターンです。

例えば、「特定の日付以降かどうか」をチェックしたい場合は、こんな感じで使えます:

powerapp

// fromに日付を指定、toにブランクを指定
IsBetweenDateTimes(Today(), DateValue("2024/01/01"), Blank())

この場合、from以上の日付であればTrueが返ってきます。Filter 関数なんかで使えば「〇〇日以降のデータだけを表示したい」といった使いかたも可能です

両方の日付を指定する場合

続いて、fromtoの両方を指定して、きちんとした期間内にあるかをチェックする使い方です。

powerapp

// fromとtoの両方を指定
IsBetweenDateTimes(Today(), DateValue("2024/01/01"), DateValue("2024/12/31"))

このように指定すると、対象の日付が2024年の範囲内にあるかどうかを判定できます。実際に動かしてみると、正しく動作していることが確認できるはずです。

注意点として押さえておきたいこと

ただし、この関数を使う際にはちょっとした注意点があります。今回は片方の値が Blank の場合の式もありますが、そもそも Blank の場合はチェックしたくないといった仕様もあると思います。本当に From To の期間内かどうかだけをチェックしたいということです。そういった場合は以下のような式になります。

IsBetweenDateTimes(Value:DateTime, From:DateTime, To:DateTime):Boolean = 
If(
    IsBlank(Value),
    false, // 値がないので不正
    And(IsBlank(From), IsBlank(To)),
    false, // 値がないので不正
    IsBlank(From),
    false,  // 値がないので不正
    IsBlank(To),
    false, // 値がないので不正
    And(From <= Value, Value <= To)
);

もしくは

IsBetweenDateTimes(Value:DateTime, From:DateTime, To:DateTime):Boolean = 
    And(From <= Value, Value <= To);

業務の要件に応じて「空の値をどう扱うか」を決めて、それに合わせてカスタマイズして利用してください。

まとめ

いかがでしたでしょうか。Power Appsで日付の範囲チェックを行う際、このようなユーザー定義関数を用意しておくと、様々なケースに柔軟に対応できるようになります。

回ご紹介した関数は、ぜひ皆さんも自由に使ってください。もし改良版を作られた方がいれば、ぜひ教えていただけると嬉しいです!


この記事は私が作成している「ユーザー定義コレクション」シリーズの第2弾です。今後も実務で使える独自のユーザー定義関数を順次ご紹介していきますので、お楽しみに!

Power Apps学習の決定版!コントロール別YouTube再生リスト完全ガイド

Power Appsを学習していて「どのコントロールをどう使えばいいのかわからない」「実際の使い方を動画で見ながら覚えたい」と思ったことはありませんか?

実践的な知識を効率よく身につけられるよう、現在公開している動画を整理したYouTube再生リスト集をご紹介します。

Power Apps 学習リソース一覧

コントロール・機能 リンク
ギャラリー 再生リスト
テキストラベル 再生リスト
テキスト入力 再生リスト
フォーム 再生リスト
ラジオ 再生リスト
スライダー 再生リスト
トグル 再生リスト
コンボボックス 再生リスト
ドロップダウン 再生リスト
ボタン 再生リスト
日付選択 再生リスト
画像 再生リスト
タイマー 再生リスト
コンポーネント 再生リスト
Copilot 再生リスト
クラシックコントロール 再生リスト
表示加工 再生リスト
バリデーション 再生リスト
ひと手間デザイン 再生リスト
ハンズオン 再生リスト
全体Tips 再生リスト
無料配布 再生リスト

コメント

タイトルとURLをコピーしました