みなさん、計算プラグインはお使いでしょうか。
計算プラグインではExcelライクな関数が100種類以上使えるため、様々な計算を行うことができます。(サポート関数についてはこちら)
今回は日付の計算でよく使われる
- 指定日のnか月後の月末日の計算
- 指定日のnか月後の1日の計算
- 開始日から終了日までの年数の計算
- 指定日の曜日の計算
- 指定日の和暦の計算
について 、計算プラグインで実現する方法についてご紹介します。
ではまず初めに月末日の計算についてです。
■月末日を計算しよう
Excel関数をご存じの方はすぐにお気づきかと思いますが、EOMONTH関数を使っていきます。
使い方は簡単で、
kintone アプリの設定画面で、フォームに
- 結果フィールド(日付型):計算結果を表示したいフィールド。※必須
- 日付フィールド(日付型):計算に使う指定日のフィールド。※任意:計算式に直接入力するのであればフィールドは不要
- 月数フィールド(数値型):計算に使う月数のフィールド。※任意:計算式に直接入力するのであればフィールドは不要
を設定します。
次に、アプリの設定画面から計算プラグインを追加します。(プラグインの追加方法についてはこちら)
最後に、計算プラグインの設定画面で以下の様に設定します。
- 計算式設定フィールド:結果フィールドを設定
- 計算式(Excelと違い、式の先頭に = は必要ありません):
例1:
EOMONTH("2024-08-15", 1)
例2:
EOMONTH(日付フィールド, 月数フィールド)
以上です。
例1であれば、結果フィールドは "2024-09-30" と表示されます。
計算式が
EOMONTH("2024-08-15", -1)
であれば、結果フィールドは "2024-07-31" と表示されます。
また、例2ですが、このままの式を使用すると数値フィールドに値が入っていない場合にエラーになります。
実際使う際には
EOMONTH(日付, IF( ISBLANK(月数), 0, 月数) )
といった式で月数が未設定の場合には0とすれば、エラーが表示されることはありません。
計算式はフィールド値でも直接入力でも構いませんので、
例3:
EOMONTH("2024-08-15", 月数フィールド)
例4:
EOMONTH(日付フィールド, 1)
としていただいても問題ありません。
■月初日を計算しよう
もう、おわかりの方もおられるかもしれませんが、
月初日というのは月末日の翌日なので、
計算式を
例1:
EOMONTH("2024-08-15", 1) + 1
例2:
EOMONTH(日付フィールド, 月数フィールド) + 1
例3:
EOMONTH("2024-08-15", 月数フィールド) + 1
例4:
EOMONTH(日付フィールド, 1) + 1
とするだけですね。
「指定日のnか月後の1日」とする場合は、月数にご注意ください。
例1で言えば、翌月1日(2024-09-01)を求めたい場合は
EOMONTH("2024-08-15", 0) + 1
※0か月後の末日(2024-08-31)+1日
となります。
ここでおまけをひとつ。
■日付の計算結果を文字列(1行)に表示してみよう
計算式設定フィールドで文字列(1行)を指定して、計算式がそのままですと日付のフォーマットではなく数値で表示されてしまいます。
これを防ぐためには、
例5:
DATESTRING(EOMONTH("2024-08-15", 1) + 1)
のように、DATESTRING関数をご利用ください。文字列(1行)フィールドでも "2024-10-01" のように日付フォーマットで表示されます。
■年数を計算してみよう
年齢や入社年数など、開始日から終了日までの年数を計算してみましょう。
※サンプルとして社員名簿アプリを使用しています。
年齢、入社年数のフィールドを追加しました。
社員一覧にも年齢と入社年数が表示されるように設定します。
以下がプラグインの設定です。
1. 計算式設定フィールドに以下のような計算式を設定します。
例6:
DATEDIF(誕生日, 確認日, "Y")
例7:
DATEDIF(入社日, 確認日, "Y")
- DATEDIF関数は1つ目の日付と2つ目の日付の日数、月数、または年数を計算します。"Y"を指定することで年数を計算します。
確認日は、 TODAY関数を指定するとよいでしょう。
2.計算プラグインの 「一括再計算設定」で「一括再計算を有効にする」にチェックを入れます。
※必要に応じて一括再計算を実行するユーザーの権限設定を行ってください。
これで準備ができました。
一覧画面で「一括再計算」を行うことで、年数の計算結果が最新になります。
次は曜日の計算です。
■曜日の計算をしよう
日付から曜日を計算してみましょう。(以前の記事はこちら)
計算プラグインの設定で以下のように設定します。
計算式設定フィールド:文字列(1行)のフィールド(計算結果が文字列になるため)
計算式:
SWITCH(WEEKDAY(日付), 1, "日", 2, "月", 3, "火", 4, "水", 5, "木", 6, "金", "土")
- WEEKDAY関数に日付を渡すと1~7の数字を返します。(デフォルトでは日曜日が1、土曜日が7になっています)
- SWITCH関数にWEEKDAY関数の結果を渡して日、月、火、水、木、金、土を文字列で返します。
追記:
SWITCH関数の代わりにCHOOSE関数を使用しても曜日の計算ができます。
CHOOSE(WEEKDAY(日付), "日", "月", "火", "水", "木", "金", "土")
- CHOOSE関数は第1引数の値(インデックス)に応じて、第2引数以降の値を返します。
上記の場合、WEEKDAY関数の戻り値が、1なら"日"、7なら"土"を返します。
設定は以上となります。
日付が "2024-08-15" の場合は、曜日に "木" と表示されます。
最後に和暦変換です。
■和暦計算をしてみよう
和暦の判定は対象の日付を各和暦の開始日と比較して行います。
- 明治以前:日付 < 1868/09/08
- 令和:日付 ≧ 2019/05/01
- 平成:日付 ≧ 1989/01/08
- 昭和:日付 ≧ 1926/12/25
- 大正:日付 ≧ 1912/07/30
- 明治:上記以外
和暦年は西暦年から 各和暦の開始年-1 を減算します。
- 令和年:西暦年 - 2018
- 平成年:西暦年 - 1988
- 昭和年:西暦年 - 1925
- 大正年:西暦年 - 1911
- 明治年:西暦年 - 1867
月、日の表現方法についてはここでは割愛します。以下の計算式を参照ください。
計算プラグインの設定
計算式設定フィールド:文字列(1行)
計算式:
IF(DATEVALUE(日付) < DATE(1868, 9, 8), "明治より前", IF(DATEVALUE(日付) >= DATE(2019, 5, 1), "令和" & (YEAR(日付) - 2018), IF(DATEVALUE(日付) >= DATE(1989, 1, 8), "平成" & (YEAR(日付) - 1988), IF(DATEVALUE(日付) >= DATE(1926, 12, 25), "昭和" & (YEAR(日付) - 1925), IF(DATEVALUE(日付) >= DATE(1912, 7, 30), "大正" & (YEAR(日付) - 1911), "明治" & (YEAR(日付) - 1867))))) & "年" & MONTH(日付) & "月" & DAY(日付) & "日")
- DATE関数は指定した年、月、日を数値に置き換えています。(比較用)
- DATEVALUE関数はフィールドから取得した日付を数値に置き換えています。(比較用)
- YEAR関数はフィールドから取得した日付の西暦年を取得しています。
- MONTH関数はフィールドから取得した日付の月を取得しています。
- DAY関数はフィールドから取得した日付の日を取得しています。
- 文字列結合と和暦年の計算を同時に行うとエラーになるので、括弧で括って和暦年の計算を先に行い、その後に和暦と年を文字列結合します。
設定は以上になります。
このように和暦が表示されます。
応用として、表示形式を変更したり、
IF(DATEVALUE(日付) < DATE(1868, 9, 8), "明治より前", IF(DATEVALUE(日付) >= DATE(2019, 5, 1), "R" & (YEAR(日付) - 2018), IF(DATEVALUE(日付) >= DATE(1989, 1, 8), "H" & (YEAR(日付) - 1988), IF(DATEVALUE(日付) >= DATE(1926, 12, 25), "S" & (YEAR(日付) - 1925), IF(DATEVALUE(日付) >= DATE(1912, 7, 30), "T" & (YEAR(日付) - 1911), "M" & (YEAR(日付) - 1867))))) & "/" & MONTH(日付) & "/" & DAY(日付) )
和暦日付と曜日を組み合わせることもできます。
IF(DATEVALUE(日付) < DATE(1868, 9, 8), "明治より前", IF(DATEVALUE(日付) >= DATE(2019, 5, 1), "令和" & (YEAR(日付) - 2018), IF(DATEVALUE(日付) >= DATE(1989, 1, 8), "平成" & (YEAR(日付) - 1988), IF(DATEVALUE(日付) >= DATE(1926, 12, 25), "昭和" & (YEAR(日付) - 1925), IF(DATEVALUE(日付) >= DATE(1912, 7, 30), "大正" & (YEAR(日付) - 1911), "明治" & (YEAR(日付) - 1867))))) & "年" & MONTH(日付) & "月" & DAY(日付) & "日(" & CHOOSE(WEEKDAY(日付), "日", "月", "火", "水", "木", "金", "土") & ")")
如何だったでしょうか。
ぜひ、計算プラグインをご活用ください。