Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@rex0220

kintone 計算式プラグイン

kintone 自動計算の機能拡張版プラグインです。

標準機能には無い、条件付き合計計算など、計算式を指定するだけで処理出来ます。
Excel の計算式のような指定方法で、複雑な条件を指定できます。

計算式例: 計算式には、フィールドコードと関数などを指定します。

  • レコード番号 & "-" & DATE_FORMAT(日付1, "YYYY-MM-DD")
  • SWITCH(ドロップダウン,"経理部","経理部TEST","総務部","総務部","営業部","営業部test","その他")
  • SUMIF(ドロップダウン_0==="電車(片道)", 数値) + SUMIF(ドロップダウン_0==="電車(往復)", 数値)

※動作環境は、PCとスマホです。

rex0220 storesで、販売中です。

直近の変更点

※Ver.36
・JOIN 関数でチェックボックス・複数選択項目を直接指定可能に変更
・SQRT 関数追加
・テーブルが無い場合の計算式ツール履歴表示不具合対応

※Ver.37
・LET 関数追加
・プラグイン設定のフィルター適用時、「編集」「非表示」チェックの変更時の不具合対応

※Ver.38
・INT 関数で、パラメータが数字以外の場合にエラーから"" を返すように変更
・FIXED, CHOOSE, ISNUMBER, TDUPCK 関数追加
・計算式ツールで、: フィールドコード補完対象にテーブル追加

計算式応用例

計算式プラグインの設定例

2019-02-24_15h07_07.png

編集画面例

2017-06-07_17h45_34.png

スマホ画面例

ステータス遷移時の計算処理例です。

2017-06-08_21h33_55.png

機能紹介

  • 文字連結

    • レコード番号、ステータスを文字項目に連結
    • 他項目の値で、設定する文字列を切替え
  • 計算

    • サブテーブルの数値を条件付きで合計
    • サブテーブルに未入力行があっても合計

定数

  • 文字: "" で、囲みます。
    "株式会社", "個"

  • 数字: 数字をそのまま記述
    0, 1234, 123.456

演算子

  • 文字連結: &
  • 算術: +,-,,/,%,*,^
  • 比較: =,==,===,!==,>,<,>=,<=,!=,<>
  • 論理: &&,||

関数

