Salesforceの数式項目を使用した日付処理のテクニック

技術コラム

Arata Miura

Salesforceの数式項目を使用した日付処理のテクニック

Arata Miura

商談の成約日や契約の開始・終了日など、Salesforce上で日付を管理されている方は多くいらっしゃると思います。

このような日付情報を数式項目で処理することで、Salesforceの活用の幅を広げることができます。
数式はフローやAPEXなどに比べて機能は少ないものの、工夫次第で様々なことが可能です。

この記事では、Salesforceのシステム管理者向けに、数式項目で日付を処理する際の代表的なテクニックをピックアップしてご紹介します。

はじめに

この記事では、以下の項目を、元の基準日となる日付項目として使用します。

・日付(入力) (API参照名:InputDate__c)

この日付項目を数式で処理し、以下の項目に出力します。

・数式(出力)

数式が複雑になり、わかりにくくなることを避けるため、日付がブランクの場合の処理は割愛しています。
必要な場合は、適宜処理を追加してください。

日付のテキスト変換

帳票の差し込み文言など、日付を指定書式のテキストに変換するニーズは多く存在します。
書式フォーマットごとに数式のサンプルを例示します。

数式の出力はテキスト型になります。

yyyy-MM-dd形式

TEXT関数で、yyyy-MM-dd形式に変換可能です。

TEXT関数はユーザーのロケールに依存せず、必ずyyyy-MM-dd形式で日付を返します。

TEXT(InputDate__c)

yyyy/MM/dd形式

TEXT関数で変換したyyyy-MM-dd形式をベースに、SUBSTITUTE関数で「-」を「/」に置換します。

SUBSTITUTE(TEXT(InputDate__c), "-", "/")

yyyyMMdd形式

上記と同様に、SUBSTITUTE関数による置換を活用します。

区切り文字の「-」を空文字に置き換えればOKです。

SUBSTITUTE(TEXT(InputDate__c), "-", "")

yy/M/d形式

西暦の末尾2桁が必要な場合は、TEXT関数でyyyy-MM-ddに変換後にMID関数で3文字目から2文字分を切り出します。

MID関数は、文字位置の数え方が1から始まりますので注意してください。

月・日の10の位の0を除去(0サプレス)したい場合は、MONTH関数・DAY関数で数値に変換した後に、TEXT関数で文字列に変換します。

MID(TEXT(InputDate__c), 3, 2) + "/"
+ TEXT(MONTH(InputDate__c)) + "/"
+ TEXT(DAY(InputDate__c))

yyyy年MM月dd日(曜日)形式

曜日も数式で作ることができます。

WEEKDAY関数は曜日を1~7で返しますので、CASE関数と組み合わせて曜日文字列を生成します。

MID(TEXT(InputDate__c), 1, 4) + "年"
+ MID(TEXT(InputDate__c), 6, 2) + "月"
+ MID(TEXT(InputDate__c), 9, 2) + "日("
+ CASE(
      WEEKDAY(InputDate__c),
      1, "日",
      2, "月",
      3, "火",
      4, "水",
      5, "木",
      6, "金",
      "土"
)
+ ")"

日付の計算

毎月の請求日や契約終了日など、基準日から特定の日付を計算し、数式で出力するニーズも多く存在します。\代表的なものを例示します。

数式の出力は日付型になります。

基準日のn日後(前)

単純なn日後(前)であれば、「+」「-」演算子による加減算が可能です。

InputDate__c + 20

InputDate__c - 1

年をまたいだ場合や閏年の場合も、日数で計算されるため、問題ありません。

翌月の初日

DATE関数で「基準日と同じ年・同じ月の1日」を生成し、ADDMONTHS関数で+1ヶ月することでシンプルに書けます。

ADDMONTHS(DATE(YEAR(InputDate__c), MONTH(InputDate__c), 1), 1)

年をまたいでも問題ありません。

DATE関数は、年・月・日を指定して日付を作成することができます。

ただし、存在しない日付(2025/2/29や2024/13/01など)を入力すると何も値を返さないので注意が必要です。

「基準日と同じ年・同じ月の1日」は必ず存在するため、月の計算を行うときに便利です。

翌月の月末

月の初日の数式と加減算を組み合わせればシンプルに書けます。

DATE関数で「基準日と同じ年・同じ月の1日」を生成し、ADDMONTHS関数で翌々月まで送ったあとに-1日します。

ADDMONTHS(DATE(YEAR(InputDate__c), MONTH(InputDate__c), 1), 2) - 1

年をまたいだり、日数が少ない月や閏年でも問題ありません。

1ヶ月契約の契約終了日

基準日を契約開始日とし、契約終了日を数式で算出します。

民法上の一般的な算出方法では、契約終了日は「契約開始日の応当日の前日」になります。
応当日とは「契約開始日と年月日の日が同じ日付」のことです。
1ヶ月後が2/30であるなど、応当日が存在しない場合はその直前の存在する日付を契約終了日として扱います。

ADDMONTHS関数を利用することで意外にもシンプルに書けます。

ADDMONTHS(InputDate__c - 1, 1)

年をまたいだり、日数が少ない月や閏年でも問題ありません。

3ヶ月契約、1年契約、3年契約等の場合はそれぞれADDMONTHS関数で加算する月数を3, 12, 36と変更することで対応可能です。

ADDMONTHS関数の仕様に注意してください。

ADDMONTHS関数は月の最終日を入力すると必ず最終日を返します。

また、結果が存在しない日付になる場合はその直前の日付を返します。

一度日付を-1日してからADDMONTHS関数を使用すると、ちょうど求める仕様通りの動きになります。

やや変則的な動作になるので、時間があるときにパターンごとの動作を調べてみると面白いかもしれません。

数式での処理が難しいもの

「月の第n営業日」など、祝日や会社ごとのカレンダーを考慮する必要がある場合は数式での処理は難しくなります。

こういった場合は、フローやAPEXを使用して実現する必要があります。

まとめ

この記事では、Salesforceの数式項目を使用した日付処理のテクニックをご紹介しました。

Salesforceの数式項目を活用することで、情報を可視化し、業務効率を高めることができます。

本記事で紹介した内容だけでも、様々な日付処理が可能であることをお伝えできたかと思います。

しかし、より高度な日付処理が必要な場合は、フローまたはAPEXでの処理が必要になることもあります。

サンブリッジでは、長年にわたるSalesforceの導入や開発に関する知識を活かし、貴社の課題を解決するための幅広い支援が可能です。

Salesforceに関する課題をお持ちの方は、ぜひ一度サンブリッジまでご相談下さい。

Salesforce導入・活用支援のご案内

サンブリッジが提供するSalesforce導入支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。

関連記事