【Power Automate入門】Do Untilとは?~翌営業日を判定する方法~
毎日チームに、翌営業日のスケジュールを通知したいのですが、フローで翌営業日を判定する方法が分かりませんぞ…
その場合、「Do Until」のループアクションを使う必要がありますね。
この記事では、Do Untilとは何か?と、Do Untilを使った翌営業日の判定方法を解説します。
「Do Until」は「For each」と同じく、よく使われるループアクションの1つです。
「Do Until」アクションの使い方を理解すると、色々なフローで活用できるので、ぜひ最後までみてください!
- Do Untilの基本的な仕組み
- For each(Apply to each)との違い
- Do Untilで翌営業日を判定するフローの実装方法
YouTube動画で見たい方は、こちらからどうぞ!
Do Untilとは?
Do Untilの仕組み
Do Untilは、「コントロール」カテゴリにあるアクションで、条件がTrueになるまでループ内のアクションを繰り返し実行します。
Do Untilの基本的な動作は、以下のようになります。
- ループ内のアクションを実行する ※1回目は必ず実行される
- 条件を判定する
- 条件がFalseなら、1に戻って再度アクションを実行する
- 条件がTrueになったら、ループを終了する
例えば以下のようなフローで、Do Untilの条件を「変数 num = 3」と設定した場合の動きを見てみます。

1回目のループでは上の図のように、ループ内のアクションが実行され、Excel表に「1」の値を追加します。

2回目のループでは上図のように、変数num=2のためループに入り、Excel表に「2」の値を追加します。

3回目では上図のように、変数num=3となったため、Do Untilの条件を満たし、ループから抜けて次のアクションが実行されます。
なるほど、条件を満たすまで、何度もループするのですな!
ただし、無限ループを防ぐために、Do Untilには以下の2つの制限を設定できます。
- 件数:ループの最大実行回数を設定(例:60回)
- タイムアウト:ループの最大実行時間(例:PT1H =1時間)
例えば上記のような設定をすると、条件が永遠にTrueにならない場合でも、カウントが60回に達するか、1時間が経過すると、ループは自動的に終了します。
これらは、詳細パラメーターで設定できます。
For each(Apply to each)との違い
For eachとDo Untilは、どちらもループ処理のアクションですが、目的と使い方が大きく異なります。
For Each
- 用途:アレイ(配列)の要素を1つずつ処理する
- ループ回数:アレイの要素数
- 入力データ:アレイ型のデータが必要
- 主な使用例:取得したExcelの行を1行ずつ処理
Do Until
- 用途:条件がTrueになるまで繰り返す
- ループ回数:条件次第(最大回数の制限あり)
- 入力データ:不要(条件式のみ)
- 主な用途:条件を満たすまで繰り返す
For eachは、SharePointリストやExcelで取得した全データに対して、何か処理をする際によく使います。
一方でDo Untilは、条件を満たすまで繰り返し処理をするものです。
今回解説する「翌営業日の判定」では、日付が営業日(土日祝日以外)になるまで日付を1日ずつ加算していく必要があります。
このようなケースでは、Do Untilを使う必要があります。
For eachの仕組みについては、以下の記事をご参考ください。
Do Untilで翌営業日を判定する方法
Do Untilの使用例として「翌営業日を判定する」方法を紹介します。
翌営業日の判定では、日付が営業日(土日祝日以外)になるまで、日付を1日ずつ加算していきます。
フローのロジック
今回作成するフローの全体構成は以下のようになります。

- Recurrence(トリガー):スケジュールでフローを開始
- 変数を初期化する:targetDate 判定対象の日付を格納する変数
- 変数を初期化する:isBusinessDay 営業日かどうかのフラグ(True/False)
- Do Until:isBusinessDayがTrueになるまでループ
- 複数の項目の取得:SharePointリストから祝日を検索
- 条件分岐:土日祝日かどうかを判定
→True(土日祝の場合):変数targetDateを1日加算
→False(営業日の場合):変数isBusinessDay=True
何だか複雑そうですな…
最初はロジックの理解が難しいかもしれませんが、少しずつ解説していきますね!
詳しい実装方法を解説していきます。
フローの実装方法
①祝日リストの用意
SharePointリストで、以下のような「祝日リスト(Holiday)」を準備します。
※祝日リストは、毎年メンテナンスが必要になります。

