見出し画像

\初心者でも大丈夫!/キントーンの自動計算の書き方②

前回は在庫管理と時間計算について書きました!
今回は別のケースについて書いていきます!

前回の投稿はこちら⇩


【ケース③】年度の計算

大体の会社が4月始まり、3月終わりだと思いますが、年度始まりが一般的な会社とは異なることがありますよね。(私の在籍する会社がそうなんです…。)
kintoneの標準機能として、グラフは年度ごとの表示が可能となっていますが、開始が異なると、きれいな(思い通りの)グラフが作れません…(困る)

グラフには『四半期単位』があります。
4~6月、7~9月、10~12月、1~3月。ですね。

うちの会社は12月始まり。1月ならもう少し話は簡単だったんですが、会社法で、売り上げ計上期が自由に決められる以上、(そして会社の始まりが12月である以上)4月始まりじゃなくても文句は言えません。でも面倒くさがりな私は、出来ることなら会議資料もなるべくkintoneで完結したい…
ということで、思いついたのが、「計算フィールドを使って、期を計算&指定させればいいんじゃない?」ということ。

難しいのでは?と思われるかもしれませんが、意外と簡単に設定することが出来るんです!!

個別のフィールドを追加しよう!

見た目重視でやろうと思うと、「なるべく計算途中は見せたくない…」と思うかもしれませんが、レコードの登録時に過程が見えると、都度デバック(計算が間違っていないかの途中確認)が出来るので、いくつかレコード登録して、あるイレギュラーな(とはいえ10件に1回はあるような)案件での正誤も確認でき、戻り作業がぐっと減ってストレス軽減に繋がるので、私は開き直って計算途中を見せることが多いです。笑

という前振りを盛大にしたところで、フィールドはこんな感じ。

実際に入力するのは、契約日だけで、年・月・年度を自動計算させます。

年、月の表示

【年の表示】・・・フィールドコード:contractYear
DATE_FORMAT( contractDate , "YYYY", "Asia/Tokyo")

契約日のフィールドコード:contractDate

【月の表示】・・・フィールドコード:contractMonth
DATE_FORMAT( contractDate , "MM", "Asia/Tokyo")

DATE_FORMATでなんとなく書かれていますが、年・月・日の表示の仕方はExcelと同様決まっています。

年:Y(year) 月:M(month) 日:d(day)
時:h(hour) 分:m(minutes) 秒:s(second)
一文字だけなら最小値。
例)月 → 8,9,10,11,12,1・・・
  日 → 1,2,3,4,5,6,7・・・
二文字なら2桁表示。
例)月 → 08,09,10,11,12,01・・・
  日 → 01,02,03,04,05,06,07・・・
  年 → 19,20,21,22,23,24・・・

指定できる日時の形式

こちらは好み(と会社の方針)で表示方法を変えて頂ければと思いますが、年なんかは超長期で使うことを考慮して(一応ね…)「YYYY」にするのをおすすめします。

さて、ここまで準備できればあとは年度のフィールドに計算を入れるだけ。

IF( contractDate = "" , "" ,
  IF ( contractMonth = 12 , ( contractYear + 1 ) & "年度" ,
        DATE_FORMAT( contractDate , "YYYY年度", "Asia/Tokyo")
  ))

フィールドコードは特に指定ありません。

簡単に説明すると、
①契約日に何も入っていなければ空欄
 (#Value とか #CONVERT! とか出るのが嫌なので。笑
  ちなみに計算式で表示されるエラーはこちら⇩)

②月が12だったら、年に1足して「年度」を付ける
 …2023/12/1 → 「2024年度」
③それ以外ならそのままの年度
 …2024/1/1 → 「2024年度」
という感じです。

応用編

今回は12月だけイレギュラーなのでこうしましたが、例えば6月始まりで、2023年6月1日~2024年5月31日が2023年度という括りだった場合、

IF( contractDate = "" , "" ,
  IF ( contractMonth < 6 , ( contractYear - 1 ) & "年度" ,
        DATE_FORMAT( contractDate , "YYYY年度", "Asia/Tokyo")
  ))

月が6未満(つまり1~5)の場合、年から1引いて年度にする。
→2024/3/1 なら 2023年度 ということですね。
反対に2023年6月1日~2024年5月31日が2024年度という括りだった場合、

IF( contractDate = "" , "" ,
  IF ( contractMonth > 5 , ( contractYear + 1 ) & "年度" ,
        DATE_FORMAT( contractDate , "YYYY年度", "Asia/Tokyo")
  ))

月が5を超える(つまり6~12)の場合、年に1を足して年度にする。
→2023/8/1 なら 2024年度 ということになりますね。

年度の計算と括りはややこしいですが、年と年度が異なった時にどちらになっているか(次年度になるのか前年度になるのか)が分かれば自ずとどれを使うか分かりますね。


あとは、年度を選択して条件を追加してグラフを作るだけ!
簡単ですね!笑

*******

【ケース④】条件によるアナウンス表示

例えば、交通費計算で、宿泊が伴うなら上限はいくら、とか、申請額によってプロセス管理の承認者が変わるとか、申請書類で☑を打った内容によって表示を異ならせる(OKか不可か)とか、も自動計算で出来たりします。

①条件によって表示を変える

使うのは、チェックボックス(ラジオボタンは後述)と文字列(1行)フィールドです。
☑をした内容で表示を変えていきましょう!

【例題】提出物が全て揃っているか

先日キンコミでの投稿を例に挙げさせてもらいました🙇⇩

提出物の内容のチェックボックスと文字列(1行)を入れる
提出前確認→フィールドコード:提出前確認

文字列(1行)は自動計算にして、以下の計算式を入れます。

IF ( AND (
  CONTAINS ( 提出前確認 , "見積提出" ) ,
  CONTAINS ( 提出前確認 , "契約提出" ) ,
  CONTAINS ( 提出前確認 , "伝票提出" )) , "全て提出" , "未提出あり" )

ここで使用するのは「CONTAINS」です。
そのフィールドの要素に指定するものがあるか検索して真偽値で返します。
今回の場合で行けば、チェックボックス全てに☑が打ってあればOK(全て提出)になりますが、一つでも☑が欠けていれば「未提出あり」になります。
ここで、例えば「見積」と「契約」が提出されていれば「伝票」が無くてもOKだよ!ということであれば、

IF ( AND (
  CONTAINS ( 提出前確認 , "見積提出" ) ,
  CONTAINS ( 提出前確認 , "契約提出" )) , "全て提出" , "未提出あり" )

でOKです。
「伝票」の有無に関係なく「全て提出」になります。
(表記としてイヤなら「提出可」とか「OK」とかにしても良いですね。)

反対に、「伝票」は後日提出ならOKだよ、という場合、

IF ( AND (
  CONTAINS ( 提出前確認 , "見積提出" ) ,
  CONTAINS ( 提出前確認 , "契約提出" ) ,
  CONTAINS ( 提出前確認 , "伝票提出" )) ,
   "全て提出" ,
        IF ( AND (
            CONTAINS ( 提出前確認 , "見積提出" ) ,
            CONTAINS ( 提出前確認 , "契約提出" )) ,
        "伝票後日提出" , "未提出あり" ))

となります。ここで注意が必要なのは、「伝票後日提出」を前に持ってきてはダメ、ということ。
最も求めている状態は「全て提出」なので、その条件を一番初めに、
次点で「後日提出可」…となるのでご注意を!

ここで注意!

CONTAINS ( 提出前確認 , "" ) は出来ません!

チェックボックスに何も選択されていないのを「””(空欄)」で検索したいところですが、チェックボックスに「空欄」がないため、検索に引っ掛かりません。(何言ってんのかよく分からないですね。笑)

*******

応用編【ラジオボタンの場合】

ラジオボタンでは逆に「CONTAINS」が使えません、というと語弊がありますね…。
正確に言うと、ラジオボタンでは「使う意味がない」ですね。

というのも、CONTAINSの良いところは「複数検索」ができるところです。
つまり、ラジオボタンは択一なので、純粋に

IF ( 【フィールドコード】 = "【選択肢】" , "【真の場合】" , "【偽の場合】")

だけで事足りるということです。
条件の書き方によっては本当にラジオボタンだと使えないので、「何でだ!?」となったら「CONTAINS」を外して「=」などで条件を書きましょう!

*******

【ケース⑤】案件・進捗カウント

先日キンコミであった、テーブルで進行案件の有無によってその案件が進行中なのか、完了しているのかなどをカウント&活動進捗を一目で分かる様にしたい、という話。
作るフィールドはこんな感じ。

カウントするための最小限のフィールドだけです。
案件として「対応内容」等は別途テーブルに入れてくださいね♪

kintoneは「COUNTA」がありません。
つまり、数字以外の合計(カウント)が出来ません。
そのため、計算フィールドを入れて「案件数」と「進行数」、「完了数」をカウントしていきます。

どういう処理をするのかというと、テーブルに数値を持たせることで「1件」として処理していくということです。(いわゆる「1を立てる」ということ)
それでは詳しい計算式を見ていきましょう!

テーブルの設定

まず「数値・・・案件カウント」です。
こちらは自動計算とかではなく、初期値に「1」を入れます。

フィールドコードは「案件」にしておきます。

案件数を純粋に計算するだけなので、テーブルが追加された→1案件増えたとkintone側で認識をさせるためです。
詳しくは後述しますが、誤っていじらせないためにフィールドアクセス権を設定しましょう!

*******

続いて、進行数と完了数のフィールド。
こちらは「自動計算」させます。
計算式は以下の通りです。

IF ( CONTAINS ( 活動進捗 , "進行中" ) , 1 , 0 )

IF ( CONTAINS ( 活動進捗 , "完了" ) , 1 , 0 )

