Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

月数を加えて終了日を計算するための複数の数式

公開日: Oct 13, 2022
説明

※この記事は英語版を翻訳しており、一部に機械翻訳を含むため内容は後日更新される可能性があります。最新の内容は英語版を参照してください。表示言語は画面右下の言語名から切り替えられます。

開始日にある月数 (期間) を加えて終了日を計算することは極めて単純明快に見えるかもしれませんが、実際の暦月の長さは 28、29、30、または 31 日であるため、「1 か月」が何日であるべきかについては異なる解釈およびビジネスニーズがあります。

次のような、追加の考慮事項や可能性のある落とし穴があります。

  • 終了年の適切な計算
  • うるう年の処理
  • 2 月 30 日やと 4 月 31 日などの存在しない日付の回避

以下に示すのは、開始日に「月数」を加えて終了日を決定するための異なる方法に対するいくつかの数式項目解法であり、次のバリエーションを含みます。
  1. 終了日は、短い終了月の最終日に制限された、開始日からの日付を使用する
  2. 月 = 28 日 (または 30、31、その他の任意の固定の数値)
  3. 終了日は常に特定の日付 (1 日、15 日など) になる
  4. 終了日は開始日からの日付を使用するが、短い月の最後の無効な日付を回避するために必要な場合は翌月の 1 日に飛ぶ

これらの各数式項目の例では、次の入力項目を使用します。各項目を実際の項目名に変更してください。
  • 開始日 (Start_Date__c): 日付
  • 月数 (Months__c): 数値、0

これらのすべての数式を実装するには、次のようにします。
  • 実際の項目 API 参照名を代入します。
  • これらのすべての数式項目の一番下で [空白項目を空白として扱う] を選択します。
  • 期間/月数が数値の選択リスト項目である場合は、これらの数式でそれを VALUE( TEXT( Picklist_Field_API_Name)) として参照します。
  • オプション: 計算後に終了日を手動で編集できるようにするため、または数式項目の文字制限を回避するために、真の日付データ項目へのプロセスビルダー項目更新として実装します。

 

 

解決策
バリエーション 1: 開始日からの日付を使用し、短い月の最終日に制限する

これらの要件のために、単純に ADDMONTHS() 関数を使用します。

数式項目 (日付) の作成: "終了日"

説明: "暦月の数を加えるが、必要に応じて短い月の最終日に制限する"

ヘルプテキスト: "開始日 + 月数。必要に応じて短い月の最終日に制限"

数式:
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

ADDMONTHS( Start_Date__c , Months__c )
)


バリエーション 2: 月 = 28 日 (または 30、31、その他の任意の固定の数値)
注意: 28 以外の数値を使用するには、この数式に 28 の代わりにその希望の数値を代入します。

数式項目 (日付) の作成: "終了日"

ヘルプテキスト: "月は 28 日の期間"

数式:
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

/* 開始日に 28 日の月の特定の数を加える */
Start_Date__c + ( Months__c * 28 )
)


バリエーション 3: すべての終了日に特定の日付 (1 日、15 日など) を使用する

注意: 終了日が常に特定の日付になるようにするには、より短い月に対して無効な日付が生成されてしまうため、28 より大きい数値は絶対に選択しないでください。

数式項目 (日付) の作成: "終了日"

説明: "終了年月を数学的に決定するが、すべての終了日に社内標準の固定された日付を使用する"

ヘルプテキスト: "終了日は常にその月の 15 日になる"

数式:
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

/* 終了日を計算する */
DATE(

/* 終了日の年を計算する */ 
YEAR( ADDMONTHS( Start_Date__c , Months__c )) ,

/* 終了日の月の数を計算する */ 
MONTH( ADDMONTHS( Start_Date__c , Months__c )) ,

/* 終了日を設定する */
15 )  /* 社内標準の固定された終了日の日付 */   希望の日を代入する
)


バリエーション 4: 開始日からの日付を使用し、短い月の無効な日付を翌月の 1 日に飛ばす (たとえば、4 月 31 日を 5 月 1 日に変更する)

最終的な数式項目をより簡単に読み取り、作成、変更、理解できるようにするために、基礎となる非表示数式項目を作成します。注意: このバリエーションには、3 つの数式項目の作成が含まれています。


1) 非表示数式項目 (数値、0) の作成: "終了年"

説明: "この非表示項目は「終了日」数式項目で参照される"

数式:
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 終了日の年を計算する */
YEAR( ADDMONTHS( Start_Date__c , Months__c ))
)


2) 非表示数式項目 (数値、0) の作成: "終了月"

説明: "この非表示項目は「終了日」数式項目で参照される"

数式:
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 終了日の月の数を計算する */
MONTH( ADDMONTHS( Start_Date__c , Months__c ))
)


3) 数式項目 (日付) の作成: "終了日"

説明/ヘルプテキスト: "開始日 + 月数。短い月の最後を超えていない限り同じ日付、超えている場合は翌月の 1 日"

数式:
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 短い月の最後を超えている無効な終了日かどうかをチェックする */
IF(

/* うるう年とうるう年以外の 2 月の無効な終了日 */
( End_Month__c = 2
&&
(
( MOD( End_Year__c , 4 ) <> 0  /* うるう年ではない */
&& DAY( Start_Date__c ) > 28 )  /* 2 月 28 日を超えている */
||
( DAY( Start_Date__c ) > 29 )  /* うるう年で 2 月 29 日を超えている */
))

|| 
/* 30 日の月で終了日が 31 日になる */
(( End_Month__c = 4   /* 4 月 */
|| End_Month__c = 6   /* 6 月 */
|| End_Month__c = 9   /* 9 月 */
|| End_Month__c = 11 ) /* 11 月 */
&& DAY( Start_Date__c ) = 31 ) ,

/* より短い月の最後の無効な終了日を回避するために翌月の 1 日を使用する */
DATE ( End_Year__c , End_Month__c + 1 , 1 ) ,

/* または、終了日が有効な日付である場合は開始日と同じ日付を使用する */
DATE( End_Year__c , End_Month__c , DAY( Start_Date__c ))
))
ナレッジ記事番号

000381089

 
読み込み中
Salesforce Help | Article