Power Appstips日付操作関数

【Power Apps】当月の日付一覧&平日一覧&営業日一覧を出力する方法

Power Apps

Power Appsで当月の日付一覧と平日一覧と営業日一覧を出力する方法を紹介します。

日付一覧

ギャラリーなどのItemsプロパティに以下の数式を入力します。

With(
    Match(Text(Today(), "yyyy/mm/dd"), "(?<year>\d{4})/(?<month>\d{2})/(?<day>\d{2})"),
    AddColumns(
        Sequence(
            Day(Date(Value(year), Value(month) + 1, 0)),
            0
        ),
        "Day",
        Date(Value(year), Value(month), 1) + Value
    )
)
こちらの記事の"月初と月末の日付を取得する"方法を参考にしています。

Sequence関数で当月の日数分のインデックス列を持つテーブルを作成し、それにAddColumns関数で月初の日付+インデックス列の値を持つ列を追加することで当月の日付一覧を取得できます。

日付一覧

平日or休日一覧

先ほどの数式にFilter関数で平日のみor休日のみにフィルターをかけるだけです。

平日のみ
Filter(
    With(
        Match(Text(Today(), "yyyy/mm/dd"), "(?<year>\d{4})/(?<month>\d{2})/(?<day>\d{2})"),
        AddColumns(
            Sequence(
                Day(Date(Value(year), Value(month) + 1, 0)),
                0
            ),
            "Day",
            Date(Value(year), Value(month), 1) + Value
        )
    ),
    Not(Weekday(Day) in [1, 7])
)
休日のみ
Filter(
    With(
        Match(Text(Today(), "yyyy/mm/dd"), "(?<year>\d{4})/(?<month>\d{2})/(?<day>\d{2})"),
        AddColumns(
            Sequence(
                Day(Date(Value(year), Value(month) + 1, 0)),
                0
            ),
            "Day",
            Date(Value(year), Value(month), 1) + Value
        )
    ),
    Weekday(Day) in [1, 7]
)

営業日一覧

平日一覧にOutlookコネクタを利用して祝日を除外することで、営業日一覧を取得できます。

Filter(
    With(
        Match(Text(Today(), "yyyy/mm/dd"), "(?<year>\d{4})/(?<month>\d{2})/(?<day>\d{2})"),
        With(
            {
                Value:AddColumns(
                    Office365Outlook.GetEventsCalendarViewV3(
                        LookUp(
                            Office365Outlook.CalendarGetTablesV2().value, 
                            name = "日本 の休日"
                        ).id,
                        Date(Year(Today()), Month(Today()), 1), 
                        Date(Year(Today()), Month(Today()) + 1, 0)
                    ).value,
                    "Holiday",
                    DateValue(start)
                ).Holiday
            } As Holiday,
            AddColumns(
                AddColumns(
                    Sequence(
                        Day(Date(Value(year), Value(month) + 1, 0)),
                        0
                    ),
                    "Day",
                    Date(Value(year), Value(month), 1) + Value
                ),
                "Weekday",
                Weekday(Day) in [1, 7],
                "Holiday",
                Day in Holiday.Value.Holiday
            )
        )
    ),
    !Weekday && !Holiday
)

とても複雑になってしまったので、詳しい解説は諦めます。

AddColumns関数で休日と祝日にそれぞれフラグをつける列を追加しているので、Filter関数で容易にフィルターをかけられるようになりました。

Outlookコネクタの予定表取得関数についてはこの記事が参考になります

Power Automateの方が簡単

とてもローコードと呼べないような数式になってしまいましたが、Power Automateならもっと簡単に営業日の一覧を取得できます。

この例以外にもPower Automateの方が容易に実装できる場合があるので、コネクタの利用で躓いたらPower Automateで値を取得してみても良いかもしません。

週次カレンダーの作り方

コメント

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