前回基礎⑤では、現在日から「月初日」や「月末日」「翌月末日」と日常よく使われる日にち設定などの考え方を学びました。
今回はさまざまなビジネスシーンでよく使われる「翌月末日」の取り扱いについて、その日が土日や祝日などに該当した場合に、どのように処理したらよいのかを条件分岐という概念を使って勉強していきたいと思います。
実際には、銀行などのイメージにあるように土日が稼働しないことがルール上決まっており、それ以外、同時に会社の連休設定などがあるようなケースにおいても考慮したハイブリッド型の考え方を学んでいきます。
超有料級のネタですがこのようなこともみなさんのPower Automate for desktopを使って簡単にフローを組み上げる事ことができますので是非チャレンジしてみてください。

実際には、この算出日が土日や祝日などの休日となってしまっては、営業日換算で対処するような部門においては、折角プロットして作成した日にちでも稼働日ではなかったら不親切でかつ困りますよね。
このような場合において、今回は、「翌営業日」という考え方をどのように算出するのか説明していきます。
いろいろな方法は有るかと思いますが、シンプルに考えると
・翌月末日となっている曜日を確かめる
・土曜日なら2日足す
・日曜日なら1日足す
・上記が祝日となっていないかをカレンダーで確認する
・もし休日となっているなら、休日が空けるまで確認して以降の翌日を翌営業日にする
の5ステップを考えたら、翌営業日の算出はできるのかと思います。このため、上からひとつづつ処理するようなフローをどのように作って行けばいいのか考えて行きましょう。
ここでは、前回の請求書フォーマットにつなげるようなしくみを構築していきますが、現在日から始めると検証が困難であるため、ユーザー側で好きな日を入力できるような形にして基本エンジンとして作成していき、最後に前回の基礎⑤のフローにつなげるような考え方で進めて行きます。
その前に、あらかじめ祝日や会社の休日、そして連休などがある変則的なお休みのケースをカレンダー設定できるようなExcelファイルを作っておくことが大切です。
祝日カレンダーを作っておこう(前座)
フローを作成する前に、祝日などを盛り込んだ「祝日カレンダー」を作成していきましょう。ここには、ご自身がお勤めの場合、会社の休日や祝日も盛り込みます。もちろん、個人の休暇などを入れて稼働日として外す場合でも対応できすますので、自由度のあるカレンダーをあらかじめExcelを使って作成していくこととします。
オリジナルカレンダーは、こんな感じで作っておきます。 ファイル名任意ですが「カレンダー.xlsx」です。

ただし、このカレンダー作りには、フロー作りの連動性と利便性を含めて、次の3点の注意/法則を守って作成してください。
① 実質使うのはB列だけで良いが、わかりやすさをふまえて「祝日名」をつけています。
(「曜日」については個人的検証のため作っているので実質使いません)
② 基本的に土日は、別の判定で回避するのでリストには不要だが、不定期な土日の休日があるなら
盛り込む。例えば、隔週の土曜日は出勤とかであれば、土曜の休日はリストに入れ、以降で説明する
土曜判定は行わない。 (法則はあくまで、土日と当カレンダーを営業日から除外するアルゴリズム)
③ 企業が決めた長期連休などの変則的なものは前後/真ん中での土日もリストに含める。
実質③だけが重要な法則にあたりますが、Excelのフィル機能など使えば、数分でできてしまう簡単なExcelシートですので、上記に注意して作成してみてください。
(一般的なGW、夏季連休、年末年始などを考慮して2025年末から2026年度分のサンプルを作っています)
国民の祝日においても会社によっては出勤日だったりしますので、実情に合わせて作っておきます。
一般的にはお休みとなる祝日などは下記のサイトからコピー&ペーストしてくれば比較的簡単にオリジナルカレンダーが作れます(実際これもPADで取ってくることも可能ですが、今このお話は割愛します)
祝日の参考サイト👉 国民の祝日について – 内閣府
この対象日が一致するか否かで、一致したら1日足し算して再検索し、一致しないところまで検索すると営業日となります。(一般的には銀行関連は翌営業日に持ち越すので今回はそのような考え方で進めてみます)
テストしたい日の入力
今回は、現在日ではいろいろ検証しにくいので、自由にカレンダー入力できるように検証用としてダイアログを出すようにして、ユーザーで日にち設定ができるようにします。

