【kintone】IF関数で場合分けしよう

kintoneのIF関数を使って、遊園地入場料を場合分けして計算するアプリを作ってみたいと思います。

* 年齢
* 身長120cm以上か未満か
* メニュー（入園料のみ、フリーパスのみ、入園料＋フリーパス）

を入力していくら払えばよいか？を計算するアプリを作ります。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/5fe67b5d-a023-f607-57c0-680157ad664a.png)
※熊本県にあるグリーンランドという遊園地の入園料表です。
乗り物がいっぱいあります＾＾
[グリーンランド公式ホームページ(九州)](http://www.greenland.co.jp/park/tickets/pass/)



今回は、

* IF関数で場合分けをして・・・
* IF関数の中にIF関数を使う
* AかつBに、And関数を使う

などやってみたいと思います。

【参考：↓公式ヘルプ↓】
[IF関数](https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/if_function.html)
[And関数](https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/and_or.html)

## アプリに必要なフィールド

必要なフィールドとして2種類考えられます。

* 入力用フィールド
* 計算用フィールド

それぞれ作っていきましょう！

### 入力用フィールド

先程も書きましたが

* 年齢
* 身長120cm以上か未満か
* メニュー（入園料のみ、フリーパスのみ、入園料＋フリーパス）

を入力して入園料を計算するので、これらを入力するフィールドが必要です。
一つずつ見ていきましょう。

#### 年齢フィールド
表によると年齢区分は・・・

* おとな（高校生以上）
* こども（3歳以上～中学生以下）
* シニア（65歳以上）

となっています。
3歳未満が書いていませんがきっと入場料などは無料なのでしょう。
というわけで、年齢順に並べ、また漏れがないようにラジオボタンで下図のように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/e38381f0-4807-2942-e27a-6ab356839bc3.png)


#### 身長フィールド
身長は120cm以上か未満か？
の情報が必要です。
チェックボックスで身長が120cm未満ならチェックを入れる・・・・としたいところですが
実はkintoneでは数式にチェックボックスの値を使用することはできません。
残念ながら、IF関数の条件にチェックボックスを使うことはできません（涙）

というわけでここでもラジオボタンを使用して下図のように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/3729e609-eb35-40c0-e91a-618ee033f693.png)


#### メニューフィールド
メニューは、

* 入園料のみ
* フリーパスのみ
* 入園料＋フリーパス

という3パターンです。
こちらもラジオボタンで下図のように設定しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/fb5e54b2-6d36-5def-7c7a-157ae808cf23.png)

ここまででこのようにフィールドが配置されていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/e211e1ea-09a0-2420-f115-5c5be2426aa4.png)

### 計算フィールド
では、金額を計算してみたいと思います。
計算フィールドを3つ配置して、それぞれ「フィールド名」と「フィールドコード」を
「入園料」、「フリーパス」、「金額」としましょう。
※数値は桁区切り、単位を「円」にしました。

画像は入園料フィールドのみですが、「フリーパス」フィールド、「金額」フィールドも同様に作ってみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/87b94e7f-3a5c-85bd-d3b0-bc348f563b1d.png)

こんな感じ～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/8c996cfc-bc1d-684a-eee3-467a087b3be4.png)


#### 入園料
では入園料の式を組み立てていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/d27f41d0-6ff0-6bf4-5142-aeb5aa553045.png)

入園料は、

おとな：1,700円
こども（120cm以上）：900円
こども（120cm未満）：900円
シニア：900円

とあります。
つまり、大人は1700円、大人以外は何が選ばれていても900円となりそうです。

IF関数は
`IF(条件式, 条件式が正しい場合, 条件式が間違っている場合)`のように使えます。

というわけで数式はこんな感じになるかと思います。

**IF(年齢="おとな", 1700, 900)**

**おとな**はラジオボタンの選択肢では**おとな（高校生以上～65歳未満）**としています。
計算式にはラジオボタンの選択肢のとおりに書かないといけません。
というわけで、
実際に計算式に書くのは

