LoginSignup
0
1

More than 3 years have passed since last update.

Salesforce 数式 うるう年のロジック 

Last updated at Posted at 2019-11-26

SFDCの数式:うるう年の計算ロジック

【使用方法】ある日付を基準に、n年後の日付を自動算出する時に使用。

ex) 契約開始日(ContractDate)を入力したら、自動的にn年後(addYear)の契約更新日を算出する。
うるう年の2月29日が入力されたとき、n年後が平年である場合は3月1日を算出する。

変数 データ型 内容
ContractDate 日付型 基準日の項目
addYear 数値型 基準日からプラスする年数
IF(
  AND(
    MONTH(ContractDate) = 2,
    DAY(ContractDate) = 29,
    OR( 
      MOD( YEAR(ContractDate), 400 ) = 0, 
      AND( 
        MOD( YEAR(ContractDate), 4 ) = 0,
        MOD( YEAR(ContractDate), 100 ) != 0
      )
    )
  ),
  DATE( YEAR(ContractDate) + addYear,3,1),
  DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate))
)
【memo】

うるう年のルール
①. 4の倍数になる年=うるう年
②. 100の倍数になる年で400で割り切れない年=うるう年でない

つまり、
「400で割り切れる年」
または
「4で割り切れる年 かつ 100で割り切れない年」
は、うるう年になります。

うるう年を考慮せず、日付算出ロジック
DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate)
だけを数式に書くと、
入力した日付がうるう年であり、算出した日付がうるう年でない場合、存在しない日付となり、
「数式なのに日付が出力されない!」となりますのでご注意。(⌒∇⌒)



以上



追記:
更新日とかって大体、契約日-1 なんですよね。。
その場合はIF文の分岐結果部分を以下のように書き換えるだけ。

  DATE( YEAR(ContractDate) + addYear,3,1) -1,
  DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate)) -1
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1