数式のお勉強:日付から該当月に日曜日が何回あるかを計算する数式

数式のお勉強:日付から該当月に日曜日が何回あるかを計算する数式

数式では特定の状況を定義し直しますが、「定義し直す」ということが初心者にはハードルとなります。数式の例をご紹介しますので、ぜひパターンのひとつとしてご活用ください。
数式のお勉強:日付から該当月に日曜日が何回あるかを計算する数式
5
数式のお勉強:日付から該当月に日曜日が何回あるかを計算する数式
Admin
2020/11/09 15:52:39
個人的に、数式の作成には創造性が求められると思っています。

Salesforce社さんで用意してくださっているサンプルなどから、関数と数式の知識を蓄積し、何度も数式を作ってはテストをして、「ここ、こうしたらいけるかも?」という閃きから数式を作ってきました。
インプット + 試行錯誤 + 閃き = 素敵な数式 です。多分。

数式に苦手意識がある方に、今日は日付まわりの関数を使った数式の例をご紹介します。


日付からその月に日曜日が何回あるかを計算する数式


準備する項目


① 基準となる日付項目を「基準の日付」[BaseDay__c]とする。


② ①の月初の日付を出す数式項目「月初の日付」[FirstDay]を作成。
 戻り値のデータ型:日付
 数式:DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 1)

③ ①の月末の日付を出す数式項目「月末の日付」[LastDay__c]を作成。
 戻り値のデータ型:日付
 数式:ADDMONTHS( FirstDay__c ,1) - 1



該当月の日曜日を計算する数式

①②③を使って、4つ目の数式項目「基準の月の日曜日の数」[SunNum__c]を作成。

戻り値のデータ型:数値
数式:
4
+ IF( AND( DAY(LastDay__c)>=29, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=30, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=31, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)


考え方

どの月でも日曜日は必ず4回はあります。29・30・31日が日曜日になる場合は、さらに1回加わる、という考えで式を作成しました。
これを踏まえて、数式の意味を分解してみます。

4
+ IF( AND( DAY(LastDay__c)>=29, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=30, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=31, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)



4
日曜日は最低4回あります。

+IF( AND( DAY(LastDay__c)>=29,
「月末の日付」が29日以上(以降)のとき、次の数値を足します。

WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)
「基準の日付」の年、基準の日付の月、29日の値から計算した曜日が日曜であれば1、それ以外は0

+IF( AND( DAY(LastDay__c)>=30,
「月末の日付」が30日以上(以降)のとき、次の数値を足します。

WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)
「基準の日付」の年、基準の日付の月、30日の値から計算した曜日が日曜であれば1、それ以外は0

+IF( AND( DAY(LastDay__c)>=31,
「月末の日付」が31日以上(以降)のとき、次の数値を足します。

WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)
「基準の日付」の年、基準の日付の月、31日の値から計算した曜日が日曜であれば1、それ以外は0


表示を確認します

2020年11月は
カレンダーを確認すると、2020年11月は日曜日が5回あります。
作成した数式項目でも、5と表示されています。

2021年2月は
カレンダーを確認すると、2021年2月は日曜日が4回あります。
作成した数式項目でも、4と表示されています。

成功です👏


ポイントとなる関数

WEEKDAY(date)
(date)には日付項目が入り、その曜日を、1 (日曜日)、2 (月曜日)、~ 7 (土曜日) で返します。



参考

◇ Salesforce >ヘルプ >数式の演算子と関数 A – H
◇ Salesforce >ヘルプ >数式の演算子と関数 I – Z


gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
5
コメント