【kintone】チェックボックスで特定の値だけが選択されているとき~をベン図とIF関数とCONTAINS関数を使ってやってみる


2020年12月のアップデートで、新しい関数「CONTAINS関数」が計算式の関数として仲間入りしました!
ヒューヒュー!

というわけで、CONTAINS関数を試しに使ってみたいと思います!
※というかCONTAINS関数に無理させてしまった感

CONTAINS関数とは

kintoneヘルプサイトをご確認ください。

CONTAINS(チェックボックス, "A")

という計算式で、
チェックボックスのAが選択されていればtrue、選択されていなければfalseとなります。

  • 複数選択やチェックボックスで、指定の値が選択されているか?
  • テーブル内の特定のフィールドに指定の値があるか?

がわかります。

「選択されているかどうか?」や「あるかどうか!?」が分かるだけです。

特定の値「だけ」が選ばれている時~というのは計算式をゴニョゴニョ書かないといけません(><)

というわけで、CONTAINS関数で「とある選択肢だけ」が選択されている時~の計算式を考えてみたいと思います。

アプリの準備

フィールド種類 フィールドコード
チェックボックス チェックボックス (R, G, B)
文字列(1行)

こんなフォームを準備しておきます。

IF関数を使って、「赤」か「黄」か「空白」を表示する方法を考える

今回は練習のためにも(練習になるのかは、?)

「R」だけが選ばれている時は「赤」と表示して
「R」と「G」だけが選ばれている時は「黄」と表示して
その他のときは空白

という謎仕様としてみたいと思います。

そこでまずは、CONTAINS関数について考える前に、まIF関数でどう表したら良さそうか考えてみます。

IF関数の使い方はヘルプを参考にしましょう。
[IF関数]条件によって表示する値を変える

IF関数だけで考えてみると・・・

IF(Rだけが選ばれている時, "赤", IF(RとGだけが選ばれている時, "黄", ""))

となる気がしますが、長くなりそうな予感がしますね(´-`)
Rだけが選ばれている時というのは
Rが選ばれている かつ Gが選ばれていない かつ Bがえらばれていない
ですもんね。

というわけで、今回はこういうのを考える時に便利な図、ベン図という図を使って考えてみたいと思います。

参考:ベン図 - Wikipedia

「Rチェックがある」かつ「Bチェックがない」世界

下図をごらんください・・・。

今回はこのような謎仕様を満たしたいです。

「R」だけが選ばれている時は「赤」と表示して
「R」と「G」だけが選ばれている時は「黄」と表示して
その他のときは空白

図を見た感じ、

Rチェックがある かつ Bチェックがないという世界をまず作ってからIF関数に落とし込むと楽そうです。

図をごらんください。
黒く囲まれた部分がRチェックがある かつ Bチェックがない世界です。
赤か黄色かという話は「Rチェックがある かつ Bチェックがない世界」での話で、
この黒く囲まれた世界以外は空白になります。

図から、IF関数は
IF(Rあり かつ Bなし, IF(Gあり, 黄, 赤), 空白)
という感じにすると良さそうです。

IF関数とCONTAINS関数で書いていく

CONTAINS関数ではAがチェックされている時
CONTAINS(チェックボックス, "A")
のように書くとtrueが返ってくると最初の方に書きました。

これを先程のIF関数に埋め込んでみたいと思います。

AND関数、NOT関数を使うのでヘルプで確認しておきましょう。
AND、OR、NOT関数の使いかた

IF(Rあり かつ Bなし, IF(Gあり, 黄, 赤), 空白)

IF(
    AND(CONTAINS(チェックボックス,"R"), NOT(CONTAINS(チェックボックス,"B"))),
    IF(CONTAINS(チェックボックス,"G"),"黄", "赤"),
    ""
)

これでIF関数ができました。(長い)

※こんな感じで対応しています
AND(CONTAINS(チェックボックス,"R"), NOT(CONTAINS(チェックボックス,"B")))・・・Rあり かつ Bなし
IF(CONTAINS(チェックボックス,"G"),"黄", "赤")・・・IF(Gあり, 黄, 赤)

動作確認

良さそう!ですね!?
完成です。

まとめ

今回は「XXがある」しか分からないCONTAINS関数を、IF文やAND,NOT関数も使って
「XXだけがある」などチェック項目が特定できるような計算式を組み立ててみました。
しかし、これは計算式のわかりやすさが失われてしまう原因になってしまっているかも知れません(><)

IF文やAND,OR,NOT文、さらにネストネスト~となるとさらに可読性が低くなってしまうので考えものです(´-`).。oO
JavaScriptでえいやっとやってしまったほうが早いかもしれないですね。

ではこのへんで(・ω・)ノシノシ