土日判定は関数式で簡単にできますが、祝日判定は難しいのと、組織特有の休暇(年末年始・夏季休暇等)も考慮するためです。
②フローの実装
次に、Power Automateを実装していきます。
1.スケジュールトリガーの次に、「変数を初期化する」アクションを追加し、以下のように変数「targetDate」を設定し、明日の日付を格納します。
※これは、最終的に翌営業日を格納する変数です
変数の初期化の設定
- 名前:targetDate ※任意の変数名でOK
- タイプ:文字列
- 値:関数式(fx)から以下の式を入力
addDays(convertFromUtc(utcNow(), 'Tokyo Standard Time'), 1)
※Power AutomateのutcNow()関数は、UTC(協定世界時)で現在日時を取得するため、convertFromUtc関数で、日本時間に変換します。
2.「変数を初期化する」アクションをもう一つ追加し、以下のように変数「isBusinessDay」を設定します。
※これは、targetDateが営業日かどうかを判定する変数です
変数の初期化の設定
- 名前:isBusinessDay ※任意の変数名でOK
- タイプ:ブール値
- 値:false

3.コントロールの「Do Until」を追加し、以下のように設定します。
Do Untilの設定
- ループ停止条件:
– 左:動的なコンテンツ(⚡)で変数「isBusinessDay」を設定
– 中央:等しい
– 右:関数式(fx)で、trueを設定 - 件数:20 ※任意の最大ループ件数を設定
- タイムアウト:PT1H ※任意のタイムアウト時間を設定
この条件で、変数「isBusinessDay」が「true」になったらループを抜けます。
変数「targetDate」が営業日となった時点で、変数「isBusinessDay」を「true」にします。

4.Do Until内に、SharePointの「複数の項目の取得」を追加し、以下のように設定します。
複数の項目の取得の設定
- サイトアドレス:祝日リストのSharePointサイトを選択
- リスト名:祝日リスト(Holiday)を選択
- フィルタークエリ:holiday eq ‘<以下の関数式>’ のように設定
※holidayは祝日リストの日付列の内部名を入力
※<以下の関数式>の部分は、関数式(fx)から設定
formatDateTime(variables('targetDate'), 'yyyy-MM-dd')
5.コントロールの「条件」を追加し、次のように3つの条件式を、「または」で設定します。
条件の設定(または)
- targetDateが祝日か?(祝日リストにデータがある場合、empty関数はfalseを返す)
<祝日判定の関数式> 等しい false ※関数式で入力 - targetDateが日曜日か?
<曜日の数値を取得> 等しい 0 - targetDateが土曜日か?
<曜日の数値を取得> 等しい 6
※<祝日判定の関数式>と、<曜日の数値を取得>は、関数式(fx)から、以下の式を入力します。
empty(outputs('複数の項目の取得')?['body/value'])dayOfWeek(variables('targetDate'))
そのため上記の条件式で、targetDateが、祝日、日曜、土曜のいずれかであるかを判定できます。(True→targetDateが土日祝日、False→targetDateが営業日)
6.Trueの場合、targetDateが土日祝日のため、1日追加します。
変数の設定で、直接自分の変数(targetDate)を関数式で使うことができないため、データ操作の「作成」を追加し、以下の関数式(fx)を設定します。
addDays(variables('targetDate'), 1)
7.その下に、「変数の設定」を追加し、変数targetDateを以下のように設定します。
変数の設定
- 名前:targetDate を選択
- 値:動的なコンテンツ(⚡)から、作成の出力を選択

8.条件のFalseの方には、「変数の設定」を追加し、変数「isBusinessDay」に「true」を設定します。

9.最後に、取得された翌営業日(targetDate)を使い、Teams通知等のアクションを設定します。
※この部分は任意のアクション設定をします。

③フローのテスト
例えば1/21(水)にフローを実行すると、以下のように翌営業日(1/22(木))がTeams投稿されます。

試しに、祝日リストに1/22(木)を入れて、1/21(水)にフローを実行してみます。

すると、祝日リストに登録された1/22(木)をスキップし、以下のように、翌営業日が1/23(金)として通知されます。

このような感じで、土日祝日を除く、翌営業日の判定ができました!
まとめ
この記事では、Do Untilの仕組みと、土日祝日を除く翌営業日を判定するフローの実装方法を解説しました。
Do Untilは、設定した条件がTrueになるまで、ループ内のアクションを繰り返し実行します。
例えば、土日祝日を除く翌営業日を判定したい場合、変数として設定した日付が、営業日になるまで、1日ずつ追加していく処理をするのにDo Untilを活用できます。
Do Untilは、様々なフローのロジックで使うので、ぜひ覚えておいてください!









