【中級編】Salesforceのサブフローで「土日祝日判定」を作ってみよう!メンテ不要の営業日計算

公開日: 最終更新日:

20260107_001.png

この記事でわかること

  • Salesforceで「営業日(土日祝日を除く日)」を含めた計算をする方法
  • サブフローで処理することのメリット
  • 「土日祝日判定サブフロー」の処理内容
  • サブフローの具体的な作成手順

目次

はじめに

Salesforceのフローを使って業務を自動化していると、こんな悩みにぶつかることはありませんか?
 

「完了予定日を自動設定したいけれど、土日や祝日を除外した営業日で計算したい」  
 「申請から6営業日後に自動でタスクを作成したいけれど、休日をまたぐとズレてしまう」  
 「会社の営業日ベースで処理を動かしたいけれど、標準機能では土日祝日を考慮できない」
 

Salesforceのフローは非常に強力な自動化ツールですが、「営業日」という概念を扱う機能は標準では存在しません。そのため、たとえば「6営業日後に期日を設定する」という単純な要件でも、単純に `TODAY() + 6` としてしまうと、祝日や週末を跨ぐケースで誤った期日が設定されてしまいます。
 

こうした課題に対処する方法はいくつかありますが、最も再利用性が高く、管理者でも扱いやすい方法が「サブフロー化」です。
 

サブフローにしておくことで
 ・複数のフローから共通ロジックとして呼び出し可能
・休日判定のロジックを一元管理でき、メンテナンス性が向上
・フロー全体が複雑化せず、管理画面上でも見通しがよくなる
 といったメリットがあります。
 

さらに、今回紹介するサブフローは「日本の祝日カレンダー(公開カレンダー)」を参照しているため、管理者が毎年祝日データを手動で更新する必要もありません。 
 これにより、運用負荷を最小限に抑えつつ、正確な営業日判定が可能になります。
 

この記事では、Salesforce管理者の方が 「土日祝日を自動で判定し、再利用できるサブフロー(以後、「土日祝日判定サブフロー」と呼びます)」を構築できるようになることを目指します。 

構成の全体像から、具体的なフロー要素、変数設計、処理ロジックまで、実際に業務で使えるレベルの内容を丁寧に解説していきます。

 

そもそもサブフローってなに?と疑問に思った方は、こちらの記事をご参照ください。
【初心者向け】Salesforceのサブフローってなに?使い方を分かりやすく解説

 

\Salesforceの設定でお困りですか?専門エンジニアがサポートします/
 
今すぐ相談する  事例を見る

土日祝日判定サブフローの処理内容

この章で扱う処理では、「開始日」「終了日」という言葉が入力と出力の両方で登場します。
 そのため、記事を読み進める前に、まず以下の用語定義を共有しておきます。
 

本サブフローで使用する用語
・入力開始日:サブフローに渡す開始日(画面フローや親フローから入力)
・入力終了日:サブフローに渡す終了日
・調整後開始日:土日祝を考慮して計算された“結果の開始日”
・調整後終了日:土日祝を考慮して計算された“結果の終了日”
・判定期間:入力開始日〜入力終了日の期間
・数日後の判定ON:営業日を未来方向にずらす
・数日後の判定OFF:営業日を過去方向にずらす
 

具体的な動作例(デバッグ結果) 
まずは、このサブフローが実際にどう動くのか、デバッグ結果を先に見てイメージを掴んでください。

 

▼ケース1:数日後の判定ON
 入力開始日に10月9日、入力終了日に10月15日を入力し、数日後の判定にチェックを入れます。
入力開始日と入力終了日の間(判定期間)は7日間です。
数日後の判定はONなので、10月9日を含めて7営業日分の日程を確保した日付である10月20日を、調整後終了日として出力してもらえるとよさそうですね。
実際に土日祝日判定フローボタンを押下すると、
土日祝カウント変数、土日祝の日付、調整後開始日/調整後終了日、サブフロー結果が正しく出力されています。入力終了日が10月15日でしたが、調整後終了日は20日で出力されています。

20260107_002.png

▼ケース2:数日後の判定OFF
 逆に、数日後の判定のチェックを外し、土日祝日判定フローボタンを押下してみましょう。
 数日後の判定がOFFなので、10月15日を含めて7営業日さかのぼった日を算出することになります。
 狙い通り、入力開始日は10月9日で、調整後開始日は10月6日と出力されています。

