Power Automateで休日を除いた日数計算や営業日ベースの処理を行おうとすると、思った通りに動かず悩む方は少なくありません。特に、フロー内の日付関数や条件分岐の設定を間違えると、休日が正しく除外されず計算結果がずれてしまいます。本記事では、休日を除く計算でよくある失敗パターンと、入力値・条件分岐の具体的な修正手順を解説します。原因を切り分けて正しい設定に調整できるよう、実践的な内容をまとめました。
【要点】この記事で確認すること
- 最初に見る場所: フロー内の「日付と時刻」アクションと条件式、特にタイムゾーンの指定が正しいか、休日リストの日付形式が一致しているかを確認します。
- 切り分けの軸: 端末側のロケール設定、アカウント側のタイムゾーン、管理設定側の環境既定タイムゾーンの3軸で問題を切り分けます。
- 注意点: 会社PCで共有の休日カレンダーを使用する場合、管理者が設定したカレンダーを参照するか、自前で休日リストを用意するかを事前に決めておきましょう。また、フローで直接環境設定を変更することは避けてください。
ADVERTISEMENT
目次
休日を除く計算でよくある失敗パターン
休日を除外した日数計算を行うフローで、多くのユーザーが同じようなポイントでつまずいています。代表的な失敗パターンを知っておくと、原因特定の手間が減ります。
カスタムトリガーとスケジュールトリガーの違いを理解していない
Power Automateのトリガーには、イベント発生時に起動するカスタムトリガーと、特定の時刻や間隔で起動するスケジュールトリガーがあります。休日を除外する処理では、スケジュールトリガーが休日当日に起動しないようにする必要がありますが、「トリガーの種類によって休日の扱いが自動で変わる」と誤解しているケースが見られます。実際には、トリガー自体は休日を自動的に認識しません。自分で休日リストを用意し、条件分岐で起動を制御する必要があります。
日付計算の関数を誤って使っている
「addDays」「dayOfWeek」「ticks」などの日付・時刻関数の使い方を間違える例が多くあります。特に、タイムゾーンを考慮せずにUTCのまま計算すると、日本の休日がずれて認識されます。また、日付の文字列形式が「yyyy-MM-dd」と「yyyy/MM/dd」で不一致を起こすと、条件分岐で正しく判定できません。
正しい入力値の設定方法
休日を除く計算を実現するには、まず正確な休日リストとタイムゾーン設定が欠かせません。以下で手順を確認してください。
タイムゾーンの指定(UTCとローカル時間の違い)
Power Automateの日付関数はデフォルトでUTCを基準とします。日本時間(JST)で日付比較を行うには、明示的にタイムゾーンを指定または変換する必要があります。「convertTimeZone」アクションを使ってUTCから東京標準時に変換するか、日付リテラルにタイムゾーンを付与した文字列を使います。例えば「2025-01-01T00:00:00+09:00」のように指定すれば、JSTとして認識されます。
休日リストの作成と参照方法
休日リストは、Excelファイル、SharePointリスト、SQLテーブルなど、アクセスしやすいデータソースに用意します。推奨はSharePointリストで、列に「日付」(Date/Time型)と「休日名」(テキスト)を設けます。フローでは「Get items」アクションでリストの全アイテムを取得し、後続の条件分岐で使用します。以下の手順で設定してみてください。
- SharePointリストを作成し、「日付」列(日付のみ)と「休日名」列(テキスト)を追加します。
- 休日となる日付をyyyy-MM-dd形式で1行ずつ入力します。重複しないように注意します。
- Power Automateで「スケジュールトリガー」を追加し、実行間隔を「毎日」に設定します。
- 「Get items」アクションでSharePointリストから休日データを取得します。フィルターは不要です。
- 「Apply to each」で取得した休日リストをループし、各休日と現在日付(コンテキスト内の日付)を比較します。
- 「Condition」アクションで「休日日付」が「現在日付」と等しい場合、フローを終了するか、次のアクションをスキップするように分岐させます。
- 日数計算が必要な場合は、別途「変数」にカウントを保持し、営業日数を計算するロジックを追加します。
条件分岐の直し方:休日かどうかの判定ロジック
休日を判定する条件分岐は、単純な「等しい」比較だけでは不十分な場合があります。ここでは正しいロジックと注意点を説明します。
「Apply to each」と「Condition」の組み合わせ
休日リストをループする場合、各休日に対して現在日付が一致するかチェックします。一致したら「はい」の分岐で処理を中断するために「Terminate」アクションを使うか、変数フラグを更新して後で参照します。リストの件数が多いとパフォーマンスに影響するため、必要に応じてフィルターを適用します。
結果を変数に格納して後続で利用する
判定結果を後続の日数計算に使いたい場合、ブール型の変数「isHoliday」を用意し、ループ内で休日に該当したらtrueに設定します。ループ終了後にこの変数を参照し、trueなら処理をスキップします。また、営業日数をカウントする場合は、ループ外でカウンター変数をインクリメントするロジックが必要です。
管理者に確認すべき設定
休日除外のフローがうまく動かない原因は、個人の設定だけでなく環境全体の設定にあることもあります。以下の点を管理者に確認してください。
環境の既定のタイムゾーンと営業時間の設定
Power Automate環境全体の既定タイムゾーンがUTCになっていると、すべての日付計算がUTC基準になります。管理者が環境設定で「既定のタイムゾーン」を東京に変更しているかどうか確認します。また、休日カレンダーを共有リソースとして提供している場合、そのカレンダーをフローから参照できるかも確認が必要です。
Power Automateライセンスと制限
一部のPremiumアクションやコネクタ(例:SQL Serverコネクタ)はライセンスが必要です。フローが「制限に達しました」というエラーを出す場合、実行時間やアクション数の上限に引っかかっている可能性があります。管理者にライセンスと環境制限を確認してください。
状況別比較表:トリガーと休日除外の実装方法
| トリガーの種類 | 休日除外の方法 | メリット | デメリット |
|---|---|---|---|
| スケジュールトリガー(毎日) | フロー内で休日リストと現在日付を比較し、休日なら終了 | 柔軟な休日設定が可能 | 毎日起動するため実行回数が増える |
| スケジュールトリガー(営業日のみ指定) | トリガーの「週間スケジュール」で月〜金のみ設定し、別途祝日リストと照合 | 土日は自動的に除外される | 祝日は別途除外処理が必要 |
| イベントトリガー(ファイル作成など) | トリガー後に休日チェックを実施し、休日なら処理しない | イベント発生時にリアルタイム処理 | 休日にもイベントが発生すると無駄な起動が生じる |
| 手動トリガー(ボタンなど) | ユーザーが手動で起動するため、休日除外はフロー内で判定 | ユーザーが必要な時だけ実行 | 手動操作が必要で自動化できない |
よくある質問(FAQ)
Q1. 日本の祝日(国民の祝日)を自動で取得する方法はありますか?
Power Automateには日本の祝日を自動取得する標準コネクタはありません。内閣府などが公開しているAPIを利用する方法もありますが、メンテナンスが煩雑になるため、自前の休日リストを作成して管理することをおすすめします。
Q2. 土日と祝日の両方を除外したい場合はどうすればいいですか?
まず、dayOfWeek関数で曜日を取得し、土曜(6)または日曜(0)なら休日として処理します。その上で、別途作成した祝日リストとの一致チェックを組み合わせます。両方の条件をOR条件で連結すれば対応できます。
Q3. 条件分岐で「式が無効です」というエラーが出ます。原因は?
よくある原因は、日付の形式不一致やnull値の混入です。チェックする日付が空文字やnullでないことを事前に確認するか、「coalesce」関数でデフォルト値を設定します。また、タイムゾーン変換後の日付を文字列として評価する場合は、形式を「yyyy-MM-dd」に統一してください。
Q4. フローが「ループの反復回数が多すぎます」とエラーを出します。どうすれば?
休日リストのアイテム数が多すぎる場合に発生します。リストを年単位で分割するか、フィルターをかけて該当年の休日のみ取得するようにしてください。また、Apply to eachの代わりに「Filter array」アクションで条件に合う休日を先に絞り込む方法も有効です。
Q5. 休日を除外した日数を計算する最も簡単な方法は?
営業日数計算には標準関数がないため、自分でロジックを組む必要があります。開始日から終了日まで1日ずつループし、土日祝でない日をカウントする方法が確実です。パフォーマンスが気になる場合は、事前に計算済みの営業日カレンダーを別テーブルに持つ方法も検討してください。
まとめ
休日を除く計算は、Power Automateの標準機能だけでは実現できませんが、休日リストと条件分岐を組み合わせることで正確に動作します。タイムゾーンと日付形式の統一が基本であり、ループ処理の効率化も考慮する必要があります。管理者に環境設定を確認し、共有リソースが利用可能かも問い合わせてみてください。最初は単純な日付比較から始め、徐々に複雑なロジックに拡張することで、安定したフローを構築できるでしょう。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【Teams】画面共有時に「音声」も共有する方法!音が流れない時の設定手順
