月に日曜日が何回あるか 計算できますか?

 2019.08.09 customer_success

こんにちは。Salesforce運用支援サービス「AGORA」のサポート担当 Miyazakiです。

日々、お客様から頂くさまざまなお問い合わせの中から「他のSalesforce管理者も直面するかも!?」という事象と解決内容をピックアップして紹介します!
今回はちょっとひねった(?)数式の作り方について。

その月に日曜日が何回あるか、どうやって計算する!?

お客様から頂いたご質問は、
「 その月に日曜日が何回あるか、特定の日付をもとにして計算して表示させることはできるか?」というもの。
例えば、特定の日付が 2019/5/7 の場合 日曜日の数は「4」、2019/6/20 の場合 日曜日の数は「5」となるわけですね。ふむふむ。。。

Excelではこんなドンピシャな関数があるのですが、Salesforceでは無い…なぁ。
Salesforceのヘルプにある「2 つの日付間の営業日数を確認する」の数式を応用できないかなぁ、など色々考えたのですが…う~ん、なかなか上手く行かない…。

解決方法

月初め(1日)から月末最終日(28日 or 29日 or 30日 or 31日)の間に、日曜日が何回あるか?
という視点で計算しようとしていたのですが…。

ちょっと考え方を変えてみよう!
ひと月の日曜日の回数というのは、1月~12月までどの月でも 4回 or 5回 のどちらかしかあり得ないよな…。だいたいの月は4回で、たまーに5回になる。じゃあ、5回になるのはどんなとき?

この視点で数式を作成すると、このようになりました。

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

② 月初の日付を出すための 数式項目[FirstDay]を作成。
数式:DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 1)

③ 月末の日付を出すための 数式項目[LastDay__c]を作成。
数式:ADDMONTHS( FirstDay__c ,1) – 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回である。)
29・30・31日が日曜日になる場合のみ、さらに1回加わる。
という内容を数式であらわしたのです。

発想の転換って大事ですね!
(すみません、自力で思いついたのではなく先輩のアドバイスでこのような数式が生まれたのですが、目からウロコでした…!)

最後に

「Salesforceの数式で こんなの作れないかな?」
「何とか自分で設定してみたけど、このやり方で合っているのかな…?」
日々の運用で悩むこと、Salesforceのヘルプを見たけれど解決方法が分からないことなどちょっとしたことを相談できるサービスがあるといいなと思うことはありませんか?

AGORAには、Salesforceの解説書「活用ガイド」、有資格者が応対する「問い合わせサービス」、便利ツール「AGORAモール」など、さまざまなサービスがございます。
詳細はこちらよりご覧ください。

なお、AGORAではSalesforce活用のための各種セミナーを随時開催しています。 みなさまのご参加をお待ちしています。今後の開催日程については、ぜひフォームからお問い合わせください。

ブログ購読のご案内