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

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

式の内容としてはSequence関数を利用して何日後の2倍分、今回は8日分の日付を作成します。この2倍はあくまで適当です。土日を含むため、足りないと困るためあくまで2倍にしています。RoundUpは何日後が小数が入った場合を考慮して入れています。この8日分の日付を”cal”という列名で作成し、FilterでWeekDay関数の土日を除く日数を抽出し、Index関数を用いて何日後を表しています。

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の条件に除きたい日付をリストにしたものを省くとすればできると思います。試していないので、ここにきちんとしたコードを書くのはやめておきます。また出来次第、記事を更新します。

コメントを残す

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

CAPTCHA