関数は、下記のように「(」を空白を入れずに、記述します。
空白があると、fieldcode として扱われます。

 関数名(パラメータ)

OK: CEIL(数値, 1)
NG: CEIL (数値, 1)

関数一覧

  • CEIL: 切り上げ(ROUNDUP関数と機能は同じ)

    • CEIL(fieldcode) 小数点以下を切り上げ
    • CEIL(fieldcode, 小数点位置)
    • 例 CEIL(数値, 1)

  • COUNT: 数値カウント

    • COUNT(fieldcode[,fieldcode...])
    • 例 COUNT(数値)

  • COUNTA: 空白以外カウント

    • COUNTA(fieldcode[,fieldcode...])
    • 例 COUNTA(文字列)

  • COUNTIF: 条件付き数値カウント

    • COUNTIF(condition,fieldcode[,fieldcode...])
    • 例 COUNTIF(文字列=="A", 数値)

  • COUNTROW: サブテーブルの行数

    • COUNTROW(fieldcode)
    • 例 COUNTROW(Table)

  • ROWNO: 処理中のサブテーブル行位置

    • ROWNO(fieldcode)
    • 例 ROWNO(Table)

  • FLOOR: 切り下げ(ROUNDDOWN関数と機能は同じ)

    • FLOOR(fieldcode) 小数点以下を切り下げ
    • FLOOR(fieldcode, 小数点位置)
    • 例 FLOOR(数値, 1)

  • IF: 条件

    • IF(condition,fieldcode[,fieldcode])
    • 例 IF(文字列=="A", 数値, 数値1)

  • IFS: 複数条件

    • IFS(condition,fieldcode[,condition,fieldcode[,fieldcode]][,fieldcode])
    • 例 IFS(文字列=="A", 数値, 文字列1=="B", 数値1)

  • IN: 値の存在チェック
    ex.

    • IN(fieldcode,string[,string...])
    • 例 IN(文字列, "ABC","DEF","GHI")

  • INT: 整数

    • INT(fieldcode)
    • 例 INT(数値/2)

  • FIXED: 数値を桁区切りの文字列に変換

    • FIXED(fieldcode [,小数点以下桁数 [,桁区切り]])
      • 小数点以下桁数(式): 四捨五入なし(規定値)、数値: 指定位置で四捨五入
      • 桁区切り(式): 1:桁区切り(規定値)、0: 桁区切りなし
    • 例 FIXED(数値)
      • FIXED(1000): -> "1,000"
      • FIXED(1234.567): -> "1,234.567"
    • 例 FIXED(数値,1)
      • FIXED(1234.567,1): -> "1,234.6"
    • 例 FIXED(数値,-2)
      • FIXED(1234.567,-2): -> "1,200"
    • 例 FIXED(数値,1,0)
      • FIXED(1234.567,1,0): -> "1234.6"
  • ROUND: 四捨五入

    • ROUND(fieldcode) 小数点以下を四捨五入
    • ROUND(fieldcode, 小数点位置)
    • 例 ROUND(数値, 1)

  • ROUNDDOWN: 切り下げ(FLOOR関数と機能は同じ)

    • ROUNDDOWN(fieldcode) 小数点以下を切り上げ
    • ROUNDDOWN(fieldcode, 小数点位置)
    • 例 ROUNDDOWN(数値, 1)

  • ROUNDUP: 切り上げ(CEIL関数と機能は同じ)

    • ROUNDUP(fieldcode) 小数点以下を切り上げ
    • ROUNDUP(fieldcode, 小数点位置)
    • 例 ROUNDUP(数値, 1)

  • AVE: 平均値

    • AVE(fieldcode[,fieldcode...])
    • 例 AVE(数値)
    • 例 AVE(数値, 数値_0, 数値_1)

  • AVEIF: 条件付き平均値

    • AVEIF(condition,fieldcode[,fieldcode...])
    • 例 AVEIF(文字列=="A", 数値)

  • MAX: 最大値

    • MAX(fieldcode[,fieldcode...])
    • 例 MAX(数値)
    • 例 MAX(数値, 数値_0, 数値_1)

  • MAXIF: 条件付き最大値

    • MAXIF(condition,fieldcode[,fieldcode...])
    • 例 MAXIF(文字列=="A", 数値)

  • MIN: 最小値

    • MIN(fieldcode[,fieldcode...])
    • 例 MIN(数値)
    • 例 MIN(数値, 数値_0, 数値_1)

  • MINIF: 条件付き最小値

    • MINIF(condition,fieldcode[,fieldcode...])
    • 例 MINIF(文字列=="A", 数値)

  • NVL: 指定されたパラメータで最初の空文字以外の値

    • NVL(fieldcode[,fieldcode...])
    • 例 NVL(数値, 0)
    • 例 NVL(数値, 数値_0, 0)
    • 例 NVL(文字列, "初期値")

  • SQRT: 平方根

    • SQRT(fieldcode)
    • 例 SQRT(数値)
  • SUM: 合計

    • SUM(fieldcode[,fieldcode...])
    • 例 SUM(数値)
    • 例 SUM(数値, 数値_0, 数値_1)
    • 例 SUM(テーブル数値, テーブル数値_0, テーブル数値_1)

  • SUMIF: 条件付き合計

    • SUMIF(condition,fieldcode[,fieldcode...])
    • 例 SUMIF(文字列=="A", 数値)
    • 例 SUMIF(テーブル文字列=="A", テーブル数値)

  • PRODUCT: かけ算

    • PRODUCT(fieldcode[,fieldcode...])
    • 例 PRODUCT(数値)
    • 例 PRODUCT(数値, 数値_0, 数値_1)

    • 例 PRODUCT(テーブル数値, テーブル数値_0)

  • PRODUCTIF: 条件付きかけ算

    • PRODUCTIF(condition,fieldcode[,fieldcode...])
    • 例 PRODUCTIF(文字列=="A", 数値)

    • 例 PRODUCTIF(テーブル文字列=="A", テーブル数値)

  • CONCAT: 文字連結

    • CONCAT(fieldcode[,fieldcode...])
    • 例 CONCAT(文字列)
    • 例 CONCAT(文字列, 文字列_0, 文字列_1)

    • 例 CONCAT(テーブル文字列, ",")

  • CONCATIF: 条件付き文字連結

    • CONCATIF(condition,fieldcode[,fieldcode...])
    • 例 CONCATIF(文字列=="A", 文字列_0)

    • 例 CONCATIF(テーブル文字列=="A", テーブル文字列_0 ",")

  • ISNUMBER: 指定した値が数値か判定

    • ISNUMBER(fieldcode)
    • 例 ISNUMBER(数値)
      • ISNUMBER(100) -> true
      • ISNUMBER("100A") -> false
      • ISNUMBER("") -> false
  • CHOOSE: 指定した数値位置(0から始まる)の値を返す

    • CHOOSE(fieldcode, value0 [,value1 [, value2 [,...]]])
    • 例 CHOOSE(数値, 100, 200, 300)
      • CHOOSE(0, 100, 200, 300) -> 100
      • CHOOSE(1, 100, 200, 300) -> 200
      • CHOOSE(3, 100, 200, 300) -> ""
    • 例 CHOOSE(数値, "ABC", "DEF", "XYZ")
      • CHOOSE(2, "ABC", "DEF", "XYZ") -> "XYZ"
  • SWITCH: 複数条件で指定値を返す

    • SWITCH(fieldcode, matched value, value, [matched value, value [,...]], default value)
    • 例 SWITCH(文字列,"A", 数値1, "B", 数値2, 数値3)

  • FIRST: 先頭の有効な値

    • FIRST(fieldcode[,fieldcode...])
    • 例 FIRST(文字列)
    • 例 FIRST(数値)

  • FIRSTIF: 条件付き先頭の有効な値

    • FIRSTIF(condition,fieldcode[,fieldcode...])
    • 例 FIRSTIF(文字列=="A", 文字列)
    • 例 FIRSTIF(文字列=="A", 数値)

  • LAST: 最後の有効な値

    • LAST(fieldcode[,fieldcode...])
    • 例 LAST(文字列)
    • 例 LAST(数値)

  • LASTIF: 条件付き最後の有効な値

    • LASTIF(condition,fieldcode[,fieldcode...])
    • 例 LASTIF(文字列=="A", 文字列)
    • 例 LASTIF(文字列=="A", 数値)

  • SUBTABLE: サブテーブル指定行(0-)の値

    • SUBTABLE(fieldcode [, 指定行])
    • 例 SUBTABLE(文字列, 0)
    • 例 SUBTABLE(文字列)

  • ARRAY: 配列

    • ARRAY(fieldcode[,fieldcode[,...]])
    • ARRAY(文字列1,文字列2)
  • ARRAY_COUNT: 配列数

    • ARRAY_COUNT(fieldcode[,fieldcode[,...]])
    • 例 ARRAY_COUNT(文字列1,文字列2)
  • ARRAY_DEL: 配列要素を削除

    • ARRAY_DEL(fieldcode[,fieldcode[,...]])
    • ARRAY_DEL(チェックボックス,文字列2)
    • ARRAY_DEL(チェックボックス1,文字列1,チェックボックス2)
  • ARRAY_GET: 配列の指定位置(0-)の1要素を取得

    • ARRAY_GET(fieldcode,指定位置)
    • 例 ARRAY_GET(チェックボックス1,0)
  • ARRAY_SORT: 配列のソート

    • ARRAY_SORT(fieldcode [,ソート順])
      • ソート順: 1:昇順、0:降順
    • 例 ARRAY_SORT(チェックボックス1)
    • 例 ARRAY_SORT(チェックボックス1,0)
  • REVERSE: 配列の反転、文字列の反転

    • REVERSE(fieldcode)
    • 例 REVERSE(チェックボックス)
    • 例 REVERSE(ARRAY("AB","CD","EF")) // -> ARRAY("EF","CD","AB")
    • 例 REVERSE(文字列)
    • 例 REVERSE("ABCDEF") // -> "FEDCBA"
  • TARRAY: テーブル内項目の配列化

    • TARRAY(fieldcode [,fieldcode [,...]])
    • 例 TARRAY(文字列1,文字列2)
  • TARRAYIF: 条件付きテーブル内項目の配列化

    • TARRAYIF(condition,fieldcode [,fieldcode [,...]])
    • 例 TARRAYIF(文字列=="A",文字列1,文字列2)
  • TDS: テーブル内項目の配列化(配列の重複値を排除)

    • TDS(fieldcode [,fieldcode [,...]])
    • 例 TDS(文字列1,文字列2)
  • TDSIF: 条件付きテーブル内項目の配列化(配列の重複値を排除)

    • TDSIF(condition,fieldcode [,fieldcode [,...]])
    • 例 TDSIF(文字列=="A",文字列1,文字列2)
  • TDUPCK: テーブル重複値チェック テーブル内項目を指定して重複値がある場合、true を返す

    • TDUPCK(fieldcode)
    • 例 TDUPCK(文字列)
      • TDUPCK(文字列) -> true 重複値がある場合, false 重複値が無い場合
  • DISTINCT: 配列の重複値を排除

    • DISTINCT(fieldcode[,fieldcode[,...]])
    • 例 DISTINCT(文字列1,文字列2)
    • 例 DISTINCT(チェックボックス1,チェックボックス2)
  • INTERSECT: 配列の積集合(両方の配列に存在する値を配列で返す)

    • INTERSECT(fieldcode,fieldcode)
    • 例 INTERSECT(チェックボックス1,チェックボックス2)
  • RAND: 0以上、1未満の範囲で少数の乱数を返す

    • RAND()
    • 例 RAND()
  • RANDBETWEEN: 指定した範囲で整数の乱数を返す

    • RANDBETWEEN(fieldcode, fieldcode)
    • 例 RANDBETWEEN(1, 10)

日付関数

  • DATE_DIFF: 日付差分関数

    • DATE_DIFF(fieldcode|"TODAY" ,fieldcode|"TODAY" ,type)
      • type : "years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"
    • 例 DATE_DIFF(日付, "TODAY", "years")

  • DATE_FORMAT: 日付関数

    • DATE_FORMAT(fieldcode [,format [,timezone]])
    • DATE_FORMAT("TODAY"[,format [,timezone]])
    • 例 DATE_FORMAT(日付, "YYYY-MM-DD")
    • 例 DATE_FORMAT(日付, "e")
      • 曜日を 0 ~ 6 で返す
    • 例 DATE_FORMAT(日付, "ddd")
      • 曜日を Sun, Mon... で返す
    • 例 DATE_FORMAT(日時, "YYYY-MM-DDTHH:mmZ")

※DATE_FORMATは、moment.js というライブラリを使っており、その書式が使えます。
moment.js の書式

  • DATE_ADD: 日付加算

    • DATE_ADD(fieldcode|"TODAY", num, type[, format])
      • type : "year", "month", "week", "day", "hour", "minute", "second"
    • 例 DATE_ADD(日付, 1, "month", "YYYY-MM-DD")

  • DATE_STARTOF: 日付関数

    • DATE_STARTOF(fieldcode|"TODAY" , type[, format])
    • 例 DATE_STARTOF(日付, "month", "YYYY-MM-DD")

  • DATE_ENDOF: 日付関数

    • DATE_ENDOF(fieldcode|"TODAY" , type[, format])
    • 例 DATE_ENDOF(日付, "month", "YYYY-MM-DD")

  • TODAY: 本日日付

    • TODAY()
    • 例 TODAY()
      DATE_FORMAT("TODAY","YYYY-MM-DD") と同等
  • NOW: 現在時刻 ISO形式、日時項目設定用

    • NOW()
    • 例 NOW()
      ⇒ "2019-01-28T17:02:25.527Z"
  • DURATION: 期間関数 (milliseconds に変換します)

    • DURATION(fieldcode [, type])
      • type : "years", "months", "days", "hours", "minutes", "seconds"
    • 例 DURATION(時刻)
    • 例 DURATION(数字, "hours")

  • DURATION_AS: 期間関数 (指定単位に変換します)

    • DURATION_AS(fieldcode, type)
      • type : "years", "months", "days", "hours", "minutes", "seconds"
    • 例 DURATION_AS(時刻, "hours")

  • DURATION_GET: 期間関数 (指定単位の数値を取得します)

    • DURATION_GET(fieldcode, type)
      • type : "years", "months", "days", "hours", "minutes", "seconds"
    • 例 DURATION_GET(時刻, "hours")

  • DURATION_FORMAT: 期間書式変換 (指定書式に変換します)

    • DURATION_FORMAT(fieldcode, format)
      • format: 下記書式の組み合わせを指定
        • "$": 期間がマイナスの場合、"-"を表示
        • "#Y", "#M", "#D", "#H", "#m", "#s": 指定単位に変換TOTAL(小数を含む)
        • "%Y", "%M", "%D", "%H", "%m", "%s": 指定単位に変換TOTAL(小数を含まない)
        • "@Y", "@M", "@D", "@H", "@m", "@s": 指定単位に変換
        • "HH", "MM", "SS": 指定単位を取得(2桁表示)
    • 例 DURATION_FORMAT(時刻, "HH:mm")
    • 例 DURATION_FORMAT(時刻, "%H時間 @m分")

文字列関数

  • ASC: 全角文字を半角文字に変換

    • ASC(fieldcode [,"akmnst"])
      • option : "akmnst" 変換対象文字種類
        • "a": アルファベット
        • "k": カナ
        • "m": 記号 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}
        • "n": 数字
        • "s": 空白
        • "t": チルダ ~
    • 例 ASC(文字列)
    • 例 ASC(文字列, "a")
    • 例 ASC(文字列, "an")
  • JIS: 半角文字を全角文字に変換

    • JIS(fieldcode [,"akmnst"])
      • option : "akmnst" 変換対象文字種類
        • "a": アルファベット
        • "k": カナ
        • "m": 記号 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}
        • "n": 数字
        • "s": 空白
        • "t": チルダ ~
    • 例 JIS(文字列)
    • 例 JIS(文字列, "a")
    • 例 JIS(文字列, "an")
  • HIRAGANA: 全角カナを全角かなに変換

    • HIRAGANA(fieldcode)
    • 例 HIRAGANA(文字列)
  • KATAKANA: 全角かなを全角カナに変換

    • KATAKANA(fieldcode)
    • 例 KATAKANA(文字列)
  • FIND: 文字列の検索で、文字位置を返す

    • FIND(fieldcode, string)
    • 例 FIND(文字列, "A")

  • MATCH: 文字列の検索(正規表現)で、文字列(g オプション指定時は配列)を返す

    • MATCH(fieldcode, pattern[, flags])
      • flag: "g", "i", "m", "u", "y"
    • 例 MATCH(文字列, "A.b", "i")

  • SEARCH: 文字列の検索(正規表現)で、文字位置を返す

    • SEARCH(fieldcode, pattern[, flags])
      • flag: "g", "i", "m", "u", "y"
    • 例 SEARCH(文字列, "A.b", "i")

  • TEST: 文字列の検索で、文字の有無(true, false)を返す

    • TEST(fieldcode, string [, string...])
    • 例 TEST(文字列, "A", "B")

  • TESTRE: 文字列の検索(正規表現)で、文字の有無(true, false)を返す

    • TESTRE(fieldcode, pattern[, pattern])
    • 例 TESTRE(文字列, "A.b", "AAX", "Hello")

  • TEXTJOIN: 文字列の結合

    • TEXTJOIN(delimiter, ignore_empty, fieldcode [, fieldcode...])
      • ignore_empty: 1, 0
    • 例 TEXTJOIN("," , 1, 文字列1, "A.b", 文字列2)

  • REPEAT: 文字列の繰り返し

    • REPEAT(fieldcode, count)
    • 例 REPEAT(文字列, 4)
    • 例 REPEAT(文字列, 数値)
    • 例 REPEAT("ABC", 数値)
  • REPLACE: 文字列の置換(マッチした先頭のみ置換)

    • REPLACE(fieldcode, pattern, string)
    • 例 REPLACE(文字列, "AB", "XYZ")

  • REPLACEALL: 文字列の置換

    • REPLACEALL(fieldcode, pattern, string)
    • 例 REPLACEALL(文字列, "AB", "XYZ")

  • REPLACERE: 文字列の置換(正規表現)

    • REPLACERE(fieldcode, pattern[, flags], string)
      • flag: "g", "i", "m", "u", "y"
    • 例 REPLACERE(文字列, "A.b", "i", "XYZ")

  • SPLIT: 区切り文字で配列に変換

    • SPLIT(fieldcode, delimiter [, flags])
      • flag: 0: 空文字要素を削除しない 1: 空文字要素を削除
    • 例 SPLIT(文字列, ",")

    • 例 SPLIT(文字列, ",", 1)

  • JOIN: 配列を区切り文字で文字列に変換

    • JOIN(fieldcode, delimiter [, flags])
      • flag: 0: 空文字要素を削除しない 1: 空文字要素を削除
    • 例 JOIN(文字列, ",")

    • 例 JOIN(文字列, ",", 1)

  • UPPER: 大文字に変換

    • UPPER(fieldcode)
    • 例 UPPER(文字列)

  • LOWER: 小文字に変換

    • LOWER(fieldcode)
    • 例 LOWER(文字列)

  • LEFT: 文字列の左

    • LEFT(fieldcode, length)
    • 例 LEFT(文字列, 3)

  • MID: 文字列の指定位置から

    • MID(fieldcode, start, length)
    • 例 MID(文字列, 2, 3)

  • RIGTH: 文字列の右

    • RIGHT(fieldcode, length)
    • 例 RIGHT(文字列, 3)

  • SLICE: 文字列・配列の切り出し(0 から開始)

    • SLICE(fieldcode, start, end)
    • 例 SLICE(文字列, 2, 3)
    • 例 SLICE(チェックボックス, 2, 3)

  • SUBSTR: 文字列の切り出し(0 から開始)

    • SUBSTR(fieldcode, start, length)
    • 例 SUBSTR(文字列, 2, 3)

  • SUBSTRING: 文字列の切り出し(0 から開始)

    • SUBSTRING(fieldcode, start, end)
    • 例 SUBSTRING(文字列, 2, 3)

  • TRIM: 文字列から先頭および末尾の空白を削除

    • TRIM(fieldcode)
    • 例 TRIM(文字列)

  • LTRIM: 文字列から先頭の空白を削除

    • LTRIM(fieldcode)
    • 例 LTRIM(文字列)

  • RTRIM: 文字列から先頭および末尾の空白を削除

    • RTRIM(fieldcode)
    • 例 RTRIM(文字列)

  • LENGTH: 文字列の長さ

    • LENGTH(fieldcode)
    • 例 LENGTH(文字列)

  • NEWLINE: 改行文字を返す

    • NEWLINE()
    • 例 "AA"&NEWLINE()&"BB"