① アクションのメッセージボックスを開き、「日付の選択ダイアログを表示」をドラッグ&ドロップします。

② ダイアログのタイトルのところは、「日付入力」と入れます(任意です)。
③ ダイアログメッセージは、「検証したい日を入力してください」とします。こちらも任意です。
④ 次のプロンプトのところは、「日付のみ」で構いません。
⑤ 日付選択ダイアログを常に手前に表示を「ON」にしておきます。
⑥ 生成された変数は、デフォルトでは SelectedDate となっていますが、ここでは、先々翌月末日となった際の処理を想定して使用するため、名前を 「翌月末日」 として変更します。
(検証用ではこの変数を使いますが、後程説明する前回のフローにつなげるためにこの名前にしています)
この変数 「翌月末日」 を使って、以降の土日祝日の判定を行っていきます。

【実際の入力ガイアログ画面の説明】
⑦ 入力画面は枠内に手入力もできますが、右側のカレンダーボタンを押すと、カレンダー選択でも入力できる画面です。
オリジナルカレンダーの起動
先ほど作成したカレンダーファイルを立ち上げておきます。(カレンダー立ち上げのタイミングは判定条件前であればどこでもよいのですが、一例として、この段階でフローに入れておきます)

① アクションのExcelを開き、「Excelの起動」をドラッグ&ドロップします。

② 毎回同じなのですが、設定画面で「Excelの起動」には、「次のドキュメントを開く」を選択します。
③ 「ドキュメントパス」が現れますので、こちらでファイルを選択。
④ ファイルマーク📁をクリックして、開きたい「カレンダーファイル」を選択。
⑤ 生成された変数に ExcelInstance が設定されましたが、今回は前回(基礎⑤)の連動も想定することで
インタンスがかぶらないように変数 ExcelInstance2 と番号をつけておきます。
こちらがカレンダーファイルを意味しますので覚えておきます。

曜日の表示(デバッグ用)
今回、デバッグを兼ねて「翌月末日」の「曜日」を表示してみます。
(これは後ほど消します)

① アクションのメッセージボックスを開き、「メッセージの表示」をドラッグ&ドロップします。
② 表示するメッセージには、枠内をクリックして変数の総称{X}より %翌月末日.DayOfWeek% をプロパティより選択します。
プロパティは、変数 翌月末日の左側の「>」をクリックすると開きます。 開くと「▽」になり、変数 DayOfWeek が現れます


この 変数DayOfWeek は、DateTime型変数の日時を表すカレンダーデータから「曜日」を英語で表記したデータ値を出力してくれます。例: Monday とか
③ メッセージボックスを常に手前に表示を「ON」にしておきます。
曜日を確かめてみよう
それでは、一旦、どんな文字を返してくるのか入力して確かめてみましょう。

① 一旦セーブ💾して、実行「▶」してみましょう。
② 入力画面で翌月末日を想定して日にち指定してください。カレンダーが立ち上がって、下のような曜日が出たらOKです。 例:2025年11月27日を入力⇒ 「Thursday」と表示

③ ちなみに今回、まず土日回避のアルゴリズムを作って行きますので、土曜日と日曜日の日付を入れて、「Saturday」と「Sunday」が出るのを確認しておきます。