20260107_003.png

■処理内容
 「土日祝日判定サブフロー」は、以下のような目的で設計されています。
 1.入力開始日〜入力終了日の期間をもとに、営業日換算後の「調整後終了日」を返す
 例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、判定期間は7日間となり調整後終了日は10月20日

20260107_004.png

2.入力開始日〜入力終了日の期間をもとに、営業日換算後の「調整後開始日」を返す
 
例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、判定期間7日間となり調整後開始日は10月6日

20260107_005.png

3.入力開始日~入力終了日の中で土日のカウント数を出力
 例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、カウント数は4
 

4.入力開始日~入力終了日の中で祝日のカウント数を出力
 例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、カウント数は1
 

5.入力開始日~入力終了日の中で土日の日付を出力
 例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、土日は2025年10月11日、2025年10月12日、2025年10月18日、2025年10月19日
 

6.入力開始日~入力終了日の中で祝日の日付を出力
例)入力開始日に2025年10月9日、入力終了日に2025年10月15日を設定した場合、祝日は2025年10月13日
  
7.サブフローが処理成功したかどうかの判定
例)成功時はtrue、失敗時はfalse
 

8.呼び出し元フローへ結果を返却する
出力変数として、休日一覧と件数を返すことで、他のフローで「営業日ベースの処理」に組み込むことができます。
 


このサブフローが活躍するのは、以下のような場面です。
・完了予定日を「申請日+◯営業日」で設定したい
・案件の進行スケジュールを、休日を除外して期間計算したい
・タスクやToDoを「営業日換算」でリマインドしたい
・契約更新や請求処理のように、休日を跨ぐと業務上のトラブルになる処理を自動で回避したい

全体処理の流れ

具体的な作成手順に映る前に、フロー全体の処理イメージを説明します。
 

このフローは、開始から終了まで以下の順に処理が進みます。 
1.開始日と終了日の一致判定
2.祝日データの取得 
3.昇順・降順による日付ループ処理
4.土日祝日判定(ループ処理)
5.結果の出力(休日一覧・件数)

20260107_006.png

前提条件として、公開リソースカレンダーに祝日マスタデータを作成する必要があります。
 下記サイトに祝日の作成の手順が記載されていますので、こちらを参考に作成してください。
 祝日マスタの追加方法

 

⑴公開カレンダーの作成
Salesforceの画面右上にある「設定」をクリックします。
クイック検索ボックスに「公開 & リソースカレンダー」と入力し、該当する設定項目を選択します。「新規」をクリックし、カレンダー編集画面を開きます。
任意のカレンダー名(例:日本の祝日)を入力し、「有効」にチェックを入れて「保存」をクリックします。

20260107_007.png

この公開カレンダーが祝日マスタとして利用されます。
 

⑵公開カレンダーの共有設定
 作成した祝日マスタをユーザー全員で参照できるように共有設定を行います。
 作成した公開カレンダーの詳細画面から「共有」をクリックします。遷移先の画面で「追加」をクリックし検索欄で「公開グループ」を選択し、「すべての内部ユーザ」を追加します。
 アクセス権は「詳細の表示 + 新規行動の追加」など必要な権限を付与し、「保存」をクリックします。

20260107_008.png

これで所属ユーザー全員が祝日一覧をカレンダーとして表示できるようになります。

 

⑶祝日データの登録
 多数の祝日を一括で登録したい場合は、DataLoaderを使ったCSVインポートが便利です。
※祝日マスタの追加方法を参考に、【Dataloader用】日本の祝日_2026年度版のCSVをダウンロードしてください。

 

20260107_009.png

公開カレンダーの画面URLからリソースIDをコピーします。
 予め用意した CSV ファイルにリソースIDと日付・タイトル(祝日名)を設定します。
 DataLoaderでEvent オブジェクトに対してCSVのInsertを実行します。
 登録後、カレンダー上に祝日一覧が反映されます。

⑷カレンダーへの祝日表示
 祝日データが登録できたら、ユーザーがカレンダー上に表示できるように設定します。
 カレンダー画面を開き、カレンダーを追加を選択します。
 公開&リソースカレンダーのタブから「日本の祝日」を選択し、カレンダーに追加します。
 これにより、Salesforce の標準カレンダー上で祝日が視覚的に表示されるようになります。
 