`IF(年齢="おとな（高校生以上～65歳未満）",1700,900)`
となります。

年齢フィールドが"おとな（高校生以上～65歳未満）"だったら1700、
それ以外（こどもや、シニア）は900
となるIF関数です。

このタイミングでなんですが、
実は大切なことを忘れていました。**3歳以下は無料（0円）**でした。
なので、3歳以下の条件もIF関数に追加しましょう。

IF関数は、下記のようにIF関数の中にさらにIF関数を書くことができます。
`IF（条件式A, (条件式B, 条件式Bが正しい場合, 条件式Bが間違っている場合), 条件式Aが間違っている場合)`

IF関数の条件を下のように分解して、
最初に3歳未満を0円として、3歳未満じゃなかったら～の中にさらにIF関数を書いてみましょう

もし
3歳未満だったら
→0円
3歳以上（3歳未満じゃない）だったら
　→もし
　**おとな（高校生以上～65歳未満）**だったら
　　→1700円
　**おとな（高校生以上～65歳未満）**以外だったら
　　→900円

`IF(年齢="3歳未満", 0, IF(年齢="おとな（高校生以上～65歳未満）",1700, 900) )`

これで、入園料計算フィールドの計算式ができました。

#### フリーパス
ではフリーパスの数式を書いていきます。

おとな：3900円
こども（120cm以上）：3700円
こども（120cm未満）：2700円
シニア：2700円

とあります。

もし
3歳未満だったら
→0円
3歳未満じゃなかったら
→もし
　**おとな（高校生以上～65歳未満）**だったら
　→3900円
　**おとな（高校生以上～65歳未満）**ではなかったら
　　→もし
　　**こども（3歳以上～中学生以下）**　かつ　身長が**120cm以上**　だったら
　　→3700円
　　それ以外（こどもかつ身長が120cm未満、シニア）
　　→2700円

とすれば良さそうです。

「**AかつB**」は**And**を使って「And(A, B)」のように書けます。
この場合の**年齢が「こども（3歳以上～中学生以下）」かつ、身長が「120cm以上」**というのは
`And(年齢="こども（3歳以上～中学生以下）", 身長="120cm以上")`
のように書けます。


というわけでフリーパスの計算式は以下のようになります。

`IF(年齢="3歳未満", 0, IF(年齢="おとな（高校生以上～65歳未満）", 3900, IF(And(年齢="こども（3歳以上～中学生以下）", 身長="120cm以上"), 3700, 2700)))`

#### 金額
最後に金額フィールドの計算式を書いていきます。
金額は下記3パターンです

* 入園料のみのパターン
* フリーパスのみのパターン
* 入園料＋フリーパスのパターン


IF関数で表すと下記のようになります。

「入園料のみ」だったら
　→入園料
「入園料のみ」ではなかったら
　→もし
　「フリーパスのみ」だったら
　　→フリーパス
　「フリーパスのみ」ではなかったら
　　→入園料 ＋　フリーパス

`IF(メニュー="入園料のみ", 入園料, IF(メニュー="フリーパスのみ",フリーパス, 入園料 + フリーパス))`

## 動かしてみる
ではフォームを保存してアプリを公開し、試してみましょう！

![notification07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/9fbfa61d-614b-2a40-f01e-788870e7556e.gif)

動きは良さそう！（わかりにくいけど！）
これで入園料を計算するアプリを作ることができました。

## まとめ

IF関数は
`IF(条件式, 条件式が正しい場合, 条件式が間違っている場合)`のように使えます。

IF関数は、IF関数の中にIF関数を使うという使い方もできます。
`IF（条件式A, IF(条件式B, 条件式Bが正しい場合, 条件式Bが間違っている場合), 条件式Aが間違っている場合)`

条件式で、「AかつB」を表現したいときは`And(A, B)`と書きます。

特にIF関数の中にIF関数というのは難しいかもしれませんが、使えると便利なのでぜひ挑戦してみてくださいね＾０＾