でたらOKです。
④ 基本的にこのテロップ表示は検証用のため、確認が済んだら機能しないようにマウスの右クリックで「アクションを無効化する」を選択してグレーアウトしておくと良いでしょう。
次から、土日回避の方法を条件分岐を使って、翌月末日の調整をしていきますが、考え方として
もし翌月末日が
・土曜だったら、2日後の月曜日を営業日とする
・日曜だったら、1日後の月曜日を営業日とする
という風に、翌月末日の曜日をチェックして、各曜日に対して必要な日数だけ加算します。
条件分岐(土日回避)
土曜日か日曜日かをまず確認することから始まり、それぞれによって、対応方法も異なるので、次は、「翌月末日」が土曜日なら2日足す、日曜日なら1日足すといった、それぞれの条件に見合うような形でいずれか一方の処理ができるようにフローを作ってあげる必要があります。
土曜日分の判定
このもし「○○曜日だったら」どうする…という表現を設定するのに、PADでは、IF~(Else if) というアクションを使って条件分岐します。

① アクションの条件を開き、「If」をドラッグ&ドロップします。

② 最初のオペランドは… と出てきます。
オペランドとは、「計算確認する対象の変数や定数」という意味合いで、このあたりはプログラミング言語の文化を引き継いでいる感じですが、気にせずここでは、比較対象とするものと考えておけば結構です。
今回は翌月末日の曜日が何曜日か比較したいことから、最初のオペランドには変数
%翌月末日.DayOfWeek% と先の曜日呼び出しのようにプロパティから選びます
③ 演算子は 「と等しい(=)」のままです。他にも 「>」「<」や「を含む」などいろいろあります。
④ 2番目のオペランドは、 これが土曜日 Saturday であるか確かめたいので、「Saturday」と手入力します。
保存後は、下記のようなブロックが出来上がっています。
いわゆる、この条件に合致するものは、「If」の下に進んで、そうでないものは、その下の処理をしないで次(の分岐もしくはEnd)に飛ぶという分岐を表します。

今回は、翌月末日が「土曜日だったら、2日分足し算して月曜日にする」ということを行いたいので、この「IF」の下に、日にちの足し算をすればいいわけです。
土曜日分の処理
まず初めに、土曜日に一致した場合の処理について2日分の足し算を行います。

① アクションの日時を開き、「加算する日時」を「If」と「End」の間にドラッグ&ドロップします。

② 日時には、変数{X}から %翌月末日% を選んできます。
今回は、翌月末日の曜日をPADがチェックして、土曜日つまり「Saturday」であれば、この加算処理(2日分を足し算する)を行うといったものです。
③ 加算には、「2」を手入力します。
④ 時間単位には、「日」を選択します。
⑤ 生成された変数は、今回は 翌月末日 といった名前に変数名を変更します。
これで土曜日に対する翌月末日の設定ができました。次は日曜日について設定しましょう。
日曜日分の判定
次は、さらにもしくは「○○曜日だったら」どうする…という表現を設定します。PADでは、Else if というアクションをIfの内部に追加して条件分岐します。「Else if」は「If」で判定したものは「No」であった時に、「さらにもしくは」と別の条件に合致するのか否かを判定するものです。このため、「If」以外で他に何か条件分岐させたいときに、下方に重ねて使用します。今回は「さらにもしくは日曜日だったら」を考えます。

① アクションの条件を開き、「Else if」を「加算する日時」と「End」の間にドラッグ&ドロップします。さらに別の分岐をつくることを意味します。

② 最初のオペランドは…こちらも同様に、今回は翌月末日の曜日が何曜日か比較したいことから、最初のオペランドには変数
%翌月末日.DayOfWeek% と先の曜日呼び出しのようにプロパティから選びます。
③ 演算子は 「と等しい(=)」のままです。他にも 「>」「<」や「を含む」などいろいろあります。
④ 2番目のオペランドは、 これが日曜日 Sunday であるか確かめたいので、「Sunday」と手入力します。
保存後は、下記のようなブロックが出来上がっています。いわゆる、この条件に合致するものは、「If」の下に「Else if」という分岐が追加されました。最初の「If」で一致しなかったら、次の「Else if」を見ます。

今回は、翌月末日が「日曜日だったら、最初の土曜日判定をスキップ」して、この「Else if」に飛び、日曜日かどうかを判定することになります。
日曜日分の処理
そして土曜日と同じように、日曜日については、一致した場合の処理について1日分の足し算を行います。

① アクションの日時を開き、「加算する日時」を「Else if」と「End」の間にドラッグ&ドロップします

② 日時には、変数{X}から %翌月末日% を選んできます。
今回は、翌月末日の曜日をPADがチェックして、日曜日つまり「Saturday」であれば、この加算処理(1日分を足し算する)を行うといったものです。
③ 加算には、「1」を手入力します。
④ 時間単位には、「日」を選択します。
⑤ 生成された変数は、今回も 翌月末日 といった名前に変数名を変更します。
これで日曜日に対する翌月末日の設定ができました。
土日回避のチェック
それでは、翌月末日が土日を回避して、次の月曜日となっているか確認してみましょう。

① 一旦セーブ💾して、実行「▶」してみましょう。
②入力画面でわざと土日となる翌月末日を想定して日にち指定してください。ここでは、2025年11月22日 の土曜日を指定してみます。
カレンダーが立ち上がって、翌月末日が2日後の月曜日 11/24と出たらOKです。

また、2025年11月23日 の日曜日を指定した場合も月曜日 11/24になりますね。
これで土日は正常に回避しつつ、「翌月末日」自体も、月曜にシフトしていることがわかりましたね(ただし祝日はまだ回避できてない)

