【Power Apps】稼働日を考慮する(WorkDay関数、NetworkDay関数のように算出する)

※2025現在アップデートにより、現在は標準関数としてWorkDay / NetworkDaysが追加されています。
Power AppsにはExcelのWorkDay関数やNetworkDay関数のように稼働日を考慮して計算してくれる関数がありません。

標準関数で足りないカスタマイズが必要な場合は、以下の方法が有効です。

ただ、日程を表示するときには必ずと言っていいほど、稼働日を考慮してほしいと言われることが多いです。ということでやり方をこちらでまとめてみます。

今回は長期連休は加味していません。あくまで土日を除いた稼働日で計算しています。

WorkDay関数の起算日から何日後の日付を計算する

WorkDay関数のように起算日から何日か後の稼働日日数を計算してみます。

Apps
Index(
    Filter(
        AddColumns(
            Sequence(
                RoundUp(TextInput1.Text,0)*2,1),
                "cal",
                DateAdd(Date_startDay1.SelectedDate,Value)
                ),
        Weekday(cal) in [2,3,4,5,6]),
     TextInput1.Text).cal

処理の流れをまとめると下記のようになります。

1.Sequenceで連続した数字のリストを作る
  今回は何日後の2倍分作成しました。(適当です)。
  土日を含むため、足りないと困るのでだいたい2倍にしています。
  これを”cal”という列名で作成しています。

2.AddColumnsでそれぞれを日付に変換する

3.Filterで土日(2〜6)だけ残す
  Weekday関数の土日を除く日数を抽出しています。

NetWorkDays関数の開始日と終了日の日数を計算する

たとえば8/21~8/31をNetWorkDays関数をExcelで使用すると9日間と計算されます。

同じようにAppsでも計算できるように式を入力すると下記のようになります。

Apps
With(
    {
        letDateRange: ForAll(
            Sequence(Date_endDay.SelectedDate - Date_startDay.SelectedDate + 1),
            Date_startDay.SelectedDate + Value - 1
        )
    },
    If(
        And(
            IsBlank(Date_startDay.SelectedDate),
            IsBlank(Date_endDay.SelectedDate)
        ),
        0,
        CountIf(
            letDateRange,
            Weekday(Value) in [2,3,4,5,6]
        )
    )
) & "日"

長期連休を含む場合を加味する場合は、CountIfの条件に除きたい日付をリストにしたものを省くとすればできると思います。

SharePointリストなどに祝日一覧を用意しておき、Not(cal in 祝日リスト.Date) のようにFilter条件に加えるだけで祝日対応も可能です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA