![見出し画像](https://assets.st-note.com/production/uploads/images/135267670/rectangle_large_type_2_e87acdbef80b030db425c90c4132c19f.jpeg?width=1200)
\初心者でも大丈夫!/キントーンの自動計算の書き方②
前回は在庫管理と時間計算について書きました!
今回は別のケースについて書いていきます!
前回の投稿はこちら⇩
【ケース③】年度の計算
大体の会社が4月始まり、3月終わりだと思いますが、年度始まりが一般的な会社とは異なることがありますよね。(私の在籍する会社がそうなんです…。)
kintoneの標準機能として、グラフは年度ごとの表示が可能となっていますが、開始が異なると、きれいな(思い通りの)グラフが作れません…(困る)
![](https://assets.st-note.com/img/1711712954773-8HSjKfUH9Y.png)
4~6月、7~9月、10~12月、1~3月。ですね。
うちの会社は12月始まり。1月ならもう少し話は簡単だったんですが、会社法で、売り上げ計上期が自由に決められる以上、(そして会社の始まりが12月である以上)4月始まりじゃなくても文句は言えません。でも面倒くさがりな私は、出来ることなら会議資料もなるべくkintoneで完結したい…
ということで、思いついたのが、「計算フィールドを使って、期を計算&指定させればいいんじゃない?」ということ。
難しいのでは?と思われるかもしれませんが、意外と簡単に設定することが出来るんです!!
個別のフィールドを追加しよう!
見た目重視でやろうと思うと、「なるべく計算途中は見せたくない…」と思うかもしれませんが、レコードの登録時に過程が見えると、都度デバック(計算が間違っていないかの途中確認)が出来るので、いくつかレコード登録して、あるイレギュラーな(とはいえ10件に1回はあるような)案件での正誤も確認でき、戻り作業がぐっと減ってストレス軽減に繋がるので、私は開き直って計算途中を見せることが多いです。笑
という前振りを盛大にしたところで、フィールドはこんな感じ。
![](https://assets.st-note.com/img/1711713965909-Mt6Zk6hXVn.png)
年、月の表示
【年の表示】・・・フィールドコード:contractYear
DATE_FORMAT( contractDate , "YYYY", "Asia/Tokyo")
【月の表示】・・・フィールドコード: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行)フィールドです。
☑をした内容で表示を変えていきましょう!
【例題】提出物が全て揃っているか
先日キンコミでの投稿を例に挙げさせてもらいました🙇⇩
![](https://assets.st-note.com/img/1711785501706-in9k30Wnnt.jpg?width=1200)
提出前確認→フィールドコード:提出前確認
文字列(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」を外して「=」などで条件を書きましょう!
*******
【ケース⑤】案件・進捗カウント
先日キンコミであった、テーブルで進行案件の有無によってその案件が進行中なのか、完了しているのかなどをカウント&活動進捗を一目で分かる様にしたい、という話。
作るフィールドはこんな感じ。
![](https://assets.st-note.com/img/1712989861052-uWi4qPwonn.jpg?width=1200)
案件として「対応内容」等は別途テーブルに入れてくださいね♪
kintoneは「COUNTA」がありません。
つまり、数字以外の合計(カウント)が出来ません。
そのため、計算フィールドを入れて「案件数」と「進行数」、「完了数」をカウントしていきます。
どういう処理をするのかというと、テーブルに数値を持たせることで「1件」として処理していくということです。(いわゆる「1を立てる」ということ)
それでは詳しい計算式を見ていきましょう!
テーブルの設定
まず「数値・・・案件カウント」です。
こちらは自動計算とかではなく、初期値に「1」を入れます。
![](https://assets.st-note.com/img/1712990458373-j9L2PphLHF.jpg?width=1200)
案件数を純粋に計算するだけなので、テーブルが追加された→1案件増えたとkintone側で認識をさせるためです。
詳しくは後述しますが、誤っていじらせないためにフィールドアクセス権を設定しましょう!
*******
続いて、進行数と完了数のフィールド。
こちらは「自動計算」させます。
計算式は以下の通りです。
IF ( CONTAINS ( 活動進捗 , "進行中" ) , 1 , 0 )
IF ( CONTAINS ( 活動進捗 , "完了" ) , 1 , 0 )
チェックボックス(両方チェックする場合がある)ため「CONTAINS」を使います。
![](https://assets.st-note.com/img/1712990749649-2yMnHfWXve.jpg?width=1200)
「進行中(完了)」に☑がある場合は、「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(完了) あまり 進行中
といったところでしょうか。場合分けが○ぬほど面倒ですね。笑
*******
お次は実際のカウントです。
視覚的に分かりやすいように、「案件数」「進行数」「完了数」を別々のフィールドに分けています。
![](https://assets.st-note.com/img/1712993468825-NsH3A9vhx0.jpg?width=1200)
見て分かるように、「SUM ( 【フィールドコード】)」のみです。
最初に書いた通り、「COUNTA」は出来ませんが、数字をカウントする(合計する)ことは出来るので、単純にテーブルの数だけ1つずつ増やしてあげればいいんです。
あとはお好みに合わせて「活動進捗」なんかを入れたりします。
テーブルの量が多くなる可能性が高い場合はおすすめです。
IF ( 案件数 = 完了数 , "全て済" ,
IF ( SUM ( 進行カウント ) > 0 , "進行あり:" & SUM ( 進行カウント ) ,
IF ( SUM ( 完了カウント ) > 0 , "進行あり" , "未選択" )))
![](https://assets.st-note.com/img/1712993725926-VKxn5Klq88.jpg?width=1200)
さて、長々と書きましたが、最後にこれだけ書きましょう!
触られたくない計算フィールドはアクセス権を付ける
アプリには細かなアクセス権があります。
アプリ自体を特定の人しか見せたくない、とかこの条件のレコードは編集も閲覧も制限したいとかですね。
このアクセス権は「フィールド」にも適用できます。
今回で言うと、「初期値を1にした計算フィールド」とかですかね。
もちろん計算過程を他の人に見せたくないということであれば、そういうのも追加しましょう。
![](https://assets.st-note.com/img/1712994273362-5RMUCQ6XEu.jpg?width=1200)
指定のフィールドにアクセス権を付ける
フィールドのアクセス権はこんな感じ。
![](https://assets.st-note.com/img/1712994373866-na8oeqTMiI.jpg?width=1200)
案件数(初期値を1にした計算フィールド)のフィールドを選択して、ユーザーに許可する操作を選択します。
添付例はEveryone(全てのユーザー)、閲覧可・編集不可です。
つまり、編集画面で見えるけど入力は出来ないということですね。
閲覧自体させたくなければ閲覧のチェックを外せばOKです。
(閲覧のチェックを外すと編集も自動で外れます。)
ちなみにアプリの作成者はアクセス権が効かない場合があるため(administrator権限だと特に。)他のユーザーアカウントで確認するか、自身をユーザーに選択して操作権限を付与するのをおすすめします。
また、見せたくない(触られたくない)フィールド全てにアクセス権限を付与するのも良いですが、付与したフィールド権限は割と忘れられがちです。(付けた自分でも)
作成者は忘れないように、自分もしくはシステム管理メンバーには見えるようにしておくのと、フィールド名に「編集不可」や「閲覧不可」など入れておくと後から見ても分かりやすいですね♪
*******
いかがだったでしょうか?
何かと混乱しがちな「計算フィールド」と「文字列(1行)」の自動計算。
この記事を見て、あなたのkintone LIFEが少しでも楽しくなることを祈ります(*^^*)
この記事が気に入ったらサポートをしてみませんか?