論理関数

  • BOOL: 論理値変換

    • BOOL(fieldcode)
    • 例 BOOL(文字列)

  • NOT: 否定

    • NOT(fieldcode)
    • 例 NOT(文字列)

  • AND: 論理積

    • AND(condition[,condition...])
    • 例 AND(文字列=="A", 文字列1=="B", 文字列2=="C")

  • OR: 論理和

    • OR(condition[,condition...])
    • 例 OR(文字列=="A", 文字列1=="B", 文字列2=="C")

  • XOR: 排他的論理和

    • XOR(condition[,condition...])
    • 例 XOR(文字列=="A", 文字列1=="B", 文字列2=="C")

ユーザー選択、組織選択、グループ選択情報

  • SEL_CODE: コード情報

    • SEL_CODE(fieldcode [, "code"|"array"|"text" [, delimiter]])
    • 例 SEL_CODE(ユーザー選択)
    • 例 SEL_CODE(ユーザー選択, "array")
    • 例 SEL_CODE(ユーザー選択, "text", ", ")
    • 例 SEL_CODE(組織選択)
    • 例 SEL_CODE(グループ選択)
    • 例 SEL_CODE(作成者)
    • 例 SEL_CODE(更新者)
  • SEL_NAME: NAME情報

    • SEL_NAME(fieldcode [, "code"|"array"|"text" [, delimiter]])
    • 例 SEL_NAME(ユーザー選択)
    • 例 SEL_NAME(ユーザー選択, "array")
    • 例 SEL_NAME(ユーザー選択, "text", ", ")
    • 例 SEL_NAME(組織選択)
    • 例 SEL_NAME(グループ選択)
    • 例 SEL_NAME(作成者)
    • 例 SEL_NAME(更新者)
  • SET_CODE: ユーザー選択、組織選択、グループ選択のコード設定

    • SET_CODE(fieldcode [, fieldcode...]])
    • 例 SET_CODE("usercode1","usercode2")
    • 例 SET_CODE(SEL_CODE(ユーザー選択, "array"),"usercode1")
    • 例 SET_CODE("orgcode1","orgcode1")
    • 例 SET_CODE("groupcode1")

ログイン情報

  • LOGIN_NAME: ログイン名

    • LOGIN_NAME()
    • 例 LOGIN_NAME()

  • LOGIN_NAME: ログインコード

    • LOGIN_CODE()
    • 例 LOGIN_CODE()

  • LOGIN_EMAIL: ログインメールアドレス

    • LOGIN_EMAIL()
    • 例 LOGIN_EMAIL()

LET関数(変数を利用した計算式)

一つ以上の変数名と変数名を使用した計算式を指定できます。

  • LET: LET関数内で変数を定義し、LET関数内で使用可
    • LET(変数名1,式1[,変数名2,式2[,...], 式)
    • 例 LET(pi,3.1415926, 2*pi*数値)
    • 例 LET(pi,3.1415926, r,数値, pi*r**2)
    • 例 LET(縦,数値1, 横,数値2, 縦*横)

計算式の書き方

フィールドコードの設定

計算式では、 フィールドコードを使いますので、初期設定のままでは大変分かりにくくなってしまいます。
始めに、フィールドコードをラベルにあわせて設定しましょう。
なお、フィールドコードには使用できない文字がありますので、適時変更します。

  • 既定のフィールドコード: 数値 * 数値_0
  • ラベルに合わせた変更後: 単価 * 数量

kintone フィールドコード設定プラグインを使うとまとめて、フィールドコードをラベルに合わせることができます。 

数値計算

  • 金額の計算式: 単価 * 数量
  • 消費税(端数を切り下げの例): FLOOR(単価 * 数量 * 0.8)
  • サブテーブルの計算:SUM(金額)
  • サブテーブルの条件付き合計: SUMIF(IN(ドロップダウン_0, "電車(片道)", "電車(往復)"), 数値)
  • サブテーブルの条件付き平均: AVEIF(IN(ドロップダウン_0, "電車(片道)", "電車(往復)"), 数値)

2017-06-13_08h55_19.png

足し算と SUM の違い

足し算 A+B と合計 SUM(A,B) では、未入力時の計算結果が異なります。

計算式内に未入力項目があると、

  • 足し算 A+B : 空文字
  • SUM(A,B) : 未入力を除いた合計

2018-06-23_13h31_58.png

2018-06-23_13h31_24.png

レコード番号

フィールドコードと \$id を指定できます。
\$id は、フォーム上にレコード番号を配置しなくても使用できます。

  • IDによる連番: "A" & RIGHT(10000000 + \$id, 5)
  • IDによる連番2: IF(\$id, "A" & RIGHT(10000000 + \$id, 5), "(自動設定)")

リビジョン

計算式で、$revision を参照できます。(Ver.35 以降でサポート)
$revision は、現在の値を返します。
新規レコード追加画面では、$revision は、"" となります。

コメントの書き方

計算式に「//」を記述すると、行末までコメントになります。
(コメント機能は、Ver.34 以降でサポート)

  • 例1:1行すべてコメント
    • // 1行コメント
      DATE_FORMAT(日付)
  • 例2:行の途中から行末までコメント
    • DATE_FORMAT(日付) // コメント
  • 例3:コメントが混在
    • // 1行コメント
      DATE_FORMAT(日付) //コメント
      & 時刻 // コメント

"//"文字列の記述方法

計算式内で「//」を記述すると、行末までコメントになりますので、"//" 文字列を直接記述できません。
文字列連結で、「/」を分けて記述してください。

  • 記述例
    • "/"&"/"
    • "AB/"&"/CD"

プラグインの追加

  • 「kintone システム管理 > プラグイン」で追加します。
  • 「アプリの設定 > プラグイン」で、アプリに追加します。

2017-06-07_18h33_39.png

プラグインの設定

  • 対象アプリで計算式を使用する項目を選択して、計算式を設定します。
  • フィルタ機能で、表示項目を絞れます。
  • グリッドのラベル欄をクリックすると、その項目順にソートされます。
  • 「保存する」をクリックします。

※フォーム変更時は、本番環境にフォーム変更を反映後に、本プラグイン設定を行ってください。

2019-02-24_15h07_07.png

※ 計算式に「改行」を指定して、式を見やすく出来ます。
「改行」は、実行時には無視されます。

循環参照の許可

計算式に自項目を含め、循環参照を指定可能にします。
計算処理が無限ループにならないように、計算式を指定する必要があります。

編集

編集を選択した項目は、一覧画面編集・追加編集画面で編集可能になります。

非表示

非表示を選択した項目は、一覧画面・詳細画面・追加編集画面で非表示になります。

ランク

計算式の実行順序をランクで指定できます。
ランクが大きい項目が実行順序が早く、未設定はランク 0 と同じです。

  • ランク指定値:10000 ~ -10000 の範囲

運用環境に反映

「運用環境に反映」を選択すると、「保存」クリック時に、直接運用環境に反映されます。

フィルタ機能

  • フィルタ入力欄に、キーワードを入力すると、該当する項目のみ表示されます。
  • キーワードは、黄色表示となります。
  • またドロップダウンで、抽出条件と対象欄を選択できます。
  • リセットボタンで、フィルタをリセットします。
  • フィルタ後に再表示されても、表示順は戻りません。必要に応じソート機能を使います。

2017-09-18_22h23_50.png

ソート機能

  • グリッドのヘッダ部をクリックすると、ソートされます。
  • もう一度クリックすると、逆順に表示されます。

2017-09-18_22h33_50.png

関数入力支援

編集エリア内で「?」を入力すると、指定可能な関数一覧が表示されます。
関数をクリックすると編集エリアに関数名が入力されます。

2017-09-18_19h43_34.png

フィールドコード入力支援

編集エリア内で「:」(コロン)を入力すると、項目一覧(項目名:フィールドコード)が表示されます。
項目をクリックすると編集エリアにフィールドコードが入力されます。

2017-09-18_19h41_02.png

言語ごとの名称設定時の条件式について

項目の値に、言語ごとの名称を設定した場合、条件式には各言語に対応する条件を指定します。

  • ドロップダウン、ラジオボタン、チェックボックス、複数選択、ステータス

チェックボックスの言語ごとの名称設定例
 英語、日本語、中国語にそれぞれ名称を設定している

2017-08-26_14h13_52.png

ユーザの設定言語により、表示される値が異なりますので、条件式も対応します。
sample1 が選択された場合の条件式は、下記のようにします。

IN(チェックボックス, "sample1", "サンプル1", "样品1")

エラーチェック

計算式に、定数、演算子、関数名、フィールドコード以外を指定するとエラー表示します。

2017-09-18_19h44_36.png

循環参照エラーについて

計算式において、項目間で互いに参照する設定は、行わないでください。
「循環参照を許可」を非選択であれば、
単純な2項目間の循環参照は、「保存」時のチェックでエラーになりますが、
複数項目を経由して、循環参照を設定すると、レコード変更時に無限ループになります。
ただし、編集時に1画面で100,000 回以上プラグインの解析処理が行われると、エラーとして処理を中断します。

2017-06-07_22h12_27.png

2017-06-07_22h16_17.png

一括計算機能

一覧画面で、対象レコードの一括計算が出来ます。一括計算時の最大対象件数は20万件。

一括計算機能のプラグイン設定

一括計算を行うには、ボタン設定と一覧別設定を指定します。

2019-02-09_17h53_51.png

ボタン設定

編集画面・一覧画面で表示するボタンについて設定します。

  • チェック: 選択状態でボタンを表示
  • デフォルト: ボタン表示名
  • 英語: 英語表記
  • 日本語: 日本語表記
  • 中国語: 中国語表記

2019-02-09_18h06_18.png

一覧別設定

「一括計算ボタン」を表示する一覧画面を設定します。

  • すべての一覧で有効: チェックするとすべての一覧画面でボタンを表示
  • チェック: 選択した一覧でボタンを表示

2019-02-09_18h06_48.png

一括計算の実行

  • 「一括計算」ボタンをクリック

2019-02-09_18h12_09.png

  • 「更新」ボタンをクリック

2019-02-09_18h15_04.png

  • 更新結果の表示

更新レコード数(更新数/変更数/計算対象)

2019-02-09_18h16_03.png

既存レコードの更新

計算式を変更後に、既存レコードの更新が出来ます。
対象は、対象アプリの全レコードです。

  • 「既存レコードを更新」ボタンをクリックします。
  • 対象レコード数が表示されます。
  • 「レコード更新」ボタンをクリックすると更新処理が開始されます。

※フォーム変更を本番環境に反映後に、既存レコード変更を行ってください。
変更前にデータのバックアップを取得してください。

2017-06-07_18h36_41.png

計算式ツール

計算式を作成するためのツール機能です。
レコード詳細画面、レコード追加・編集画面で利用できます。
複雑な計算式の作成や動作確認を行えます。

計算式ツールの有効化

プラグイン設定画面で「ツール」オプションを選択して、「保存」します。

2019-01-30_15h50_08.png

計算式ツールの表示

「計算式ツールの表示」アイコンをクリックすると、計算式ツールが表示されます。

2019-01-30_16h02_30.png

計算式の入力と実行

  • 通常の計算式
    • 計算式を入力し、テーブルを未選択
    • 計算ボタンをクリックすると、表示中レコードの値を使って計算
    • 検査ボタンをクリックすると、計算式のチェック
      レコードの値にかかわらず、計算式全体をチェック

2019-01-30_16h06_47.png

  • テーブル行単位の計算式
    • 計算式を入力し、テーブルを選択
    • 計算ボタンをクリックすると、表示中レコードのテーブル値を使って計算
      指定した行数分を計算する
    • 検査ボタンをクリックすると、計算式のチェック
      レコードの値にかかわらず、計算式全体をチェック

2019-01-30_16h16_55.png

フィールドコードの入力支援

計算式入力エリアで、「:」を入力すると項目一覧が表示されます。

2019-01-30_16h28_22.png

関数の入力支援

計算式入力エリアで、「?」を入力すると項目一覧が表示されます。

2019-01-30_16h28_52.png

項目に設定された計算式の入力支援

計算式入力エリアで、「@」を入力すると計算式が設定された項目一覧が表示されます。
項目を選択すると、設定済みの計算式が展開されます。

2019-01-30_16h29_08.png

レコードの移動

レコード詳細画面で計算式ツール表示中に、kintone のショートカットでレコードを移動できます。
計算式ツールの入力エリア外にフォーカスを当てて、「j」または「k」を押下します。
同じ計算式を別のレコードで動作確認が出来ます。

  • j : 次のレコードを選択する
  • k : 前のレコードを選択する

2019-01-30_16h24_18.png

プラグイン設定のダウンロード

  • プラグイン設定をダウンロードできます。
  • 計算式を変更している場合は、変更後の設定が対象です。
  • ブラウザ IE については、プラグイン設定のダウンロードの動作対象外です。

2017-09-18_19h47_55.png

プラグイン設定のアップロード

  • プラグイン設定をアップロードできます。
  • フィールドコードをキーにして、設定ファイルから計算式を設定します。
  • ブラウザ IE については、プラグイン設定のアップロードの動作対象外です。

2017-09-18_19h52_01.png

  • プラグイン設定ファイル情報を確認して、設定します。

2017-09-18_19h54_07.png

注意事項

  • 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。
  • 計算項目を計算式に指定する場合
    計算項目を計算式プラグインの計算式で使用した場合、 計算項目の値が変化したタイミングでは、計算式プラグインの計算が行われません。 これは、kintone イベント処理の仕様によるものです。 ただし「保存」時のイベントで再計算されますので、レコード更新後には正しい値になります。 対応策としましては、計算項目で指定している計算と同等の式を 直接対象の項目に計算項目の代わりに設定してください。

計算式の計算結果を参照する場合の注意事項

計算式プラグインは Excel のように無限に計算結果を他のセルで使用できるようにはなっていません。
※ 項目の値変更イベントで、最終的に正しい結果になる場合もあります。

OK 税抜金額:単価 * 数量
OK 消費税:FLOOR(税抜金額 * 0.08)
NG 税込金額:税抜金額 + 消費税

計算式プラグインでは、下記のようなしくみで計算しています。

  1. テーブル以外の項目について、(ランク順・レイアウトの上から下・左から右)の計算式を計算
  2. テーブル内の項目について、(ランク順・レイアウトの上から下・左から右)の計算式を順番に計算
  3. テーブル以外の項目について、(ランク順・レイアウトの上から下・左から右)の計算式を計算

計算結果を使用する場合、1段階であれば 3. の計算で対応できますが、
2段階で計算結果を使用する場合は、保証できません。
ランクを指定しない場合、たまたま計算する順番が計算結果を使う順番であれば計算されます。

対応策としては、下記があります。
・ランクを指定して、計算順序を指定
・項目の計算結果を使うのではなく、それも計算式に置き換え

OK 税抜金額:単価 * 数量
OK 消費税:FLOOR(税抜金額 * 0.08)
OK 税込金額:税抜金額 + FLOOR(税抜金額 * 0.08)

計算式設定例

値変換

項目の値により、別の項目に値を設定します。

  • 数値変換:ラジオボタン項目の値により、対応する数値に変換
    • SWITCH(ラジオボタン,"A",10,"B",20,"C",30,0)
  • 文字変換:ドロップダウン項目の値により、対応する文字列に変換
    • SWITCH(ドロップダウン,"A","札幌","B","仙台","C","大阪","東京")
  • ランク変換:数値により、対応するランク(ドロップダウン項目)に変換
    • IFS(数値A>=80,"A",数値A>=50,"B","C")

2018-06-23_14h02_41.png

2018-06-23_14h01_13.png

文字列変換

文字列Aの"-"を指定した文字列""に変換

  • 最初にマッチングした文字列のみ変換
    • REPLACE(文字列A,"-","")
  • マッチングしたすべての文字列を変換
    • REPLACERE(文字列A,"-","g","")

2019-01-10_19h37_51.png

2019-01-10_19h38_40.png

消費税計算

テーブル内の金額を合計して、消費税計算を行います。
テーブル内金額の合計は、計算項目でも出来ますが、計算項目だと値が変化しても計算式プラグインで認識できません。そのためテーブル内金額の合計も計算式プラグインで行います。

  • 金額合計(税抜き)
    • SUM(税抜き金額)
  • 消費税:小数点以下を切り捨て
    • FLOOR(金額合計_税抜き*0.08)
  • 金額合計(税込み)
    • FLOOR(金額合計_税抜き*1.08)
  • 税抜金額
    • 税抜き価格*数量

2018-06-23_12h52_01.png

2018-06-23_12h53_08.png

テーブル内項目の特定値をカウント

テーブル内科目の"切符代"をカウントする例です。

  • テーブル内の条件付きカウント
    COUNTIF 関数で、条件付きカウントを行います。
    • COUNTIF(科目=="切符代", 1)

テーブルの金額を科目別に集計

テーブル内の金額項目を同じ行内の科目別に集計して、合計項目に設定する例です。

  • テーブル内の条件付き集計
    SUMIF 関数で、条件付き集計を行います。
    • SUMIF(科目=="切符代", 金額)

2017-10-04_21h15_35.png

2017-10-04_22h11_14.png

テーブル行の値を取得

顧客対応履歴などで、最新対応内容を取得する場合の計算式設定例です。
テーブル内の最終行または、テーブル内の最大日付の行を判定して取得します。

  • テーブルの最終行
    LASTIF 関数で、値の入っている最終行を取得します。

    • DATE_FORMAT(LASTIF(対応日付, 対応日付), "YYYY-MM-DD")
    • LASTIF(対応日付, 対応内容)
  • テーブルの最大値
    テーブル内の最大日付を取得して、その値の行にある項目をLASTIF 関数で取得します。

    • DATE_FORMAT(MAX(対応日付), "YYYY-MM-DD")
    • LASTIF(対応日付==MAX日付, 対応内容)

2017-10-10_10h48_46.png

2017-10-10_10h47_53.png

時間集計の設定

勤務時間を集計する設定例です。

  • テーブル内の時刻項目を計算して、勤務時間を集計します。

    • 県内実務時間
      DURATION_FORMAT(
      SUMIF(AND(区分=="県内",終了,開始,休憩),
      DURATION(終了)-DURATION(開始)-DURATION(休憩,"minutes")),
      "$%H時間 @m分")

  • テーブル内の時刻項目から勤務時間を計算します。

    • 勤務時間
      IF(AND(終了,開始,休憩),
      DURATION_FORMAT(
      DURATION(終了)-DURATION(開始)-DURATION(休憩,"minutes"),
      "$%H時間 @m分"))

2017-10-29_20h01_17.png

2017-10-29_20h11_10.png

日付計算

2019-01-24_19h53_07.png

  • 前月末
    IF(日付,DATE_ENDOF(DATE_ADD(日付,-1,"month","YYYY-MM-DD"),"month","YYYY-MM-DD"))
  • 当月初
    IF(日付,DATE_STARTOF(日付,"month","YYYY-MM-DD"))
  • 当月末
    IF(日付,DATE_ENDOF(日付,"month","YYYY-MM-DD"))
  • 翌月初
    IF(日付,DATE_ADD(日付,1,"month","YYYY-MM-01"))
  • 翌月末
    IF(日付,DATE_ENDOF(DATE_ADD(日付,1,"month","YYYY-MM-DD"),"month","YYYY-MM-DD"))

2019-02-19_01h24_23.png

  • 年初
    IF(日付,DATE_STARTOF(日付,"year","YYYY-MM-DD"))
  • 年末
    IF(日付,DATE_ENDOF(日付,"year","YYYY-MM-DD"))
  • 年度初日
    IF(日付,
    IF(DATE_FORMAT(日付,"MM")>="04",
    DATE_FORMAT(日付,"YYYY-04-01"),
    DATE_ADD(日付,1,"year","YYYY-04-01")))
  • 年度末
    IF(日付,
    IF(DATE_FORMAT(日付,"MM")>="04",
    DATE_ENDOF(DATE_ADD(日付,1,"year","YYYY-03-01"),"month","YYYY-MM-DD"),
    DATE_ENDOF(DATE_FORMAT(日付,"YYYY-03-01"),"month","YYYY-MM-DD")))

日時項目の設定

  • 更新時に、2時間後の日時を日時項目に設定する例です。

    • DATE_ADD("TODAY",2, "hour", "YYYY-MM-DDTHH:mmZ")
  • 日付項目と時刻項目を合わせて日時項目に設定する例です。

    • IF(AND(日付, 時刻),
      DATE_FORMAT(
      DATE_FORMAT(日付,"YYYY-MM-DD") & " " & 時刻,
      "YYYY-MM-DDTHH:mmZ"))

正規表現による置換

  • 数値の数字をスペースで区切る変換例です。
    正規表現を使った置換で、数値の前にスペースを追加して、
    SLICEで余計な先頭のスペースを外しています。
    • SLICE(REPLACERE(数値,"[0-9]","g"," $&"),1,100)
      ※数値: 数値項目のフィールドコード

計算式プラグインの使用例

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
rex0220

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?