チェックボックス(両方チェックする場合がある)ため「CONTAINS」を使います。

「進行中(完了)」に☑がある場合は、「1」にする。
ない場合は「0」にする。という割と簡単な式です。

注意点として、「どうせ 1 か 0 かなら両方☑されてるなら(計算フィールド1つにして) 2 で良くない?」というのはNGです。
今回のオーダーとして、「どっちにチェックが打ってあるか」というのが重要になってくるのと、「見た目がよろしくないから」という理由で計算フィールドをケチると痛い目を見るので、ここは惜しみなく分割していきましょう。(気になるなら、見えなくすればいいですしね。)

【閑話休題(読み飛ばしても全く問題ありません。)】
小学校とか算数でやったと思いますが、「3Lの容器と5Lの容器を使って4Lの水を作りましょう」みたいなことをすれば、計算フィールド1個でも成り立つには成り立ちますね。
「進行中」= 1 、「完了」 = 3 にすれば、計算できるかな?(途中までしか検証してないので、どこかで破綻するかもですが…笑)

※案件カウントは必須です。
案件1 計算1 … 進行中1つ 
  案件2 計算2 … 進行中2つ
  案件2 計算4 … 進行中1つ、完了1つ(進行中4つ→案件4になる)
  案件2 計算6 … 完了2つ
  案件3 計算3 … 進行中3つ(完了1つ→案件1になる)
  案件3 計算5 … 進行中2つ、完了1つ(進行中5つ→案件5になる)
  案件3 計算7 … 進行中1つ、完了2つ
  案件3 計算9 … 完了3つ
  案件4 計算6 … 進行中3、完了1つ
  案件4 計算8 … 進行中2つ、完了2つ

みたいなことですが、(途中分かり切ったものは省いてます。)
①案件数=計算数 なら =進行中数
②案件数≠計算数 かつ 3の倍数 なら = 完了数(÷3)
③案件数≠計算数 かつ 3の倍数以外 なら 計算数÷3(完了) あまり 進行中
といったところでしょうか。場合分けが○ぬほど面倒ですね。笑

参考:余りの計算方法

*******

お次は実際のカウントです。
視覚的に分かりやすいように、「案件数」「進行数」「完了数」を別々のフィールドに分けています。

おさらい

見て分かるように、「SUM ( 【フィールドコード】)」のみです。
最初に書いた通り、「COUNTA」は出来ませんが、数字をカウントする(合計する)ことは出来るので、単純にテーブルの数だけ1つずつ増やしてあげればいいんです。

あとはお好みに合わせて「活動進捗」なんかを入れたりします。
テーブルの量が多くなる可能性が高い場合はおすすめです。

IF ( 案件数 = 完了数 , "全て済" ,
IF ( SUM ( 進行カウント ) > 0 , "進行あり:" & SUM ( 進行カウント ) ,
IF ( SUM ( 完了カウント ) > 0 , "進行あり" , "未選択" )))

文字列(1行)の自動計算です。表示文字を変えたい場合は太字の部分を変えればできます。
実際の画面

さて、長々と書きましたが、最後にこれだけ書きましょう!

触られたくない計算フィールドはアクセス権を付ける

アプリには細かなアクセス権があります。
アプリ自体を特定の人しか見せたくない、とかこの条件のレコードは編集も閲覧も制限したいとかですね。
このアクセス権は「フィールド」にも適用できます。

今回で言うと、「初期値を1にした計算フィールド」とかですかね。
もちろん計算過程を他の人に見せたくないということであれば、そういうのも追加しましょう。

指定のフィールドにアクセス権を付ける

フィールドのアクセス権はこんな感じ。

案件数(初期値を1にした計算フィールド)のフィールドを選択して、ユーザーに許可する操作を選択します。

添付例はEveryone(全てのユーザー)、閲覧可・編集不可です。
つまり、編集画面で見えるけど入力は出来ないということですね。

閲覧自体させたくなければ閲覧のチェックを外せばOKです。
(閲覧のチェックを外すと編集も自動で外れます。)

ちなみにアプリの作成者はアクセス権が効かない場合があるため(administrator権限だと特に。)他のユーザーアカウントで確認するか、自身をユーザーに選択して操作権限を付与するのをおすすめします。

また、見せたくない(触られたくない)フィールド全てにアクセス権限を付与するのも良いですが、付与したフィールド権限は割と忘れられがちです。(付けた自分でも)
作成者は忘れないように、自分もしくはシステム管理メンバーには見えるようにしておくのと、フィールド名に「編集不可」「閲覧不可」など入れておくと後から見ても分かりやすいですね♪


*******

いかがだったでしょうか?
何かと混乱しがちな「計算フィールド」と「文字列(1行)」の自動計算。
この記事を見て、あなたのkintone LIFEが少しでも楽しくなることを祈ります(*^^*)


この記事が気に入ったらサポートをしてみませんか?