カレンダーに祝日を登録しておくことで、今回作成する土日祝日判定サブフローから正確に祝日データを参照できるようになります。
この方法を事前に設定しておくことで、サブフローに祝日情報を正確に渡せるようになります。

 

具体的なサブフローの実行イメージ

例えば、ユーザーからの問合せやケースが作成されたときに、運用保守でのタスクを管理するオブジェクトのレコードを自動生成する処理があるとします。
 

その際のフローの実装画面例を見てみましょう。

20260107_010.png

キャプチャの1から順に、内容を解説します。

1.ケース作成がトリガー
2.サブフローで営業日を判定
 申請日とその時間から、土日祝日を除いた「営業日」ベースで終了予定日(DueDate)を算出します。
 

※設定画面
 var_startDateの入力値を渡す場合、ケース作成日の項目を日付時間型から日付型に変換してから渡しています。
 var_closeDateで期日を5営業日などにする場合は、ケース作成日+4日加算してから渡しています。
 

 

20260107_011.png
20260107_012.png

3.サブフロー結果分岐
 サブフローが成功した場合のみ、以降の処理を実行します。
 

4.タスク管理レコード情報のセット
 申請元ケースのIDや開始日、サブフローで出力された締切日(DueDate)等をタスク管理用レコードに割り当てます。
 

5.担当者の自動判定と割り当て
 ケースの種別に応じて、担当者を1人目、2人目、3人目のいずれかに割り当てます。
 

6.タスク管理レコードの作成
割り当て情報、担当者がセットされたタスク管理レコードを作成する。
 

ケースレコード作成時、自動的に土日祝日を除いた営業日判定・担当者判定を行ってタスク管理レコードを作成することで、業務の抜け漏れ防止と効率化を図る処理となっています。

 

\Salesforceの設定でお困りですか?専門エンジニアがサポートします/
 
導入事例を見る テラテクのエンジニア派遣について

作成手順

ここからは、土日祝日判定サブフローの作成手順を解説します。
 

⑴変数の設定
 まず最初に変数を設定します。
 「入力/出力変数」
 ・var_startDate:判定開始日

20260107_013.png

・var_closeDate:判定終了日

20260107_014.png

「出力変数」
 ・aFewDaysLaterFlug:数日後(True)/数日前(False)モード切替

20260107_015.png

「出力変数」
 ・collectionHolidayDate:判定期間内の祝日一覧

20260107_016.png

・collectionWeekendDate:判定期間内の土日一覧

20260107_017.png

・var_holidayCount:祝日の件数

20260107_018.png

・var_weekendCount :土日の件数

20260107_019.png

・operationFlug:処理成功(True)/失敗(False)

20260107_020.png

「フロー内の変数」
 ・var_matchstartDate:var_startDateとvar_closeDateが一致しているか判定する用の変数
 └デフォルト値にvar_startDateを設定

20260107_021.png

⑵数式を作成
 ・formula_datearound3yearsago:祝日の取得範囲を決めるための数式
 └var_closeDateから3年前を設定

20260107_022.png

・formula_datearound3yearslater:祝日の取得範囲を決めるための数式
 └var_closeDateから3年後を設定

20260107_023.png

・formula_loop_collectionDate:ループ対象の日付の土日判定で使用する数式
 ※注意
 本数式では、ループ中の現在の日付(loop_collectionDate)を使用します。
 そのため、⑺「collectionDateをループする処理」を先に作成しないと、数式作成画面で対象項目が選択できません。
 必ず⑺の作成完了後に、本数式を作成してください。

20260107_024.png

ここまでで、本サブフローで使用する各種リソース(変数・数式・カレンダー設定など)の準備が整いました。
 以降の手順では、これらのリソースを実際にフロー上でどのように土日祝日を考慮した日付判定ロジックを構築していくのかを、順を追って解説していきます。
 

それでは、フロー本体の作成に進みましょう。

20260107_025.png

⑶var_matchstartDateとvar_closeDateが一致するかの判定
 

①var_matchstartDate=サブフローに入力した開始日とvar_closeDate=サブフローに入力した終了日が一致するか判定し、一致するまでコレクションの日付型変数(collectionDate)に追加する
 例)開始日=2025年10月9日、終了日=2025年10月15日の場合、最終的に(collectionDate)には「2025年10月9日,2025年10月10日,2025年10月11日,2025年10月12日,2025年10月13日,2025年10月14日,2025年10月15日」が入る