祝日については変則的なことが多いので、オリジナルのカレンダーで「翌月末日」を検索して、該当すれば1日足して再検索し、それを繰り返しながら該当しない日を答えが出るまで探索していくような考え方で今回は設定してみます。
祝日回避の考え方
祝日などを盛り込んだオリジナルカレンダーの日付を検索することを行いますが、それに先立ちカレンダーの日付はテキスト表示されているので、「翌月末日」をDatetime型かたテキスト型に変換しておくようにします。
検索キーの設定(Datetime型⇒テキスト型変換
Excelのカレンダー日を検索できるように、翌月末日のDatetime型をテキスト型に変換しておきましょう。

① アクションのテキストを開き、「日時の値をテキスト値に変換」をドラッグ&ドロップします

② 変換するDatetimeは、枠内をクリックして、変数{X}より %翌月末日% を選択します。
③ 使用する形式ですが、「標準」を選択すると yyyy/MM/dd のフォーマットになっています。このフォーマットでは例えば1月1日のときには、2026/01/01のように「0」がついてしまいます。⇒サンプル部分④を参照
ところが、Excelの標準で年月日を入力すると、例えば1月1日のときには、2026/1/1の形式で、「0」がありません。このため、形式を「カスタム」にして、Excelで表記している形式に合わせてあげる必要があります。ここでは、形式を「カスタム」にしておきます。
④ このExcelでの形式に合わせるには、カスタム形式のところを
yyyy/M/d としておきます。
これによって、月と日で1桁表示を可能にしておきます。サンプル部分も月が1桁表示になっており、Excelに入力したカレンダー表記にマッチしました。
⑤ 生成された変数は、この変換された値をExcelでの検索に用いることから、わかりやすいように「検索キー」と変数名を変更しておきます。
カレンダー内の検索
Excelのカレンダー日を検索できるように、変数である「翌月末日」のDatetime型をテキスト型に変換しておきましょう。

① アクションのExcelを開き、「Excelワークシート内のセルを検索して置換する」をドラッグ&ドロップします

② Excelインスタンスは、カレンダーのExcelシート自体を示す 変数%ExcelInstance2%を選択します。
③ 検索するテキストは、先ほどテキスト変換した変数 %検索キー%を 変数{X}から選びます。
④ 今回、検索でヒットした「列」と「行」を変数で保管しますが、使うのは検索した「行」のロケーションを扱う変数 %FoundRowIndex% のみとなります。
ここで、検索にヒットした=「休日」と一致する すなわち%FoundRowIndex% に何らかの数値(行数)が入っていることとなります。これは、1より大きい値を示すこととなります(1行目はタイトル)。
もし、ヒットしないとなると、これは休日ではありません。
このときは、変数 %FoundRowIndex% には「0」が入ります。
つまり判定は、「1」より大きい数値が入っていれば休日となり、その間は、「翌月末日」は1日分足し算していって、これを検索。そして、同じように「1」より大きい数値が入っているかを確認して、入っていないところまで、ループして1日分足していき、「1」より大きな数値で無いところまできたらループを抜けるようなしくみをつくれば、休日判定と同時に「翌月末日」を繰り上げられます。
この考え方は連休で続けて休日となるようなケースにおいて有効です。
ただし、翌日が土日になるような場合だと、あらためて土日判定する必要もあり、連休で土日とつながるようなケースは、連続してカレンダーに入れておけばよいことが理解できるのではないかと思います。
特定の条件下でループを繰り返す
今回は、カレンダー内に、対象となる「検索キー」が見つかっている間はループし、見つからなくなったあrループを抜けるような枠組みをまず作ります。

① アクションのループを開き、「ループ条件」をドラッグ&ドロップします。
これは、条件を定めておいて、その条件がループの先頭で成立している間はループを行い、その条件がはずれたらループを抜けるといったものです。

② 最初のオペランドは、比較する対象が、検索で引っかかった際に検索箇所のロケーションを示す
変数%FoundRowIndex% となります。変数{X}より選びます。
③ これが、「1」より大きいと、%FoundRowIndex% は検索行を格納するので、何かしら検索で引っかかったことになります。(検索してヒットした行数には無関係で、ヒットするかしないかを見ています)
逆に、検索されなかった場合は「0」となりますとなるので、演算子には「より大きい」を 選択することで判定条件とします。
④ 比較する値としては、③項のとおり「1」より大きいか否かという比較値となります。 つまり
%FoundRowIndex% >1 :%翌月末日% がカレンダーにある ⇒ループする
%FoundRowIndex% =0 :%翌月末日% がカレンダーにない ⇒ループから抜ける
ということになります。そしてループをしている間は、次の日にちを検索し続けるようにするため、
変数 %翌月末日% に1日足して、再度検索するといった形にします。
次の検索のために1日分足し算する
今回の検索でヒットしたが、次の日も検索でヒットするかを確かめる(連続休暇の確認)ため、ループ内で「翌月末日」に1日分足し算します。
アクションの日時を開き、「加算する日時」をドラッグ&ドロップすることでも構いませんが、すでに、上のフローで同じことを行っているアクションがあります。つまり「1日分を 翌月末日 に加算する」ブロックがあるので、これをループ内にコピーしてくることにします(そうすると新たに作る必要もないので楽です)。

① 「加算する日時(翌月末日を1日分)」のブロックをクリックし、「Ctrl+C」を押します。
② 「Ctrl+V」を押すことで、「加算する日時(翌月末日を1日分)」のブロックが追加されます。
③ 追加された「加算する日時(翌月末日を1日分)」のブロックを「ループ条件」と「End」の間にドラッグ&ドロップして移動します。
このような感じでループ内に
「加算する日時」がコピーされたらOKです。

次へ向けた検索を行う
1日分足した「翌月末日」を「検索キー」として、テキスト変換して「変換」することと、この検索キーを使って「検索」することもすでにアクションが上にあります。
このため、同じように今度は2つのアクションを同時にループの中にコピーしてきて、検索ヒットしている間は再びカレンダーの検索を行うような仕組みをつくります。
(もちろん、アクションをドラッグ&ドロップから新たに作成してもよいですが、こちらの方が楽です)

① 「日時のテキスト値に変換」ブロックと「Excelワークシート内のセルを検索して置換する」ブロックの2つをクリックし、「Ctrl+C」を押します。
② 「Ctrl+V」を押すことで、2つのブロックが追加されます。
③ 追加された2つの「日時のテキスト値に変換」ブロックと「Excelワークシート内のセルを検索して置換する」ブロックをまとめて「加算する日時」と「End」の間にドラッグ&ドロップして移動します。
このような感じでループ内に
「日時の値をテキスト値に変換」
「Excelワークシート内のセルを検索して置換する」の2つがループの中に埋め込まれたらOKです。
(ループ内の処理はこの3つのアクションと順序に注意して配置してください)

カレンダーを自動で消します(おまけ)
最後に、おまけ的要素ですが、カレンダーはこの後は表示しておく必要も無いので、アクションを使って自動で閉じます。

① アクションのExcelを開き、「Excelを閉じる」をドラッグ&ドロップします

② 特に今回、設定で変更することはありません。
・カレンダーのインスタンスはデフォルト %ExcelInstance2% で自動設定済み
・Excelを閉じる前: ドキュメントを保存しない
これで、基本エンジンの完成となります。動作確認をしてみましょう。
祝日カレンダーが機能しているか確認
それでは、翌月末日が祝日カレンダーを検索して、回避しているか確認してみましょう。

① 一旦セーブ💾して、実行「▶」してみましょう。
② 入力画面でわざと祝日カレンダーにある翌月末日を想定して、日にち指定してください。
ここでは、まず先ほどの土曜日となる2025/11/22などを入力してみます。
「翌月末日」には、2025/11/25となり、これは火曜日となっています。
土日を回避して、なおかつ翌日月曜の祝日も回避しているのでOKです。

③ 次に長期連休にあたる2025年12月31日 を指定してみます。
この長期連休は、2025/12/29~2026/1/4 までとなっています。
カレンダーが立ち上がって、翌月末日が連休明けの1/5と出たらOKです。
このように、任意の「日にち」を入力して、正しく「翌月末日」を示しているか、オリジナルカレンダーで確認してみてください。

請求書への反映(基礎⑤と基礎⑥の連携)
最後に、請求書への埋め込みを行い、正常な動作をするかテストしてみましょう。
その際には「PAD基礎⑤」で作ったフローを用意します。


① 今回作成したフローの2行目以降を選択してください。
② Ctrl+C を行い、一旦「基礎⑤」のフローの下にCtrl+Vを行うことで、コピー&ペーストされます。
③ これをドラッグ&ドロップで「加算する日時」と「Excelの起動」の間にまとめて移動していきます。
④ これで一連の請求書にて、お支払期限の部分に「翌月末日」を営業日ベースでプロットできるようになりました。
実際に動作させてみると、このように、現在日は依然とそのままで、お支払期限については、土日と祝日や休日を回避した形で、「翌月末日」からの「翌営業日」を示していればOKです。
明細は毎回異なりますが、こういった定型作業をPADがアシストしてくれるのは、何となく自動化された感じがしませんか!

まとめ
今回はカレンダー関連で良く使われる、Power Automate for desktop で土日や祝日そして個人で設定する休日などを回避しつつ、翌営業日としての設定方法などの考え方について学びました。
① 今回は土日や祝日を回避するテクニックを学びました。
② これには、条件分岐という考え方で対応できることを学びました
③ カレンダー検索で検索以外の活用方法(判定に使える)があることを知りました。
④ このブロックを使って他でも組み込み応用できるテクニックを学びました
このテクニックは、他の資料作成などにも活用することができるので、打ち込む手間を省きたい時には工夫次第で効果を発揮します。
日時設定の考え方は、最初は難しく感じますが、カレンダー設定などを筆頭に別のテーブルなど用いる工夫と今回学んだ条件分岐などの組み合わせでいろいろな対応できます。かなり自動化の知識が身についたと思いますので、アイデア次第でPCでの定型作業の自動化に応用していってください。
今回は以上となります。最後までご覧いただきありがとうございました。

