kintoneの標準機能だけで年度や期を計算する方法

## はじめに
kintoneで年度や期を計算しようとした場合、以前はJavaScriptによるカスタマイズかプラグインを使う必要がありました。
しかし2020年2月のアップデートにより、**標準機能だけで**年度や期を計算できるようになりました。
この件については思いのほか話題になっていないので、実例を交えて紹介したいと思います。

## 2020年2月のアップデート内容
<a href="https://kintone.cybozu.co.jp/update/main/2020-02.html">kintoneの2020年2月の主なアップデート内容</a>は、以下の通りです。

- ファイル読み込み：レコード一括更新でテーブルを更新可能に
- 計算式：ROUND関数、ROUNDDOWN関数、ROUNDUP関数の追加
- 計算式：計算式の入力欄が複数行入力に対応
- 計算式：その他の変更
- フォーム：テーブル名を設定可能に
- API：フォームの設定APIとアプリの設定更新APIがAPIトークン認証に対応

一見すると、年度計算に役に立ちそうな変更はありません。
計算式に関しては「ROUND関数の追加」というパワーワードが目に付きます（実際、この件に関する記事は結構多いです）。

<br/>ただ、「その他の変更」というのもありますね。
「その他の変更」とは具体的には何か調べてみると、

- 計算式の冒頭に「=」が入力されていても、計算式を保存可能になりました。
- 計算フィールドと文字列（1行）フィールドで、利用できる関数の差異がなくなりました。

の2点のようです。
<br/>ここで注目は、「計算フィールドと文字列（1行）フィールドで、利用できる関数の差異がなくなりました」という変更です。
日付に関する関数として以前からDATE_FORMAT関数があったのですが、これは文字列（1行）フィールドにしか使用できませんでした。
利用できる関数の差異がなくなったということは、計算フィールドでもDATE_FORMAT関数が使えるようになったということです。
## 実際に試してみる
では、実際に試してみましょう。
<br/>日付フィールドと計算フィールドを配置します。
![clip_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/ec518785-3d36-69e3-5142-62977f76d704.png)

計算フィールドの設定は以下の通りです。
![clip_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/bfc70bc5-7df6-260d-db90-2e7c9bec324f.png)

レコードを編集してみると、確かに計算フィールドでDATE_FORMAT関数が使えています。
![clip_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/3139ffa2-9dc6-38c7-5f34-875951526621.png)

しかし、このままでは年度ではなくただの年です。
これを年度に変換する必要があります。

## IF関数を組み合わせる
年度の計算のためには何月かを取得してそれによって条件分岐させる必要があります。
以前は条件分岐にもJavaScriptやプラグインが必要だったのですが、<a href="https://kintone.cybozu.co.jp/update/main/2020-01.html">2020年1月のアップデート</a>でIF関数が使えるようになっているので、これを使います。
<br/>計算フィールドの計算式にIFを使ってみます。

```
IF(DATE_FORMAT(日付, "M", "system") < 4, DATE_FORMAT(日付, "YYYY", "system") - 1, DATE_FORMAT(日付, "YYYY", "system"))
```
<br/>しかし、残念ながらこの計算式ではエラーになってしまいました。
![clip_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/8acb7171-7529-fdfd-2383-4e2cbd92330f.png)
どうやら、**数値に変換されるのは全体の計算結果であり、計算式内ではDATE_FORMAT関数は文字列として扱われている**ようです。
<br/>むむむ、そうですか。
そちらがそうくるなら、こちらにも考えがありますよ。
## 計算フィールドを計算フィールドで使用する
先の検証で、DATE_FORMAT関数の結果を計算フィールド（＝数値型）に保存できることは分かりました。
であれば、年と月を計算フィールドとして用意し、その計算フィールドを計算に用いることにします。
![clip_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/318d2482-de7a-98da-8a1e-9344085912df.png)

年と月のフィールド設定はそれぞれ以下の通りです。
![year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/921966b8-4b3d-ebd9-d32c-960b0797ba9f.png)
![month.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/c6c75c25-0e80-febe-853b-9faad2bd9dd3.png)

そして、年度用の計算フィールドに、年と月の計算フィールドの結果を用います。

```
IF(月 < 4, 年 - 1, 年)
```
<br/>これで、晴れて年度が計算できるようになりました。
![clip_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/6ab184b9-a618-e096-8afc-83f8b0dc1626.png)
## 応用
同様に、期や四半期も次のような計算式で計算できます。
※いずれも文字列（1行）フィールドです。

``` 期.
IF(AND(月 >= 4, 月 < 10), 年度 & "年上期", 年度 & "年下期")
```
``` 四半期.
IF(月 < 4, 年度 & "年度4Q", IF(月 < 7, 年度 & "年度1Q", IF(月 < 10, 年度 & "年度2Q", 年度 & "年度3Q")))
```
## 応用その2
実際に使うのは日付と年度だけなので、年や月は~~邪魔~~あまり自己主張して欲しくないですよね。
そういう時はグループに入れてしまいましょう。
![clip_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/5aecbd5e-ec9c-81e0-6d68-9b9b3ef6aae9.png)

これで画面が少しすっきりしました。
![clip_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375744/14b0a13d-c98e-877f-a2e9-8aac37e61535.png)
## おわりに
今回紹介した方法は標準機能だけを使っていますので、ライトコースをお使いの方も利用できます。
※多分。手元にライトコースの環境が無いので推測ですが。
## 【追記】
計算の元となる日付フィールドが空欄の場合、正しく計算されません。
日付フィールドが必須でない場合は、以下のように元の計算式をIF文の中に入れてください。

```
IF(日付 != "", 元の計算式, "")
```