20260107_026.png

②一致していない場合、コレクションの日付型変数(collectionDate)に開始日を追加し、var_matchstatDateに1日追加

20260107_027.png

③一致している場合、collectionDateにvar_closeDateを追加

20260107_028.png

⑷祝日マスタ取得
 └割当先Idは公開&リソースカレンダーの”日本の祝日”のId
 └ActivityDateの昇順で並び替え
 └保存するレコード数はすべて
 └保存する項目はId、ActivityDate、Subject

20260107_029.png
20260107_030.png

└※取得失敗時に処理失敗の処理を追加

20260107_031.png

⑸⑷で取得した祝日レコードをコレクション変数に変換する

20260107_032.png

⑹数日後か数日前か判定する
 
①数日前の場合、collectionDateを降順に並び替え
 

【collectionDateを降順に並び替える理由は?】
 collectionDateを昇順のままループで最後の項目から最初の項目への処理を行うと反復が3、2、1、0となり、ループの中でcollectionDateに日付を最初に追加してもループ処理が終了します。
collectionDateを降順に並び替えたうえで、最初の項目から最後の項目への処理を行うことで0、1、2、3となり、ループの中でcollectionDateに日付を追加してもループ処理が終了しないため、降順に並び替えます。
 例)1週目:2025-10-15、2週目:2025-10-14、3週目:2025-10-13~~

20260107_033.png
20260107_034.png

⑺collectionDateをループ

20260107_035.png

⑻祝日の判定で祝日である場合
 ①コレクション変数に祝日を追加
 ②数日後か判定
 ③数日後の場合:祝日の日数をカウントしvar_closeDateに1日追加
 ④数日前の場合:祝日の日数をカウントしvar_startDateに1日追加

20260107_036.png

⑻-①コレクション変数に祝日を追加
 コレクションの日付型変数に(collectionHolidayDate)祝日の日付を追加

20260107_037.png

⑻-②数日後か判定

20260107_038.png

⑻-③数日後の場合:祝日の日数をカウントしvar_closeDateに1日追加
 └祝日用のカウント変数(var_HolidayCount)に1を追加することでサブフローの出力に使用可能
 └collectionDateに祝日カウントで追加した日付(var_closeDate)を追加することで再度ループさせる=追加された日付が土日祝であるか判定させるため

20260107_039.png

⑻-④数日前の場合:祝日の日数をカウントしvar_startDateに1日追加
 └祝日用のカウント変数(var_HolidayCount)に1を追加することでサブフローの出力に使用可能
 ・collectionDateに祝日カウントで減算した日付(var_startDate)を追加することで再度ループさせる=減算された日付が土日祝であるか判定させるため

20260107_040.png

⑼土日の判定で土日である場合
 ①コレクション変数に土日を追加
 ②数日後か判定
 ③数日後の場合:土日の日数をカウントしvar_closeDateに1日追加
 ④数日前の場合:土日の日数をカウントしvar_startDateに1日追加

20260107_041.png

⑼-①コレクション変数に土日を追加
 コレクションの日付型変数に(collectionWeekendDate)土日の日付を追加

20260107_042.png

⑼-②数日後か判定

20260107_043.png

⑼-③数日後の場合:土日の日数をカウントしvar_closeDateに1日追加
 └土日用のカウント変数(var_WeekendCount)に1を追加することでサブフローの出力に使用可能
 └collectionDateに土日カウントで追加した日付(var_closeDate)を追加することで再度ループさせる=追加された日付が土日祝であるか判定させるため

20260107_044.png

⑼-④数日前の場合:土日の日数をカウントしvar_startDateに1日追加
 └土日用のカウント変数(var_WeekendCount)に1を追加することでサブフローの出力に使用可能
 └collectionDateに土日カウントで減算した日付(var_startDate)を追加することで再度ループさせる=減算された日付が土日祝であるか判定させるため

20260107_045.png

⑽collectionDateの次のループの処理へ進み、全ループが完了したら処理成功を割り当て

20260107_046.png

以上で、フローの作成は完了です。

まとめ

この「土日祝日判定サブフロー」を導入することで、
 単なる日付加算ではなく、実際の営業日ベースでの締切管理・通知設定が可能になります。
 

再利用性が高く、他のフローにも簡単に組み込めるため、
 Salesforce管理者が作成する業務フローの精度を大きく向上させることができます。
 

是非ご利用してみてください。