rex0220 計算式プラグイン

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

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

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

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


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

[rex0220 stores](https://rex0220.stores.jp)で、販売中です。

# 直近の変更点

Ver.90
・計算式に添付ファイル項目指定時、レコード追加・更新成功イベントで計算処理を実行するように変更
　※プラグイン設定画面で、「保存」が必要です。
・一括計算処理時に、EV_INFO("type") とEV_INFO("mode") に "batch" をセットするように変更
・「既存レコードを変更」処理時に、EV_INFO("type") とEV_INFO("mode") に "allUpdate" をセットするように変更

Ver.89
・ROWID 関数追加。テーブル行の id を取得
  ROWID([テーブル][,指定行])
  ROWID() -> カレントテーブル・カレント行の id
  ROWID(テーブル, 0) -> テーブル指定行の id
・$revision を計算式に指定時、レコード保存成功時イベントで計算処理実行を追加

Ver.88
・COUNTROW で指定したテーブルが他の計算式で指定されていない場合、一括計算で計算結果が""になる不具合対応
　※Ver.88をインストール後に、プラグイン設定画面で「保存」操作が必要です。


# 計算式応用例

- [rex0220 標準計算式 vs 計算式プラグイン](https://qiita.com/rex0220/items/28fd2908ab6971d662cd#%E6%AF%94%E8%BC%83%E6%BC%94%E7%AE%97%E5%AD%90)
- [rex0220 計算式プラグイン 追加項目の初期値設定](https://qiita.com/rex0220/items/3f749320e57338101bb0)
- [rex0220 計算式プラグイン 足し算](https://qiita.com/rex0220/items/2ef2621179fd39caf64b)
- [rex0220 計算式プラグイン 小数計算例](https://qiita.com/rex0220/items/90836627a186621ee83f)
- [rex0220 計算式プラグイン 最大値・最小値計算](https://qiita.com/rex0220/items/c58516f800fabd578776)
- [rex0220 計算式プラグイン 最大値・最小値があるテーブル行の文字列](https://qiita.com/rex0220/items/0c4a3aae39da6755fd2f)
- [rex0220 計算式プラグイン 日付・日時・時刻の最小値・最大値](https://qiita.com/rex0220/items/b008775eaf63c46182a5)
- [rex0220 計算式プラグイン 小数点3桁表示](https://qiita.com/rex0220/items/a566b7e1c9d77fadee5f)
- [rex0220 計算式プラグイン 文字連結](https://qiita.com/rex0220/items/f2c484dd00fe9c31f5a2)
- [rex0220 計算式プラグイン 和暦変換](https://qiita.com/rex0220/items/9f8eb7607fec4f22060a)
- [rex0220 計算式プラグイン 日またがりの時間計算](https://qiita.com/rex0220/items/509f6a63dd966c4001ce)
- [rex0220 計算式プラグイン 合計時間を"H時間m分"で表示](https://qiita.com/rex0220/items/ba6cf8a39940e75d78df)
- [rex0220 計算式プラグイン 日付計算](https://qiita.com/rex0220/items/924409c1fc59ade5dc72)
- [rex0220 計算式プラグイン 日付と日時](https://qiita.com/rex0220/items/bf03cc914334fff129e5)
- [rex0220 計算式プラグイン 日付と時刻から日時に変換](https://qiita.com/rex0220/items/d05ca8e450daaf053d50)
- [rex0220 計算式プラグイン 年度計算](https://qiita.com/rex0220/items/c2d593d5c7e685f21f7c)
- [rex0220 計算式プラグイン 期間計算](https://qiita.com/rex0220/items/2e0fa7c8c83512acba3c)
- [rex0220 計算式プラグイン ６ヶ月後の前日](https://qiita.com/rex0220/items/b8d6167e29254e89a198)
- [rex0220 計算式プラグイン 計算対象の項目を編集](https://qiita.com/rex0220/items/f32c9f0f307abc6db25b)
- [rex0220 計算式プラグイン 計算対象のテーブル内項目を編集](https://qiita.com/rex0220/items/a5d1c50ab8f1c6dda9aa)
- [rex0220 計算式プラグイン (株)を株式会社に自動変換](https://qiita.com/rex0220/items/c81af42029f389b4af40)
- [rex0220 計算式プラグイン S-JIS対応していない漢字を変換](https://qiita.com/rex0220/items/9db98b2cf027b686e0b5)
- [rex0220 計算式プラグイン カナ小文字を大文字に変換](https://qiita.com/rex0220/items/f5e9d7c45a42a8b0d261)
- [rex0220 計算式プラグインによるステータス履歴](https://qiita.com/rex0220/items/e71ffac9c2ce1e377874)
- [rex0220 計算式プラグインによるステータス履歴(テーブル版)](https://qiita.com/rex0220/items/024f5315b2a43b5666cd)
- [rex0220 計算式プラグイン 項目の変更履歴をテーブルにセット](https://qiita.com/rex0220/items/2f2118f7ae9aeab1a5f9)
- [rex0220 計算式プラグインでテーブル行番号付与](https://qiita.com/rex0220/items/b985640a19e7ffe4d0ec)
- [rex0220 計算式プラグイン テーブル行IDをセット](https://qiita.com/rex0220/items/8532f30d149da0feca9c)
- [rex0220 計算式プラグインでテーブル内項目の値別に番号付与](https://qiita.com/rex0220/items/7a91b8cdf8c2c253e7f8)
- [rex0220 計算式プラグイン テーブル内商品カテゴリー別番号付与（GPTs版）](https://qiita.com/rex0220/items/2c8e8107d2c23687e069)
- [rex0220 計算式プラグインでテーブルの連続日付](https://qiita.com/rex0220/items/ee4463fb48061a28200c)
- [rex0220 計算式プラグイン テーブル期間計算](https://qiita.com/rex0220/items/681db82c10b4c5c8285f)
- [rex0220 計算式プラグインでテーブル行複写](https://qiita.com/rex0220/items/22e1f326131d325aab7f)
- [rex0220 計算式プラグイン テーブル数値累計](https://qiita.com/rex0220/items/5289fed38a302a3042d3)
- [rex0220 計算式プラグイン テーブル行内で集計](https://qiita.com/rex0220/items/eaca7be7a8f86b457b76)
- [rex0220 計算式プラグイン テーブル行の科目時間数まとめ](https://qiita.com/rex0220/items/0b81551849df5d979ada)
- [rex0220 計算式プラグイン テーブル合計割合計算](https://qiita.com/rex0220/items/cf5a0d4a94d571f13cf2)
- [rex0220 計算式プラグイン テーブル項目の値を集計・取得](https://qiita.com/rex0220/items/cadfc90cef0298100731)
- [rex0220 計算式プラグイン テーブル内小計](https://qiita.com/rex0220/items/63808fc1b0d3ff9cd561)
- [rex0220 計算式プラグイン テーブル内小計２](https://qiita.com/rex0220/items/ca5ddbd4121c28496312)
- [rex0220 計算式プラグイン テーブルに合計行を設定](https://qiita.com/rex0220/items/99287f5c8d26fac6d76a)
- [rex0220 計算式プラグイン テーブル内集計消費税計算](https://qiita.com/rex0220/items/1767781773589d53ddf5)
- [rex0220 計算式プラグイン テーブル処理時間の改善](https://qiita.com/rex0220/items/0add4c5ac2de646af146)
- [rex0220 計算式プラグイン 売上金額の担当分割](https://qiita.com/rex0220/items/5e3dc411e2123e693fb7)
- [rex0220 計算式プラグイン 売上金額の担当分割（複数担当者）](https://qiita.com/rex0220/items/957e0e54a5eaabc0ebf0)

- [rex0220 計算式プラグイン 金額を月で案分計算](https://qiita.com/rex0220/items/c446675954c338209992)
- [rex0220 計算式プラグイン チェックボックスの扱い方](https://qiita.com/rex0220/items/49aa1c48036f7fa12924)
- [rex0220 計算式プラグイン 複数チェックボックスを文字列に](https://qiita.com/rex0220/items/5113c31ce635cc6db8c9)
- [rex0220 計算式プラグイン 文字列に対応したチェックボックスを選択](https://qiita.com/rex0220/items/8127f4ef3a2c51da9326)
- [rex0220 計算式プラグイン 文字列からチェックボックスをセット](https://qiita.com/rex0220/items/974710f7c3f768f128c4)
- [rex0220 計算式プラグイン チェックボックスの自動セットと手動選択](https://qiita.com/rex0220/items/a4b0084b0785be78f473)
- [rex0220 計算式プラグイン チェックボックス単一選択](https://qiita.com/rex0220/items/94c4d51cf4edb906087b)
- [rex0220 計算式プラグイン チェックボックス単一選択その２](https://qiita.com/rex0220/items/041e77d8f2124a76e48e)
- [rex0220 計算式プラグイン 文字列を抜き出す](https://qiita.com/rex0220/items/974710f7c3f768f128c4)
- [rex0220 計算式プラグイン 複数選択の扱い方](https://qiita.com/rex0220/items/e457b7ab079fd4263188)
- [rex0220 計算式プラグイン 文字列にある月を1～12月の複数選択項目にセット](https://qiita.com/rex0220/items/e194e2642432d4946abf)
- [rex0220 計算式プラグイン スペースフィールド設定](https://qiita.com/rex0220/items/db8c3ff02494dcd161e6)
- [rex0220 計算式プラグイン スペース項目にリンク表示](https://qiita.com/rex0220/items/345b174e6b831a01ae56)
- [rex0220 計算式プラグイン スペース項目にテーブル表示](https://qiita.com/rex0220/items/67717ef03837ef3588e7)
- [rex0220 計算式プラグイン スペース項目にレコードの概要表示](https://qiita.com/rex0220/items/895e9bc6ac837b6cf7d7)
- [rex0220 計算式プラグイン スペース項目の概要印刷](https://qiita.com/rex0220/items/714fe23ea4031bad2e40)
- [rex0220 計算式プラグイン スペース項目で見積書の印刷](https://qiita.com/rex0220/items/190442050295d5345549)
- [rex0220 計算式プラグイン 郵便番号〒マークの表示](https://qiita.com/rex0220/items/c46d6f490a4fd494bd55)
- [rex0220 計算式プラグイン 郵便番号の nnn-nnnn 自動変換](https://qiita.com/rex0220/items/df0dcab2c3aeea610644)
- [rex0220 プラグイン 電話番号の半角自動変換とハイフォンチェック](https://qiita.com/rex0220/items/f78186bffb7eb7bd7793)
- [rex0220 プラグイン カタカナ変換とカタカナチェック](https://qiita.com/rex0220/items/05b98dd625845ccb6733)
- [rex0220 計算式プラグイン テーブル行の選択](https://qiita.com/rex0220/items/617af188f0387c8e2962)
- [rex0220 計算式プラグイン テーブル行数を指定](https://qiita.com/rex0220/items/f8667da39911134a22dd)
- [rex0220 計算式プラグイン テーブル初期設定](https://qiita.com/rex0220/items/20e2cfde9a6141254c1f)
- [rex0220 計算式プラグイン テーブル初期設定(DIC関数版)](https://qiita.com/rex0220/items/2eff0c046852c25327a4)
- [rex0220 計算式プラグイン 文字列からテーブルセット](https://qiita.com/rex0220/items/42147d5dfeddeef10f7f)
- [rex0220 計算式プラグイン 文字列からテーブルセットその２](https://qiita.com/rex0220/items/ffe9b1711f3b26df9adc)
- [rex0220 計算式プラグイン レコード再利用時テーブル最終行のみ設定](https://qiita.com/rex0220/items/3535ec50f1e3135e4588)
- [rex0220 計算式プラグイン レコード再利用時テーブル行を選択して設定](https://qiita.com/rex0220/items/b446a968ac3539c68886)
- [rex0220 計算式プラグイン テーブル集計](https://qiita.com/rex0220/items/25507c54f893d5ba74c5)
- [rex0220 計算式プラグイン 複数テーブルの集計](https://qiita.com/rex0220/items/4d81de6652be1e7c6769)
- [rex0220 計算式プラグイン 複数テーブルの転記(TABLE_DATA関数版)](https://qiita.com/rex0220/items/0fddf69fcc8a47a1189b)
- [rex0220 計算式プラグイン テーブル転記後に編集](https://qiita.com/rex0220/items/c0cf55c400886082ad14)
- [rex0220 計算式プラグイン 仕入れ先別テーブル集計](https://qiita.com/rex0220/items/3087313a2fb3dec02d3d)
- [rex0220 計算式プラグイン 仕入れ先別テーブル集計に入力用請求日を追加
](https://qiita.com/rex0220/items/b3759aa0cc4d07595d8c)
- [rex0220 計算式プラグイン テーブルソート TABLE_SORT関数版](https://qiita.com/rex0220/items/9c79f548200a09e6e61d)
- [rex0220 計算式プラグイン テーブルソート（旧）](https://qiita.com/rex0220/items/ef18842ab51dbf13ab9b)
- [rex0220 計算式プラグイン テーブル行の自動削除 TABLE_SORT関数版](https://qiita.com/rex0220/items/dc0933f23a51600adf7f)
- [rex0220 計算式プラグイン 不要なテーブル行の削除（旧）](https://qiita.com/rex0220/items/4b5d6e215d8065108972)
- [rex0220 計算式プラグイン ルックアップ項目を含む不要なテーブル行の削除（旧）](https://qiita.com/rex0220/items/cd57c427164f8bec9ce0)
- [rex0220 計算式プラグイン テーブル行の自動追加・更新](https://qiita.com/rex0220/items/6b4fe34d184010c6697b)
- [rex0220 計算式プラグイン テーブル行の自動追加・更新その２](https://qiita.com/rex0220/items/b58c0d0b783e28daabea)
- [rex0220 一括更新プラグインと計算式プラグインの連携 テーブル行の自動追加・更新](https://qiita.com/rex0220/items/17820477cb5d4ac4ec7c)
- [rex0220 計算式プラグイン テーブルに月カレンダー](https://qiita.com/rex0220/items/e34187d7b430f1acf366)
- [rex0220 計算式プラグイン テーブルで月カレンダー(週単位)](https://qiita.com/rex0220/items/fca35db47d1858b53156)
- [rex0220 計算式プラグイン テーブルのCSV文字列変換](https://qiita.com/rex0220/items/cba76e240834361df0a4)
- [rex0220 計算式プラグイン テーブルにCSV入力](https://qiita.com/rex0220/items/da655ea5ed9fbfbf7483)
- [rex0220 計算式プラグイン テーブルの転記](https://qiita.com/rex0220/items/2b2cc7108750ac86ee03)
- [rex0220 計算式プラグイン テーブルの転記（ボタン版）](https://qiita.com/rex0220/items/077645f6df21d7221958)
- [rex0220 計算式プラグイン テーブル指定行のコピー](https://qiita.com/rex0220/items/2d1697ba34d0e45feb2e)
- [rex0220 計算式プラグイン テーブル選択行のコピー](https://qiita.com/rex0220/items/b6801cf649d002fbc104)
- [rex0220 計算式プラグイン 複数テーブルの転記](https://qiita.com/rex0220/items/6787eafd8f6c24ff37b4)
- [rex0220 計算式プラグイン チェック時刻の自動セット](https://qiita.com/rex0220/items/8ddf8a65aace872cf893)
- [rex0220 計算式プラグイン ボタンクリックで計算](https://qiita.com/rex0220/items/d9d1ea597df9f4b91ac8)
- [rex0220 計算式プラグイン ボタンクリックでテーブル設定](https://qiita.com/rex0220/items/d69d653e9cc707515943)
- [rex0220 計算式プラグイン ボタンクリックでテーブル行追加](https://qiita.com/rex0220/items/1f031964272e712edfb0)
- [rex0220 計算式プラグイン ボタンクリックでテーブル行追加（FSET_TADD版）](https://qiita.com/rex0220/items/3e36de44361a9e72ffb4)
- [rex0220 計算式プラグイン ボタンクリックでテーブル内項目の更新](https://qiita.com/rex0220/items/00ce5a5903a47bd3e934)
- [rex0220 計算式プラグイン ボタンクリックで日付設定](https://qiita.com/rex0220/items/fe9648aa629217dab670)
- [rex0220 計算式プラグイン ボタンクリックでテーブル内項目をクリア](https://qiita.com/rex0220/items/2440134fda9923c4645c)
- [rex0220 計算式プラグイン ARRAY_MAP 関数](https://qiita.com/rex0220/items/2d101f3fbce95c64750a)
- [rex0220 計算式プラグイン ファイル数をカウント](https://qiita.com/rex0220/items/8c575394e92a81bd1189)
- [rex0220 計算式プラグイン 添付ファイル名の取得](https://qiita.com/rex0220/items/317e1debebc2adf3c92e)
- [rex0220 計算式プラグイン 添付ファイル項目のアップロード期限日](https://qiita.com/rex0220/items/a8117a755718e9234d67)
- [rex0220 計算式プラグイン一括計算のスケジュール実行](https://qiita.com/rex0220/items/f3eb132468aab0a6aee8)
- [rex0220 計算式プラグイン ユーザー選択からユーザー名セット](https://qiita.com/rex0220/items/84ef683a9c0851e0077a)
- [rex0220 計算式プラグイン ユーザー選択から上長セット](https://qiita.com/rex0220/items/e15643d1af77b9f147ed)
- [rex0220 計算式プラグイン ユーザー選択の所属組織セット](https://qiita.com/rex0220/items/e6dc5eecff0bb73a07fa)
- [rex0220 計算式プラグイン ユーザー情報の取得](https://qiita.com/rex0220/items/a79e620add584c8f4413)
- [rex0220 計算式プラグイン ユーザーカスタマイズ項目の取得](https://qiita.com/rex0220/items/d12ad71cccf791d23a50)
- [rex0220 計算式プラグイン ユーザー名からユーザー選択項目をセット](https://qiita.com/rex0220/items/a07e637f8f57376532fb)
- [rex0220 計算式プラグイン 複数ユーザー選択の結合](https://qiita.com/rex0220/items/08e55e1bdd509919878b)
- [rex0220 計算式プラグイン ログインユーザーの所属組織と役職](https://qiita.com/rex0220/items/00b086cb84a4b77e3707)
- [rex0220 計算式プラグイン 組織情報の取得](https://qiita.com/rex0220/items/3a3dde2e49b269830e5a)
- [rex0220 計算式プラグイン 組織情報をテーブルへセット](https://qiita.com/rex0220/items/0b20796a4180c6b1b474)
- [rex0220 計算式プラグイン 組織選択項目の親組織を取得](https://qiita.com/rex0220/items/0eaf51eb778409949ca6)
- [rex0220 計算式プラグイン 組織選択項目の組織メンバー](https://qiita.com/rex0220/items/dc9abc4128d88884485b)
- [rex0220 計算式プラグイン グループ選択項目のメンバー](https://qiita.com/rex0220/items/f49e662f007440b444a3)
- [rex0220 計算式プラグイン 作業者・上長の取得](https://qiita.com/rex0220/items/69356a24f1b97c3c147a)
- [rex0220 計算式プラグイン 作業者の所属組織・グループ](https://qiita.com/rex0220/items/e280ef10137a64188866)
- [rex0220 計算式プラグイン カテゴリーを文字列にセット](https://qiita.com/rex0220/items/75d7ee2c1dc7cbad7b4e)
- [rex0220 計算式プラグイン 文字列複数行の設定例](https://qiita.com/rex0220/items/bd22c3c1b685637bff16)
- [rex0220 計算式プラグイン テーブル内文字列複数行を転記](https://qiita.com/rex0220/items/5b5780bdd7e7e543a205)
- [rex0220 計算式プラグイン レコードへのリンク](https://qiita.com/rex0220/items/38b97ef16f06ea52870a)
- [rex0220 計算式プラグイン 項目が変更されたか表示](https://qiita.com/rex0220/items/e0a2951c08ab46717a9b)
- [rex0220 計算式プラグイン リッチエディターから文字列複数行へ](https://qiita.com/rex0220/items/0ee6b249e5d3cb474a12)
- [rex0220 計算式プラグイン リッチエディターへ文字列設定](https://qiita.com/rex0220/items/02e3b5ca99b6ee6ae4da)
- [rex0220 計算式プラグイン リッチエディターに指定できるタグ調査](https://qiita.com/rex0220/items/5c4e44f2d7e7c4242c83)

# 計算式プラグインと他プラグイン連携例

- [rex0220 プラグイン 休暇届で休日を除いた日数計算](https://qiita.com/rex0220/items/27c5b6989f9d54d59063)
- [rex0220 プラグイン 営業日数計算](https://qiita.com/rex0220/items/154b305cd2dae29c2b3d)
- [rex0220 プラグイン 5営業日後の計算](https://qiita.com/rex0220/items/12df4e9261c11ec883a8)
- [rex0220 一括更新プラグイン 計算式プラグイン連携](https://qiita.com/rex0220/items/287996d0b689e67db65f)
- [rex0220 チェックボックスレイアウトプラグイン・計算式プラグイン連携](
https://qiita.com/rex0220/items/9bbc433c2367c860d4bc)
- [rex0220 計算式プラグインとカレンダーPlus 連携](https://qiita.com/rex0220/items/fb732b02c8f81d03b4c9)
※[ラジカルブリッジ様カレンダーPlusバージョン9](https://radical-bridge.com/product/calendarPlus.html)以降と自動連係します。


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

<img width="986" alt="2019-02-24_15h07_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/14ff8cee-3670-58db-44a0-9d7b11b48277.png">


# 編集画面例

![2017-06-07_17h45_34.png](https://qiita-image-store.s3.amazonaws.com/0/100572/4b7383b0-68a5-5356-70d4-0e05ae3084df.png)


# スマホ画面例

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


![2017-06-08_21h33_55.png](https://qiita-image-store.s3.amazonaws.com/0/100572/98874024-d73d-28c2-4c8c-e077ed06ed05.png)



# 機能紹介

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

- 計算
    - サブテーブルの数値を条件付きで合計
    - サブテーブルに未入力行があっても合計
    - チェックボックス、ユーザー選択等に計算値を設定

- サブテーブル設定
    - サブテーブルの行数を指定
    - レコード追加時のテーブルの初期設定
    - サブテーブルのCSV文字列化
    - CSV文字列からサブテーブル設定

- ボタン表示
    - ヘッダー部、スペースエリアにボタンを表示
    - ボタンクリックで、ダイアログ表示
    - ボタンクリックで、項目に計算値を設定

# 定数

- 文字： "" で、囲みます。<br>"株式会社", "個"

- 数字： 数字をそのまま記述<br> 0, 1234, 123.456

# 演算子

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

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

　関数名(パラメータ)

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


関数一覧

- 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_EQUALS： ２つの配列のすべての要素が等しいか判定
    - ARRAY_EQUALS(配列,配列)
    - 例 ARRAY_EQUALS(ARRAY(1,2,3),ARRAY(1,2,3)) -> true
    - 例 ARRAY_EQUALS(ARRAY(1,2,3),ARRAY(1,2,3,4)) -> false

- ARRAY_EVERY: 配列のすべての要素が特定の条件を満たしているか判定
    - ARRAY_EVERY(項目,変数名[,インデックス],要素式)
    - 例 ARRAY_EVERY(ARRAY(1,2,3),XX,XX>1) -> false
    - 例 ARRAY_EVERY(ARRAY(1,2,3),XX,XX>0) -> true

- ARRAY_FIL：　配列の要素を式でフィルタリング
    - ARRAY_FIL(項目,変数名[,インデックス],要素式)
    - 例 ARRAY_FIL(ARRAY(1,2,3),XX,XX>1) -> [2,3]
    - 例 ARRAY_FIL(ARRAY(1,2,3),XX,XX!=2) -> [1,3]
    - 例 ARRAY_FIL(ARRAY("A","B","C"),XX,XX!="A") -> ["B","C"]
    - 例 ARRAY_FIL(ARRAY(1,2,3),XX,idx,idx>1) -> [3]
    - 使用例：[rex0220 計算式プラグイン ARRAY_MAP 関数](https://qiita.com/rex0220/items/2d101f3fbce95c64750a)

- ARRAY_FOR：　指定した要素数の配列に変換※最大数 1000
    - ARRAY_FOR(項目[,インデックス],要素式)
    - 例 ARRAY_FOR(3,idx,idx) -> [0,1,2]
    - 例 ARRAY_FOR(3,idx,idx*3) -> [0,3,6]
    - 例 ARRAY_FOR(3,"A") -> ["A","A","A"]
    - 例 ARRAY_FOR(3,idx,"A"&idx) -> ["A1","A2","A3"]

- ARRAY_GET：　配列の指定位置(0-,"first","last")の１要素を取得
    - ARRAY_GET(fieldcode,指定位置)
    - 例 ARRAY_GET(チェックボックス1,0)
    - 例 ARRAY_GET(チェックボックス1,"first")
    - 例 ARRAY_GET(チェックボックス1,"last")

- ARRAY_MAP：　配列の要素を式で変換
    - ARRAY_MAP(項目,変数名[,インデックス],要素式)
    - 例 ARRAY_MAP(ARRAY(1,2,3),XX,XX*3) -> [3,6,9]
    - 例 ARRAY_MAP(ARRAY(1,2,3),XX,"A"&XX) -> ["A1","A2","A3"]
    - 例 ARRAY_MAP(ARRAY("A","B","C"),XX,"A"&XX) -> ["AA","AB","AC"]
    - 例 ARRAY_MAP(ARRAY(1,2,3),XX,idx,XX+idx) -> [1,3,5]
    - 使用例：[rex0220 計算式プラグイン ARRAY_MAP 関数](https://qiita.com/rex0220/items/2d101f3fbce95c64750a)


- ARRAY_SOME: 配列内の少なくとも1つの要素が指定された条件を満たしているか判定
    - ARRAY_SOME(項目,変数名[,インデックス],要素式)
    - 例 ARRAY_SOME(ARRAY(1,2,3),XX,XX>1) -> true
    - 例 ARRAY_SOME(ARRAY(1,2,3),XX,XX>0) -> true
    - 例 ARRAY_SOME(ARRAY("A","B","C"),XX,XX="X") -> false

- ARRAY_SORT：　配列のソート
    - ARRAY_SORT(fieldcode [,ソート順])
        - ソート順： 1:昇順、0:降順
    - 例 ARRAY_SORT(チェックボックス1)
    - 例 ARRAY_SORT(チェックボックス1,0)

- AVE： 平均値
    - AVE(fieldcode[,fieldcode...])
    - 例 AVE(数値)
    - 例 AVE(数値, 数値_0, 数値_1)<br><br>

- AVEIF： 条件付き平均値
    - AVEIF(condition,fieldcode[,fieldcode...])
    - 例 AVEIF(文字列=="A", 数値)<br><br>

- CEIL: 切り上げ(ROUNDUP関数と機能は同じ)
    - CEIL(fieldcode) 小数点以下を切り上げ
    - CEIL(fieldcode, 小数点位置)
    - 例 CEIL(数値, 1)<br><br>

- 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"

- CONCAT： 文字連結
    - CONCAT(fieldcode[,fieldcode...])
    - 例 CONCAT(文字列)
    - 例 CONCAT(文字列, 文字列_0, 文字列_1)<br><br>
    - 例 CONCAT(テーブル文字列, ",")<br><br>

- CONCATIF： 条件付き文字連結
    - CONCATIF(condition,fieldcode[,fieldcode...])
    - 例 CONCATIF(文字列=="A", 文字列_0)<br><br>
    - 例 CONCATIF(テーブル文字列=="A", テーブル文字列_0 ",")<br><br>

- COUNT: 数値カウント
    - COUNT(fieldcode[,fieldcode...])
    - 例 COUNT(数値)<br><br>
    
- COUNTA: 空白以外カウント
    - COUNTA(fieldcode[,fieldcode...])
    - 例 COUNTA(文字列)<br><br>

- COUNTIF: 条件付き数値カウント
    - COUNTIF(condition,fieldcode[,fieldcode...])
    - 例 COUNTIF(文字列=="A", 数値)<br><br>

- CONTAINS: テーブル内項目の値を確認する
    - CONTAINS(fieldcode,,fieldcode[,fieldcode...])
    - 例 CONTAINS(文字列T, "ABC")
    - 例 CONTAINS(チェックボックスT,"ABC","XYZ")
    - 例 CONTAINS("A","","A") -> true

- COUNTROW: サブテーブルの行数
    - COUNTROW(fieldcode)
    - 例 COUNTROW(Table)<br><br>

- DISTINCT：　配列の重複値を排除
    - DISTINCT(fieldcode[,fieldcode[,...]])
    - 例 DISTINCT(文字列1,文字列2)
    - 例 DISTINCT(チェックボックス1,チェックボックス2)

- FIRST： 先頭の有効な値
    - FIRST(fieldcode[,fieldcode...])
    - 例 FIRST(文字列)
    - 例 FIRST(数値)<br><br>

- FIRSTIF： 条件付き先頭の有効な値
    - FIRSTIF(condition,fieldcode[,fieldcode...])
    - 例 FIRSTIF(文字列=="A", 文字列)
    - 例 FIRSTIF(文字列=="A", 数値)<br><br>

- 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"

- YEN: FIXED 関数に "￥"マーク付きの文字列を返す

- FLOOR: 切り下げ(ROUNDDOWN関数と機能は同じ)
    - FLOOR(fieldcode) 小数点以下を切り下げ
    - FLOOR(fieldcode, 小数点位置)
    - 例 FLOOR(数値, 1)<br><br>

- FSIZE: バイト数を適切な単位（B, KB, MB など）に変換し、カンマ区切り付きでフォーマット
    - FSIZE(数値)
    - 例 FSIZE(5000000) -> "4.8 MB"

- IF： 条件
    - IF(condition,fieldcode[,fieldcode])
    - 例 IF(文字列=="A", 数値, 数値1)<br><br>

- IFS： 複数条件
    - IFS(condition,fieldcode[,condition,fieldcode[,fieldcode]][,fieldcode])
    - 例 IFS(文字列=="A", 数値, 文字列1=="B", 数値1)<br><br>

- IN： 値の存在チェック
    - IN(fieldcode,string[,string...])
    - 例 IN(文字列, "ABC","DEF","GHI")
    - 例 NOT(IN(文字列, "AB","CD"))
    - 例 IN(SEL_CODE(ユーザー選択,"array"),"user1")
    - 例 IN("A","","A") -> true
    - 例 IN("A","","B") -> false
    - 例 IN("","","B") -> true

- INDEXOF：　配列要素の位置を返す。存在しない場合は -1
    - INDEXOF(配列,値)
    - 例 INDEXOF(ARRAY("A","B","C"),"A") -> 0
    - 例 INDEXOF(ARRAY("A","B","C"),"D") -> -1

- INT： 整数
    - INT(fieldcode)
    - 例 INT(数値/2)<br><br>

- INTERSECT：　配列の積集合（両方の配列に存在する値を配列で返す）
    - INTERSECT(fieldcode,fieldcode)
    - 例 INTERSECT(チェックボックス1,チェックボックス2)

- ISBLANK: 指定されたパラメータがブランクか判定
    - ISBLANK(fieldcode[,fieldcode...])
    - 例 ISBLANK(文字列)
    - 例 ISBLANK(数値)
    - 例 ISBLANK(数値1,数値2)
    - 例 ISBLANK("","","") -> true

- ISNUMBER：　指定した値が数値か判定
    - ISNUMBER(fieldcode[,fieldcode...])
    - 例 ISNUMBER(数値)
        - ISNUMBER(100) -> true
        - ISNUMBER("100A") -> false
        - ISNUMBER("") -> false

- LAST： 最後の有効な値
    - LAST(fieldcode[,fieldcode...])
    - 例 LAST(文字列)
    - 例 LAST(数値)<br><br>

- LASTIF： 条件付き最後の有効な値
    - LASTIF(condition,fieldcode[,fieldcode...])
    - 例 LASTIF(文字列=="A", 文字列)
    - 例 LASTIF(文字列=="A", 数値)<br><br>

- MAX： 最大値
    - MAX(fieldcode[,fieldcode...])
    - 例 MAX(数値)
    - 例 MAX(数値, 数値_0, 数値_1)<br><br>

- MAXIF： 条件付き最大値
    - MAXIF(condition,fieldcode[,fieldcode...])
    - 例 MAXIF(文字列=="A", 数値)<br><br>

- MIN： 最小値
    - MIN(fieldcode[,fieldcode...])
    - 例 MIN(数値)
    - 例 MIN(数値, 数値_0, 数値_1)<br><br>

- MINIF： 条件付き最小値
    - MINIF(condition,fieldcode[,fieldcode...])
    - 例 MINIF(文字列=="A", 数値)<br><br>

- MOD: 剰余
    - MOD(fieldcode,fieldcode)
    - 例 MOD(数値1, 3)
    - 例 MOD(10, 3) -> 1

- MROUND: 倍数に丸める
    - MROUND(fieldcode, multiple)
    - 例 MROUND(10, 3) -> 9
    - 例 MROUND(-10, -3) -> -9

- NVL： 指定されたパラメータで最初の空文字以外の値
    - NVL(fieldcode[,fieldcode...])
    - 例 NVL(数値, 0)
    - 例 NVL(数値, 数値_0, 0)
    - 例 NVL(文字列, "初期値")<br><br>

- PRODUCT： かけ算
    - PRODUCT(fieldcode[,fieldcode...])
    - 例 PRODUCT(数値)
    - 例 PRODUCT(数値, 数値_0, 数値_1)<br><br>
    - 例 PRODUCT(テーブル数値, テーブル数値_0)<br><br>

- PRODUCTIF： 条件付きかけ算
    - PRODUCTIF(condition,fieldcode[,fieldcode...])
    - 例 PRODUCTIF(文字列=="A", 数値)<br><br>
    - 例 PRODUCTIF(テーブル文字列=="A", テーブル数値)<br><br>

- RAND：　0以上、1未満の範囲で少数の乱数を返す
    - RAND()
    - 例 RAND()

- RANDBETWEEN：　指定した範囲で整数の乱数を返す
    - RANDBETWEEN(最小値,最大値[,配列数])
    - 例 RANDBETWEEN(1, 10)
    - 例 RANDBETWEEN(1,10,10) -> [6,9,6,3,5,3,3,10,9,5]

- REVERSE：　配列の反転、文字列の反転
    - REVERSE(fieldcode)
    - 例 REVERSE(チェックボックス)
    - 例 REVERSE(ARRAY("AB","CD","EF")) // -> ARRAY("EF","CD","AB")
    - 例 REVERSE(文字列)
    - 例 REVERSE("ABCDEF") // -> "FEDCBA"

- ROUND: 四捨五入
    - ROUND(fieldcode) 小数点以下を四捨五入
    - ROUND(fieldcode, 小数点位置)
    - 例 ROUND(数値, 1)<br><br>

- ROUNDDOWN: 切り下げ(FLOOR関数と機能は同じ)
    - ROUNDDOWN(fieldcode) 小数点以下を切り上げ
    - ROUNDDOWN(fieldcode, 小数点位置)
    - 例 ROUNDDOWN(数値, 1)<br><br>

- ROWNO: 処理中のサブテーブル行位置
    - ROWNO(fieldcode)
    - 例 ROWNO(Table)<br><br>

- ROWID: テーブル行id を取得
    - ROWID([テーブル][,指定行])
    - 例 ROWID() -> カレントテーブル・カレント行の id
    - 例 ROWID(テーブル, 0) -> テーブル指定行の id

- ROUNDUP: 切り上げ(CEIL関数と機能は同じ)
    - ROUNDUP(fieldcode) 小数点以下を切り上げ
    - ROUNDUP(fieldcode, 小数点位置)
    - 例 ROUNDUP(数値, 1)<br><br>

- SHUFFLE：　配列をランダムに並び変え
    - SHUFFLE(配列)
    - 例 SHUFFLE(ARRAY("A","B","C","D","E"))

- SUBTABLE：　サブテーブル指定行(0-)の値
    - SUBTABLE(fieldcode [, 指定行])
    - 例 SUBTABLE(文字列, 0)
    - 例 SUBTABLE(文字列)<br><br>

- SQRT： 平方根
    - SQRT(fieldcode)
    - 例 SQRT(数値)

- SUM： 合計
    - SUM(fieldcode[,fieldcode...])
    - 例 SUM(数値)
    - 例 SUM(数値, 数値_0, 数値_1)
    - 例 SUM(テーブル数値, テーブル数値_0, テーブル数値_1)
    - 例 SUM(ARRAY(1,2,3),4,5)


- SUMIF： 条件付き合計
    - SUMIF(condition,fieldcode[,fieldcode...])
    - 例 SUMIF(文字列=="A", 数値)
    - 例 SUMIF(テーブル文字列=="A", テーブル数値)

- SWITCH： 複数条件で指定値を返す
    - SWITCH(fieldcode, matched value, value, [matched value, value [,...]], default value)
    - 例 SWITCH(文字列,"A", 数値1, "B", 数値2, 数値3)<br><br>

- 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[,flag])
        - flag: 空文字を除外 0:除外しない 1:除外する
    - 例 TDUPCK(文字列)
        - TDUPCK(文字列)  -> true 重複値がある場合, false 重複値が無い場合
    - 例 TDUPCK(文字列,1)  ※空文字を除外
        - TDUPCK(文字列,1) -> false ※(文字列が"A","","")

- TR_AVE：　同一行のテーブル内項目で平均値
    - TR_AVE(fieldcode[,fieldcode...])
    - 例 TR_AVE(数値T1,数値T2,数値T3)
    - 例 TR_AVE(1,2,3) -> 2

- TR_COUNT：　同一行のテーブル内項目で数値をカウント
    - TR_COUNT(fieldcode[,fieldcode...])
    - 例 TR_COUNT(数値T1,数値T2,数値T3)
    - 例 TR_COUNT(1,2,"A",,3) -> 3

- TR_COUNTA：　同一行のテーブル内項目で空白以外をカウント
    - TR_COUNTA(fieldcode[,fieldcode...])
    - 例 TR_COUNTA(数値T1,数値T2,文字列T1)
    - 例 TR_COUNTA(1,2,"A",,3) -> 4

- TR_MAX：　同一行のテーブル内項目で最大値
    - 例 TR_MAX(数値T1,数値T2,数値T3)
    - 例 TR_MAX(1,2,3) -> 3

- TR_MIN：　同一行のテーブル内項目で最小値
    - 例 TR_MIN(数値T1,数値T2,数値T3)
    - 例 TR_MIN(1,2,3) -> 1

- TR_SUM：　同一行のテーブル内項目で合計
    - 例 TR_SUM(数値T1,数値T2,数値T3)
    - 例 TR_SUM(1,2,3) -> 6


## 日付関数

- DATE_DIFF: 日付差分関数
    - DATE_DIFF(fieldcode|"TODAY" ,fieldcode|"TODAY" ,type)
        - type : "years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"
    - 例 DATE_DIFF(日付, "TODAY", "years")<br><br>

- 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 の書式](https://momentjs.com/docs/#/displaying/format/)


- DATE_ADD: 日付加算
    - DATE_ADD(formula|"TODAY", num, type[, format])
        - formula ： fieldcode, string, number, "TODAY"
            - fieldcode： 日付
            - string： (ex:"2023-07-12")
            - number： (ex:1689151920) ※ "2023-07-12" の UNIX時間
            - "TODAY"： 本日の日時 "YYYY-MM-DD HH:MM"
        - num： 数値、formula
        - type : "year", "month", "week", "day", "hour", "minute", "second"
        - format ： default("YYYY-MM-DD")
            - ※DATE_ADDは、moment.js というライブラリを使っており、その書式が使えます。
            - [moment.js の書式](https://momentjs.com/docs/#/displaying/format/)
    - 例 DATE_ADD(日付, 1, "month", "YYYY-MM-DD")<br><br>

- DATE_STARTOF: 日付関数
    - DATE_STARTOF(fieldcode|"TODAY" , type[, format])
    - 例 DATE_STARTOF(日付, "month", "YYYY-MM-DD")<br><br>

- DATE_ENDOF: 日付関数
    - DATE_ENDOF(fieldcode|"TODAY" , type[, format])
    - 例 DATE_ENDOF(日付, "month", "YYYY-MM-DD")<br><br>

- TODAY: 本日日付
    - TODAY()
    - 例 TODAY()<br>
    DATE_FORMAT("TODAY","YYYY-MM-DD") と同等

- NOW: 現在時刻 ISO形式、日時項目設定用
    - NOW()
    - 例 NOW()<br>
    ⇒ "2019-01-28T17:02:25.527Z" 

- FISCAL_YEAR: 指定日と年度開始日から年度を返す
    - FISCAL_YEAR(項目|"TODAY", "04-01")
    - 例 FISCAL_YEAR(日付,"04-01")
    - 例 FISCAL_YEAR("TODAY","04-01")
    - 例 FISCAL_YEAR("2024-03-01","04-01") -> 2023
    - 例 FISCAL_YEAR("2024-04-01","04-01") -> 2024

- DURATION: 期間関数 (milliseconds に変換します)
    - DURATION(fieldcode [, type])
        - type : "years", "months", "days", "hours", "minutes", "seconds"
    - 例 DURATION(時刻)
    - 例 DURATION(数字, "hours")<br><br>

- DURATION_AS: 期間関数 (指定単位に変換します)
    - DURATION_AS(fieldcode, type)
        - type : "years", "months", "days", "hours", "minutes", "seconds"
    - 例 DURATION_AS(時刻, "hours")<br><br>

- DURATION_GET: 期間関数 (指定単位の数値を取得します)
    - DURATION_GET(fieldcode, type)
        - type : "years", "months", "days", "hours", "minutes", "seconds"
    - 例 DURATION_GET(時刻, "hours")<br><br>

- 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": 指定単位を取得（２桁表示） 
    - 例 DURATION_FORMAT(時刻, "HH:mm")
    - 例 DURATION_FORMAT(時刻, "%H時間 @m分")<br><br>


## 文字列関数

- 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")<br><br>

- MATCH： 文字列の検索(正規表現)で、文字列（g オプション指定時は配列）を返す
    - MATCH(fieldcode, pattern[, flags])
        - flag: "g", "i", "m", "u", "y"
    - 例 MATCH(文字列, "A.b",  "i")<br><br>

- SEARCH： 文字列の検索(正規表現)で、文字位置を返す
    - SEARCH(fieldcode, pattern[, flags])
        - flag: "g", "i", "m", "u", "y"
    - 例 SEARCH(文字列, "A.b",  "i")<br><br>

- TEST： 文字列の検索で、文字の有無（true, false）を返す
    - TEST(fieldcode, string [, string...])
    - 例 TEST(文字列, "A", "B")<br><br>

- TESTRE： 文字列の検索(正規表現)で、文字の有無（true, false）を返す
    - TESTRE(fieldcode, pattern[, pattern])
    - 例 TESTRE(文字列, "A.b", "AAX", "Hello")<br><br>

- TEXTJOIN： 文字列の結合
    - TEXTJOIN(delimiter, ignore_empty, fieldcode [, fieldcode...])
        - ignore_empty: 1, 0
    - 例 TEXTJOIN("," , 1, 文字列1, "A.b", 文字列2)<br><br>

- REPEAT：　文字列の繰り返し
    - REPEAT(fieldcode, count)
    - 例 REPEAT(文字列, 4)
    - 例 REPEAT(文字列, 数値)
    - 例 REPEAT("ABC", 数値)

- REPLACE： 文字列の置換（マッチした先頭のみ置換）
    - REPLACE(fieldcode, pattern, string)
    - 例 REPLACE(文字列, "AB", "XYZ")<br><br>

- REPLACEALL： 文字列の置換
    - REPLACEALL(fieldcode, pattern, string)
    - 例 REPLACEALL(文字列, "AB", "XYZ")<br><br>

- REPLACERE： 文字列の置換(正規表現)
    - REPLACERE(fieldcode, pattern[, flags], string)
        - flag: "g", "i", "m", "u", "y"
            - "g": マッチした文字列をすべて置き換える
            - "i": 大文字・小文字を区別しない
            - "m": 複数行に対応
            - "u": Unicode 対応
            - "y": 先頭にマッチするパターン
    - 例 REPLACERE(文字列, "A.b", "i", "XYZ")<br><br>

- SPLIT： 区切り文字で配列に変換
    - SPLIT(fieldcode, delimiter [, flags])
        - flag: 0: 空文字要素を削除しない　1: 空文字要素を削除
    - 例 SPLIT(文字列, ",")<br><br>
    - 例 SPLIT(文字列, ",", 1)<br><br>

- JOIN： 配列を区切り文字で文字列に変換
    - JOIN(fieldcode, delimiter [, flags])
        - flag: 0: 空文字要素を削除しない　1: 空文字要素を削除
    - 例 JOIN(文字列, ",")<br><br>
    - 例 JOIN(文字列, ",", 1)<br><br>

- UPPER： 大文字に変換
    - UPPER(fieldcode)
    - 例 UPPER(文字列)<br><br>

- LOWER： 小文字に変換
    - LOWER(fieldcode)
    - 例 LOWER(文字列)<br><br>

- LEFT： 文字列の左
    - LEFT(fieldcode, length)
    - 例 LEFT(文字列, 3)<br><br>

- MID： 文字列の指定位置から
    - MID(fieldcode, start, length)
    - 例 MID(文字列, 2, 3)<br><br>

- RIGHT： 文字列の右
    - RIGHT(fieldcode, length)
    - 例 RIGHT(文字列, 3)<br><br>

- SLICE： 文字列・配列の切り出し（0 から開始）
    - SLICE(fieldcode, start, end)
    - 例 SLICE(文字列, 2, 3)
    - 例 SLICE(チェックボックス, 2, 3)<br><br>

- STR_COMP：　文字列の比較
    - STR_COMP(fieldcode, fieldcode)
    - 例 STR_COMP(文字列1, 文字列2)
    - 例 STR_COMP("b", "a") -> -1
    - 例 STR_COMP("a", "a") -> 0
    - 例 STR_COMP("a", "b") -> 1

- SUBSTR： 文字列の切り出し（0 から開始）
    - SUBSTR(fieldcode, start, length)
    - 例 SUBSTR(文字列, 2, 3)<br><br>

- SUBSTRING： 文字列の切り出し（0 から開始）
    - SUBSTRING(fieldcode, start, end)
    - 例 SUBSTRING(文字列, 2, 3)<br><br>

- TRIM： 文字列から先頭および末尾の空白を削除
    - TRIM(fieldcode)
    - 例 TRIM(文字列)<br><br>

- LTRIM： 文字列から先頭の空白を削除
    - LTRIM(fieldcode)
    - 例 LTRIM(文字列)<br><br>

- RTRIM： 文字列から先頭および末尾の空白を削除
    - RTRIM(fieldcode)
    - 例 RTRIM(文字列)<br><br>

- LENGTH： 文字列の長さ
    - LENGTH(fieldcode)
    - 例 LENGTH(文字列)<br><br>

- NEWLINE：　改行文字を返す
    - NEWLINE()
    - 例 "AA"&NEWLINE()&"BB"

- DQUOTE：　「"」ダブルクォーテーションを返す
    - DQUOTE()
    - 例 DQUOTE()&"ABC"&DQUOTE() -> '"ABC"'
    - 例 DQUOTE(TODAY()) -> '"2022-03-21"'

- MAX_STR：テーブル内項目で最大の文字列|指定された項目で最大の文字列
    - MAX_STR(テーブル内項目[,...])
    - 例 MAX(文字列)
    - 例 MAX(文字列1,文字列2,文字列3)
    - 例 MAX_STR("A","B","C") -> "C"
    - 例 MAX_STR("10","20","3","10") -> "3"

- MIN_STR：テーブル内項目で最小の文字列|指定された項目で最小の文字列
    - MIN_STR(テーブル内項目[,...])
    - 例 MAX(文字列)
    - 例 MAX(文字列1,文字列2,文字列3)
    - 例 MIN_STR("A","B","C") -> "A"
    - 例 MIN_STR("10","20","3","10") -> "10"

- ENCODE_URI：URIをエンコード
    - ENCODE_URI(文字列)
    - 例 ENCODE_URI("https:/"&"/www.xxxx.xxxx/show#test=０１") 
        -> "https://www.xxxx.xxxx/show#test=%EF%BC%90%EF%BC%91"

- ENCODE_URICP：URI構成要素をエンコード
    - ENCODE_URICP(文字列)
    - 例 ENCODE_URICP("０１") -> "%EF%BC%90%EF%BC%91"

- DECODE_URI：URIをデコード
    - DECODE_URI(文字列)
    - 例 DECODE_URI("https:/"&"/www.xxxx.xxxx/show#test=%EF%BC%90%EF%BC%91") 
    -> "https://www.xxxx.xxxx/show#test=０１"

- DECODE_URICP：URI構成要素をデコード
    - DECODE_URICP(文字列)
    - 例 ENCODE_URICP("０１") -> "%EF%BC%90%EF%BC%91"

- APP_URL：ベースURLを含むURLを生成
    - APP_URL([path][,isGuestSpace])
        - path: ベースURLを省略して指定
        - isGuestSpace: 0(既定値), 1(ゲストスペース用)
    - 例 APP_URL() -> "https://xxxxxx.cybozu.com/"
    - 例 APP_URL("/k/100/?view=1111") -> "https://xxxxxx.cybozu.com/k/100/?view=1111"
    - 例 APP_URL("/k/200/?view=1111", 1) -> "https://xxxxxx.cybozu.com/k/guest/10/200/?view=1111"

## アプリ関連

- LOOKUP_GETID：参照先のアプリIDを取得
    - LOOKUP_GETID(fieldcode)
        - fieldcode: ルックアップ項目
    - 例 LOOKUP_GETID(ルックアップ) -> 100
- RELATED_GETID：参照先のアプリIDを取得
    - RELATED_GETID(fieldcode)
        - fieldcode: 関連レコード一覧
    - 例 RELATED_GETID(関連レコード一覧) -> 100

## JSON 関数

- JSON_S：　配列・オブジェクトを文字列に変換
    - JSON_S(項目[, flag ])
        - flag: クォーテーション変換 "->'
            - 1: する、0: しない
    - 例 jSON_S(ARRAY(1,2,3)) -> [1,2,3]
    - 例 JSON_S(ARRAY("A","B")) -> ['A','B']
    - 例 JSON_S(ARRAY("A","B"),0) -> ["A","B"]
    - 例 JSON_S(JSON_P("{'code':'user1'}"),0) -> {"code":"user1"}

- JSON_P：　文字列を配列・オブジェクトに変換
    - JSON_P(項目[, flag ])
        - flag: クォーテーション変換 '->"
            - 1: する、0: しない
    - 例 JSON_P("[1,2,3]") -> [1,2,3]
    - 例 JSON_P("['A','B']") -> ["A","B"]
    - 例 JSON_P("{'code':'user1'}") -> {"code":"user1"}

## テーブル関数

- OTCSV：　テーブル内項目をcsv文字列にする
    - OTCSV(テーブル[,TPOUT(区分,数量...)...])
    - [TPOPT] 関数で、オプションを指定　TPOPT("HEADER","N")
        - HEADER: "Y": あり、"N": なし　：ヘッダー行の有無
        - TITLE: "code": フィールドコード、"label": ラベル　：ヘッダー行のタイトル
        - SEP: 規定値 ","　：区切り文字を指定
        - QMARKS: 規定値 '"'　：引用符を指定
        - OTYPE: 規定値 "object"　：値の形式。"string": 配列は。「,」区切り
    - [TPFILTER(条件)]：　出力するテーブル行の条件を指定
        - TPFILTER(数量>0)
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)
    - [TPLABEL("ラベル"[,"ラベル"...])：　出力する項目名を変更
        - TPLABEL("区分","金額")
    - 例 OTCSV(テーブル)
        - テーブルの全項目を CSVに変換。
        - "日付","ドロップダウン","数値"<br>
"2022-01-19","sample2","333"<br>
"2022-01-03","sample1","77799"
    - 例 OTCSV(テーブル, TPOPT("QMARKS","'"), TPOUT(ドロップダウンT, 数値T))
        - テーブルのドロップダウンT, 数値T項目を引用符「'」で変換
    - 例 OTCSV(テーブル, TPOPT("TITLE","label"), TPOUT(ドロップダウンT, 数値T))
        - テーブルのドロップダウンT, 数値T項目を項目ラベルで変換
    - 例 OTCSV(テーブル, TPOUT(日付,チェックボックス))
        - "日付","チェックボックス"<br>
"2022-01-04","[""sample2""]"<br>
"2022-01-01","[""sample1"",""sample2""]"
    - 例 OTCSV(テーブル, TPOUT(日付,チェックボックス),TPOPT("OTYPE","string"))
        - "日付","チェックボックス"<br>
"2022-01-04","sample2"<br>
"2022-01-01","sample1,sample2"


- OTVAL：　テーブル内項目をJSON文字列にする
    - OTVAL(テーブル[,TPOUT(区分,数量...)]...)
    - [TPOUT(項目[,...])]：　出力項目を指定。指定が無い場合は、テーブルの全項目
    - [TPOPT] 関数で、オプションを指定　TPOPT("QMARKS","'")
        - QMARKS: 規定値 '"'
    - [TPFILTER(条件)]：　出力するテーブル行の条件を指定　
        - TPFILTER(数量>0)
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)
    - [TPLABEL("ラベル"[,"ラベル"...])：　出力する項目名を変更
        - TPLABEL("区分","金額")
    - 例 OTVAL(テーブル)
        - [{"日付":"2022-01-19","ドロップダウン":"sample2","数値":"333"},<br>
{"日付":"2022-01-03","ドロップダウン":"sample1","数値":"77799"}]
    - 例 OTVAL(テーブル, TPOPT("QMARKS","'"), TPOUT(ドロップダウン, 数値))
        - [{'ドロップダウン':'sample2','数値':'333'},<br>
{'ドロップダウン':'sample1','数値':'77799'}]

- CSV_TVAL：　CSVをテーブル入力データに変換
    - CSV_TVAL(CSV項目[,TPOUT(出力先テーブル内項目),...]
    - [TPOPT] 関数で、オプションを指定　TPOPT("HEADER","N")
        - HEADER: "Y": あり、"S",: スキップ、"N": なし　：ヘッダー行の処理
        - TITLE: "code": フィールドコード、"label": ラベル　：ヘッダー行のタイトルの種類
        - SEP: 規定値 ","　：区切り文字を指定
        - QMARKS: 規定値 '"'　：引用符を指定
        - MAXROWS: 規定値　""　：最大行数
    - [TPOUT(項目[,...])]：　出力項目を指定。指定が無い場合は、テーブルの全項目
        - CSVデータの並び位置で出力項目に変換<br>
※@ を指定すると除外
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)
    - [TPLABEL("ラベル"[,"ラベル"...])：　出力する項目名を変更
    - 例　CSV_TVAL(CSV文字列)
    - 例　CSV_TVAL(CSV文字列,TPOPT("TITLE","label")))
        - CSVヘッダー行のタイトルを項目ラベルとして処理
    - 例　CSV_TVAL(CSV文字列,TPOPT("HEADER","S"),TPOUT(文字列,数値),TPSORT(数値,0)
        - CSVヘッダー行をスキップして、行の先頭から「文字列」,「数値」のフィールドコードとして取得して、数値の降順でソート
<br>

- TABLE_DATA：テーブル用データを生成
    - TABLE_DATA(TABLE_MAP(テーブル,
TPDIC("文字列T2",文字列T1,"項目T2",項目T1))
//[,TABLE_MAP()...]
)
        - TABLE_MAP(): 対象テーブルのデータ
    - 例 TABLE_DATA(TABLE_MAP(テーブル1,
TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1)))
    - 例 TABLE_DATA(
TABLE_MAP(テーブル1,
TPDIC("ドロップダウンT3",ドロップダウンT2, "数値T3",数値T1, "金額T3", 単価T1*数量T1),
TABLE_MAP(テーブル2,
TPDIC("ドロップダウンT3",ドロップダウンT2, "数値T3",数値T2, "金額T3", 単価T2*数量T2)))
<br>

- TABLE_MAP：テーブル用データを生成
    - TABLE_MAP(テーブル,
//TPFILTER(条件),
TPDIC(項目1,計算式1,...]
)
    - テーブル: 対象テーブル
    - \[TPFILTER(条件)\]: フィルター条件
    - TPDIC: 出力項目
        - 項目1: 出力先テーブルの項目
        - 計算式1: 出力先テーブルの項目値
    - 例 TABLE_MAP(テーブル1,
TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1))
    - 例 TABLE_MAP(テーブル1,
TPFILTER(ドロップダウンT1),
TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1))
<br>

- TPDIC: テーブル用データを生成
    - TPDIC(項目1,計算式1,...]
)
    - 項目1: 出力先テーブルの項目
    - 計算式1: 出力先テーブルの項目値
    - 例 TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1)
<br>

- TLTABLE：　テーブルの集計関数
    - TLTABLE(テーブル,<br>
TPKEY(日付,ドロップダウン),　：キー項目<br>
TPVAL(数値),　：集計項目[,"sum","max","min","join","uniq"]<br>
TPOUT(日付T2,ドロップダウンT2,数値),　：出力先項目<br>
[TPOPT("MAXROWS",10)...])
    - TPKEY：　集計キーとなる項目：　TPKEY(日付,ドロップダウン,文字列)
    - TPVAL：　集計項目（計算式可）と集計方法（規定値："sum"）
        - 集計方法：　"sum","max","min","join","uniq"
        - TPVAL(数値,数値,"max")
        - TPVAL(チェックボックス,"uniq",SEL_CODE(ユーザー選択,"array"),"uniq")
    - TPOUT：　出力先項目
        - キー項目と集計項目の数の合計と同じ出力先項目数を指定
        - TPKEY(日付),TPVAL(数値),TPOUT(日付1,数値1)
    - [TPOPT] 関数で、オプションを指定
        - MAXROWS: 規定値　""　：最大行数
    - [TPFILTER(条件)]：　出力するテーブル行の条件を指定　
        - TPFILTER(数量>0)
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)
    - [TPLABEL("ラベル"[,"ラベル"...])：　出力する項目名を変更
        - TPLABEL("区分","金額")
    - 例 TLTABLE(テーブル,TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2)
    - 例 TLTABLE(テーブル,TPFILTER(数値>0),TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2)
        - 数値>0 の行のみ集計
    - 例 TLTABLE(テーブル,TPKEY(文字列),TPVAL(数値),TPOUT(文字列2,数値2),
TPSORT(数値2,0)
        - 数値2 の降順で出力
    - 例 TLTABLE(テーブル,TPKEY(文字列),
TPVAL(チェックボックス,"uniq",SEL_CODE(ユーザー選択,"array"),"uniq"),
TPOUT(チェックボックス2,ユーザー選択2))
        - チェックボックス、ユーザー選択の値を重複なしで集約


- TABLE_SORT
    - TABLE_SORT(テーブル,
    - [TPFILTER(条件)]：　出力するテーブル行の条件を指定　
        - TPFILTER(数量>0)
    - [TPSORT(項目[,フラグ]...)]：　出力するテーブル行のソートを指定
        - フラグ：　1:　昇順、0: 降順
            - TPSORT(項目1,0,項目2)

    - 例 テーブル内項目にルックアップ・添付ファイル項目がない場合
    TABLE_SORT(テーブル, TPFILTER(数値>0), TPSORT(数値))

    - 例 テーブル内項目にルックアップ・添付ファイル項目がある場合は、レコード保存後イベントでソートすること
　IF(EV_INFO("mode")="success"&&更新日時,
　 TABLE_SORT(テーブル, TPSORT(数値))
　)

## ボタン関連

- BUTTON：　ヘッダー部、スペースエリアにボタン表示<br>
ボタン名と、クリック時の項目と計算式を指定
ボタン名: 文字列。
    - BUTTON(ボタン名,FSET(項目,value)[,...])
    - 例 BUTTON("文字セット", FSET(文字列,"ABC"))<br>
    - 例 BUTTON("項目セット", FSET(数値,1), FSET(チェックボックス,ARRAY("sample1")))

- BOPT で、CSS を指定
    - BUTTON(BOPT("TITLE","ボタン名"[,"CSS","value"]),FSET(項目,value)[,...])
    - 例 BUTTON(BOPT("TITLE","BUTTON1",
"CSS","{'color':'white',
'background-color':'#3498db'}"),
FSET(文字列,"ABC"))

- DAIALOG； ボタン名と、クリック時の項目と計算式を指定
    - DIALOG(ARRAY(ボタン名,HTML,ICON,FLAG,CSS),[FSET(項目,value),...])
        - ボタン名: 文字列。
        - HTML: ダイアログに表示する文字列
        - ICON: icon 指定 "info","warning","question","success","error",""
        - FLAG: キャンセルボタンの表示 1,0
        - CSS:　ボタンの CSS
    - 例 DIALOG(ARRAY("文字セット","文字列をセットします"), FSET(文字列,"ABC"))
    - 例 DIALOG(ARRAY("項目セット","数値とチェックボックスをセット","warning"),
    FSET(数値,1), FSET(チェックボックス,ARRAY("sample1")))

- BOPT で、オプション指定
    - DIALOG(BOPT("TITLE","ボタン名"
[,"HTML","TEST",]
[,"ICON","value"]
[,"SCAN",1]
[,"CSS","value"])
[,FSET(項目,value),...])
    - 例 DIALOG(BOPT("TITLE","ボタン1",
"HTML","TEST",
"CSS","{'color':'red'}"),
FSET(文字列,"ABC"))


- FSET： BUTTON 関数で、クリック時に項目に計算値を指定
    - FSET(項目, value [,rowno])
        - 項目: 
        - value： 設定値
        - rowno： テーブル行位置
    - 例 FSET(文字列,"ABC")
    - 例 FSET(数値,1)
    - 例 FSET(チェックボックス,ARRAY("sample1"))
    - 例 FSET(文字列T1,"ABC",2)

- FSET_TADD： BUTTON 関数で、クリック時にテーブルに指定した行を追加
    - FSET_TADD(テーブル, value)
        - テーブル
        - value： 配列の行データ。または JSON 文字列を指定
    - 例 FSET(テーブル,"[{'文字列':'abc'}]")
    - 例 FSET(テーブル,"[{'文字列':'abc'},{'文字列':'xyz'}]")
    - 例 FSET(テーブル, ARRAY_FOR(10,idx, DIC(
        "作業ステータス","未着手",
        "チェックボックス",ARRAY("A","B")
      ))

## 論理関数

- BOOL： 論理値変換
    - BOOL(fieldcode)
    - 例 BOOL(文字列)<br><br>

- NOT： 否定
    - NOT(fieldcode)
    - 例 NOT(文字列)<br><br>

- AND： 論理積
    - AND(condition[,condition...])
    - 例 AND(文字列=="A", 文字列1=="B", 文字列2=="C")<br><br>

- OR： 論理和
    - OR(condition[,condition...])
    - 例 OR(文字列=="A", 文字列1=="B", 文字列2=="C")<br><br>

- XOR： 排他的論理和
    - XOR(condition[,condition...])
    - 例 XOR(文字列=="A", 文字列1=="B", 文字列2=="C")<br><br>

## ディクショナリー関数

- DIC: ディクショナリー作成 (指定された key と value で、Dictionaryを作成)
    - DIC([key,value][,...])
    - 例 DIC() -> {}
    - 例 DIC("A",1) -> {"A":1}
    - 例 DIC("A",1,"B",2) -> {"A":1,"B",2}
    - 例 DIC("A",1,"B",ARRAY(1,2)) -> {"A":1,"B",[1,2]}
    - 例 DIC("A",1,"B",DIC("B1",2,"B2",3)) -> {"A":1,"B":{"B1":2,"B2":3}}

- DIC_ASSIGN: 指定された Dictionary で、新たな Dictionaryを作成
    - DIC_ASSIGN(dictionary[,...])
    - 例 DIC_ASSIGN(DIC("A",1)) -> {"A":1}
    - 例 DIC_ASSIGN(DIC("A",1),DIC("B",2)) -> {"A":1,"B",2}
    - 例 DIC_ASSIGN(DIC("A",1),DIC("A",2,"B",ARRAY(1,2))) -> {"A":2,"B",[1,2]}

- DIC_COUNT: 指定された Dictionary の要素数
    - DIC_COUNT(dictionary)
    - 例 DIC_COUNT(DIC("A",1)) -> 1
    - 例 DIC_COUNT(DIC("A",1,"B",2)) -> 2

- DIC_DEL: Dictionary から指定された要素を削除
    - DIC_DEL(dictionary,key[,key...])
    - 例 DIC_DEL(DIC("A",1),"A") -> {}
    - 例 DIC_DEL(DIC("A",1,"B",2,"C",3),"A","B") -> {"C",3}
    - 例 DIC_DEL(DIC("A",1,"B",2,"C",3),ARRAY("A","B")) -> {"C",3}

- DIC_EXISTS: Dictionary に指定されたキーがあるかチェック
    - DIC_EXISTS(dictionary,key)
    - 例 DIC_EXISTS(DIC("A",1),"A") -> true
    - 例 DIC_EXISTS(DIC("A",1,"B",2),"C") -> false

- DIC_ITEM: Dictionary に指定されたキーの値を取得。値指定時は値をセット
    - DIC_ITEM(dictionary,key[,value])
    - 例 DIC_ITEM(DIC("A",1),"A") -> 1
    - 例 DIC_ITEM(DIC("A",1),"B") -> ""
    - 例 DIC_ITEM(DIC("A",1),"A","2") -> {"A",2}
    - 例 DIC_ITEM(DIC("A",1),"B",2) -> {"A",1,"B",2}

- DIC_KEYS: 指定された Dictionary のキーを配列で取得
    - DIC_KEYS(dictionary)
    - 例 DIC_KEYS(DIC("A",1)) -> ["A"]
    - 例 DIC_COUNT(DIC("A",1,"B",2)) -> ["A","B"]

- DIC_MAP: Dictionary の要素を式で配列に変換
    - DIC_MAP(dictionary,key,value[,index],formula)
    - 例 DIC_MAP(DIC("A",1,"B",2),key,val,key&":"&val) -> ["A:1","B:2"]
    - 例 DIC_MAP(DIC("A",1,"B",2),key,val,val) -> [1,2]
    - 例 DIC_MAP(DIC("A",1,"B",2),key,val,idx,key&":"&(val+idx)) -> ["A:1","B:3"]

## HTML 関連

- ADD_TAGS: 文字列複数行項目にタグを追加
    - ADD_TAGS(文字列複数行)
    - 例 ADD_TAGS("ABC\nXYZ") -> "\<div\>ABC\</div\>\<div\>XYZ\</div\>"
    - 例 ADD_TAGS("- ABC\n- XYZ") -> "\<ul\>\<li\>ABC\</li\>\<li\>XYZ\</li\>\</ul\>"
- FILE: 添付ファイル項目の値を取得
    - FILE(fieldcode[,option[,pos]])
        - option
            - name: ファイル名
            - key: fileKey
            - type: contentType
            - size: ファイルサイズ
            - pos: 配列位置
    - 例 FILE(file, "key", 0) -> "nn.."
- FIELDS_HTML: 項目から HTMLの文字列を生成
    - FIELDS_HTML(項目[,...]
    [,OPT("pref","pcraft-card-",
    "itemClass","item",
    "lCalss","label",
    "vClass","value",
    "hideLabels","N")])
    - 例 FIELDS_HTML(文字列,数値) -> "\<div class="ct-pcraft-card-container"\>\<div class="ct-pcraft-info-list"\>\<div class="ct-pcraft-item"\>\<span class="ct-pcraft-label"\>文字列\<\/span\>\<span class="ct-pcraft-value"\>xxxx\<\/span\>\</div\>\<\/div\>\<\/div\>"
- FVAL: 項目の値を表示用にフォーマット(カンマ区切り、時間フォーマットなど)
    - FVAL(項目)
    - 例 FVAL(数値) -> "2,000"
    - 例 FVAL(日時) -> "2025-02-01 09:00"
- IMGSRC: 画像表示用に添付ファイルの fileKey を返す
    - IMGSRC(fieldcode[,pos[,"img"]])
        - fieldcode: 添付ファイル
        - pos: 画像位置(-1は、最終画像)
        - "img": img タグ形式で返す
    - 例 IMGSRC(添付ファイル) -> "#{&f(nn..)}"
    - 例 IMGSRC(添付ファイル, -1) -> "#{&f(nn..)}"
- STRIP_TAGS: リッチエディター項目からタグを取り除く
    - STRIP_TAGS(リッチエディター)
- HTML_TAGS: HTML文字列を TAG, ATTR, STYLE, BATTR, VTAG 関数の形式に変換
    - HTML_TAGS(リッチエディター)
    - 例 HTML_TAGS("\<div\>Hello\</div\>") -> TAG("div","Hello")
- PAGE_HTML: 複数の TAG(...) 要素をまとめてPAGEとして HTML を作成
    - PAGE_HTML(TAG()[,...])
    - 例 PAGE_HTML(TAG("div"),TAG("div"))
- TABLE_HTML: 指定したテーブル項目から html を生成
    - TABLE_HTML(テーブル,項目[,...]
    [,OPT("filter","1",
    "pref","pcraft-table-",
    "thClass","th-label",
    "tdClass","td-value",
    "itemClass","item",
    "lCalss","label",
    "vClass","value",
    "title","TITLE",
    "pagination","N",
    "perPage","20",
    "maxPages","10",
    "type","card",
    "hideLabels","N")])
    - 例 TABLE_HTML(テーブル,文字列,数値,ARRAY("ラベル","値","クラス名"))
- RECS_HTML: 一覧のレコードから HTMLの文字列を生成
    - RECS_HTML(項目[,...]
    [,OPT("filter","1",
    "pref","pcraft-table-",
    "thClass","th-label",
    "tdClass","td-value",
    "itemClass","item",
    "lCalss","label",
    "vClass","value",
    "title","TITLE",
    "pagination","N",
    "perPage","20",
    "maxPages","10",
    "type","card",
    "hideLabels","N")])
    - 例 RECS_HTML(文字列,数値,ARRAY("ラベル","値","クラス名"))
- RECS_MAP: 一覧のレコードから 配列を生成
    - RECS_MAP([idx,]文字列)
    - ECS_MAP(文字列) -> ["A","B"]
- ・RECS_SUM: 一覧のレコードの項目を合計
    - RECS_SUM(項目)
    - 例 RECS_SUM(数値) -> 60
- TAGS_HTML: 複数の TAG(...) 要素をまとめて HTML を作成
    - TAGS_HTML(TAG()[,...])
    - 例 TAGS_HTML(TAG("div"),TAG("div"))
- TAG: HTML の コンテンツ要素 (Content Elements) を作成
    - TAG(タグ名[,属性/スタイル/コンテンツ/...])
        - ATTR, BATTR, STYLE, VTAG
    - 例 TAG("div",ATTR("id", "container"),STYLE("color", "red"), "テキスト")
        -> "\<div id="container" style="color:red;"\>テキスト\</div\>"
- ATTR: HTML 要素の属性（id, class, href, alt など）を指定
    - ATTR(属性名,値[,...])
    - 例 ATTR("id","test-id") -> {"id":"test-id"}
- BATTR: HTML の Boolean属性（checked, disabled, readonly, selected など）を指定
    - BATTR(属性名[,...])
    - 例 BATTR("checked") -> {"checked":true}
- STYLE: HTML 要素に適用する CSS スタイルを指定
    - STYLE(属性名,値[,...]/属性名:値;...)
    - 例 STYLE("color", "red", "background-color", "blue") -> {"color":"red","background-color":"blue"}
    - 例 STYLE("color:red; background-color:blue;") -> {"color":"red","background-color":"blue"}
- VTAG: HTML の Void Elements（内容を持たないタグ） br, hr, img, input 等を作成
    - VTAG(タグ名[,属性/スタイル/コンテンツ/...])
    - 例 VTAG("br") -> "\<br\>"
    - 例 VTAG("hr", STYLE("border", "1px solid black"))
    -> "\<hr style="border:1px solid black;"\>"
- URL: URL の文字列に変換
    - URL(プロトコル,パス)
    - 例 URL("https", "example.com") -> "https:\/\/example.com"
- ESC_HTML: HTML の特殊文字 (<, >, &, " など) をエスケープ
    - ESC_HTML(項目)
    - 例 ESC_HTML("\<div\>Hello\</div\>") -> "\&lt;div\&gt;Hello\&lt;/div\&gt;"
- エスケープされた HTML 文字列を元の HTML に戻す
    - UNESC_HTML(項目)
    - 例 UNESC_HTML("\&lt;div\&gt;Hello\&lt;/div\&gt;") -> "\<div\>Hello\</div\>"


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

- SEL_CODE: コード情報
    - SEL_CODE(fieldcode [, "code"|"array"|"text"|"obj" [, delimiter]])
    - 例 SEL_CODE(ユーザー選択)
    - 例 SEL_CODE(ユーザー選択, "array") ->  -> ["user1code","user2code"]
    - 例 SEL_CODE(ユーザー選択, "text", ", ") -> "user1code, user2code"
    - 例 SEL_CODE(ユーザー選択, "obj") -> [{code:"user1code", name:"user1name"}]
    - 例 SEL_CODE(組織選択)
    - 例 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(更新者)
    - 例 SEL_NAME(作業者)

- SET_CODE: ユーザー選択、組織選択、グループ選択のコード設定
    - SET_CODE(fieldcode [, fieldcode...]])
    - 例 SET_CODE("usercode1","usercode2")
    - 例 SET_CODE(ユーザー選択)
    - 例 SET_CODE(SEL_CODE(ユーザー選択, "array"),"usercode1")
    - 例 SET_CODE("orgcode1","orgcode1")
    - 例 SET_CODE("groupcode1")

## ログイン情報

- LOGIN_NAME： ログイン名
    - LOGIN_NAME()
    - 例 LOGIN_NAME()<br><br>

- LOGIN_CODE： ログインコード
    - LOGIN_CODE()
    - 例 LOGIN_CODE()<br><br>

- LOGIN_EMAIL： ログインメールアドレス
    - LOGIN_EMAIL()
    - 例 LOGIN_EMAIL()<br><br>

- LOGIN_INFO： ログインユーザーのユーザー情報
    - LOGIN_INFO([option])
        - option:
        - id: ユーザーid
        - code: ログイン名
        - name: 表示名
        - email: メールアドレス
        - url: URL
        - employeeNumber: 社員番号
        - phone: 電話番号
        - mobilePhone: 携帯電話
        - extensionNumber: 内線
        - timezone: タイムゾーン
        - isGuest: ゲスト(true, false)
        - language: 言語
    - 例 LOGIN_INFO()
    - 例 LOGIN_INFO("code")
    - 例 LOGIN_INFO("code,name")
    - 例 SET_CODE(LOGIN_INFO())

## ユーザー情報

ユーザー情報を変更した場合、UINFO 関数へ反映するまで最大４時間かかります。
UINFO, OINFO, GINFO 関数利用時に「ユーザー情報」チェックが必要です。
UINFO, OINFO, GINFO 関数を使用時、ユーザー数等が多い場合に画面表示の処理時間が長くなります。
ゲストスペース時の UINFO 関数は、ゲストスペースメンバーのみ対応します。

- UINFO： ユーザー情報
    - UINFO([user][,option][,separator])
        - user: [code...] or [id..] or [code,id...]
        - option:
            - id: ユーザーid
            - code: ログイン名
            - ctime: 作成日
            - mtime: 更新日
            - valid: 有効
            - name: 表示名
            - surName: 姓
            - givenName: 名
            - surNameReading: よみがな（姓）
            - givenNameReading: よみがな（名）
            - localName: 別言語での表示名
            - localNameLocale: 別言語
            - timezone: タイムゾーン
            - locale: 言語
            - description: コメント
            - phone: 電話番号
            - mobilePhone: 携帯電話
            - extensionNumber: 内線
            - email: メールアドレス
            - callto:
            - url: URL
            - employeeNumber: 社員番号
            - birthDate: 誕生日
            - joinDate: 入社日
            - primaryOrganization: 優先する組織のid
            - sortOrder: 表示優先度
            - #xxxx: カスタマイズ項目のコード
            - orgs: 所属組織
            - groups: 所属グループ
            - setData: ユーザー選択項目用データ
        - separator：　区切り文字
- 例
    -  UINFO() -> ["code1",...]
    - UINFO("code1") -> [{"id":"1","code":"code1",...}]
    - UINFO("code1,code2") -> [{"id":"1","code":"code1",...},{"id":"2","code":"code2",...}]
    - UINFO("code1","name") -> ["name1"]
    - UINFO("code1","name,birthDate") -> ["name1,2000-01-01"]
    - UINFO("code1,code2","name,birthDate") -> ["name1,2000-01-01","name2,2000-01-01"]
    - UINFO("code1,code2","name,birthDate","+") -> ["name1+2000-01-01","name2+2000-01-01"]
    - UINFO("code1","orgs") -> ["org1,org2"]
    - UINFO("code1","groups") -> ["group1,group2"]
    - UINFO("code1","setData") -> [{"code":"code1","name":"name1"}]

## 組織情報

組織情報を変更した場合、OINFO 関数へ反映するまで最大１時間かかります。
すぐに反映させたい場合は、ブラウザーの新規タブで kintone 画面を開いてください。

- OINFO：組織情報
    - OINFO([organization][,option][,separator])
        - organization: [code...] or [id..] or [code,id...]
        - option:
            - id: 組織id
            - code: 組織コード
            - name: 表示名
            - localName: 別言語での表示名
            - localNameLocale: 別言語
            - parentCode: 親組織
            - children: 子組織
            - description: 説明
            - users: 組織メンバーのユーザーコード
            - titles: 組織メンバーの役職
            - userNames: 組織メンバーのメンバー名+役職
            - setData: 組織選択項目用データ
- 例
    - OINFO() -> ["code1",...]
    - OINFO("code1") -> [{"id":"1","code":"code1",...}]
    - OINFO("code1,code2") -> [{"id":"1","code":"code1",...},[{"id":"2","code":"code2",...}]
    - OINFO("code1","name") -> ["name1"]
    - OINFO("code1","id,name") -> ["1,name1"]
    - OINFO("code1,code2","id,name") -> ["1,name1","2,name2"]
    - OINFO("code1,code2","id,name","+") -> ["1+name1","2+name2"]
    - OINFO("code1","users") -> ["user1,user2"]
    - OINFO("code1","userNames") -> ["userNames1,userNames2"]
    - OINFO("code1","setData") -> [{"code":"code1","name":"name1"}]

## グループ情報

グループ情報を変更した場合、GINFO 関数へ反映するまで最大１時間かかります。
すぐに反映させたい場合は、ブラウザーの新規タブで kintone 画面を開いてください。

- GINFO：グループ情報
    - GINFO([group][,option][,separator])
        - group: [code...] or [id..] or [code,id...]
        - option:
            - id: グループid
            - code: グループコード
            - name: 表示名
            - description: 説明
            - users: グループメンバーのユーザーコード
            - setData: グループ選択項目用データ
- 例
    - GINFO() -> ["code1",...]
    - GINFO("code1") -> [{"id":"1","code":"code1",...}]
    - GINFO("code1,code2") -> [{"id":"1","code":"code1",...},[{"id":"2","code":"code2",...}]
    - GINFO("code1","name") -> ["name1"]
    - GINFO("code1","id,name") -> ["1,name1"]
    - GINFO("code1,code2","id,name") -> ["1,name1","2,name2"]
    - GINFO("code1,code2","id,name","+") -> ["1+name1","2+name2"]
    - GINFO("code1","users") -> ["user1,user2"]
    - GINFO("code1","setData") -> [{"code":"code1","name":"name1"}]

## イベント情報

- EV_INFO：　イベント情報
    - EV_INFO(option)
        - option: "type","cate","mode","lan","mobile","fcode","guestUser","action","status","nextStatus","appId"
            - "type": "app.record.create.show","app.record.edit.show"...
                - kintone のイベント処理時のタイプ
                [kintone JavaScript API イベント](https://cybozu.dev/ja/kintone/docs/js-api/#event)
            - "cate": "create","edit","detail","change"
            - "mode": "show","submit","success","batch","allUpdate"
                - "batch":  一覧画面の一括計算処理時
                - "allUpdate": プラグイン設定画面の「既存レコードを変更」処理時
            - "lan": "ja","en","zh"
            - "mobile": true, false
            - "fcode": change イベント時の変更されたフィールドコード
            - "guestUser": true, false
            - "action": "処理開始" ※プラセス管理のアクション名
            - "status": "処理中"　※プロセス管理のアクション前ステータス
            - "nextStatus": "完了"　※プロセス管理のアクション後ステータス
            - "appId": 対象アプリのID
    - 例 EV_INFO("type") -> "app.record.edit.show"
    - 例 EV_INFO("cate") -> "edit"
    - 例 EV_INFO("mode") -> "show"
    - 例 EV_INFO("lan") -> "ja"
    - 例 EV_INFO("mobile") -> false
    - 例 EV_INFO("fcode") -> "数値"
    - 例 EV_INFO("guestUser") -> false
    - 例 EV_INFO("action") -> "処理開始"
    - 例 EV_INFO("status") -> "未処理"
    - 例 EV_INFO("nextStatus") -> "処理中"
    - 例 EV_INFO("appId") -> "100"

- EV_SET:　テスト用イベント情報を設定
    - EV_SET(option)
        - option: "type","lan","mobile"
            - "type": "app.record.create.show","app.record.edit.show"...
            - "lan": "ja","en","zh"
            - "mobile": true, false
    - 例 LET(w, EV_SET("type", "app.record.edit.show"), EV_INFO("mode")) -> "show"
    - 例 LET(w, EV_SET("lan", "en"), EV_INFO("lan")) -> "en"
    - 例 LET(w, EV_SET("mobile", 1), EV_INFO("mobile")) -> true


## LET関数（変数を利用した計算式）

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

- LET： LET関数内で変数を定義し、LET関数内で使用可
    - LET(変数名1,式1[,変数名2,式2[,...], 式)
    - 例 LET(pi,3.1415926, 2*pi*数値)
    - 例 LET(pi,3.1415926, r,数値, pi*r**2)
    - 例 LET(x,1,x,x+1,x) -> 2
    - 例 LET(x,1,y,2,x,x+y,x) -> 3
    - 例 LET(縦,数値1, 横,数値2, 縦*横)<br><br>

## LOG 関数（計算式の実行結果をコンソールログに出力）

- LOG： 計算式の実行結果をコンソールログに出力
    - LOG("文字列1", 文字列1) -> ["文字列1","ABC"]

# 計算式の書き方

## フィールドコードの設定

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

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

※[kintone フィールドコード設定プラグイン](http://qiita.com/rex0220/items/e2a475c8097740f94254)を使うとまとめて、フィールドコードをラベルに合わせることができます。　


## 数値計算

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


![2017-06-13_08h55_19.png](https://qiita-image-store.s3.amazonaws.com/0/100572/7be98b2f-5675-f6fc-b80b-88e86b0edf28.png)


## 足し算と SUM の違い

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

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

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

<img width="457" alt="2018-06-23_13h31_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/3087f8a2-0ef1-8158-53d6-67a5f1e65dfe.png">

<img width="878" alt="2018-06-23_13h31_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/48c24782-2454-9585-df79-5e0dc1d7ee26.png">

## ヘッダー部、スペースエリアの設定

追加・編集画面で、ヘッダー部、スペースエリアにボタン表示することが出来ます。

![2022-01-14_09h03_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/93a2c062-61d5-7ecf-bc4f-38c46274afe9.png)


- BUTTON 関数：　ヘッダー部、スペースエリアにボタン表示と、ボタンクリック時の項目設定が出来ます。
- DIALOG 関数：　ヘッダー部、スペースエリアにボタン表示と、ボタンクリック時にダイアログ表示を行い、「OK」、「Cancel」で項目設定の実行を制御できます。



## テーブルの設定

テーブルに計算式結果の内容で、下記の処理を行います。

- 空文字：　処理なし
- 数値：　0 ～ 500 までをテーブル行数として制御
    - 0 の場合、編集・追加画面表示中は、kintone の仕様上テーブル行が１行存在するが、DOM 操作でテーブル行を非表示にする。<br>レコード保存時に、テーブル行は実際に0行になる。
    - 100行以上のテーブル行数は、レコード表示が完了するまでかなり時間がかかります。
- JSON 文字列：　レコード追加時のテーブルの初期値を設定　
    - 引用符は、計算式プラグインの都合上、「"」の代わりに「'」を使用
    - 例："[{'日付':'2022-01-19','ドロップダウン':'sample2','数値':'393'},<br>
    {'日付':'2022-01-03','ドロップダウン':'sample1','数値':'77900'}]"
    - **ここで指定するJSON文字列は、OTVAL 関数で作成可能。**
- 配列：　ARRAY([テーブル行数], テーブル設定文字列, テーブル更新タイミング)
    - 例：　ARRAY("",<br>
"[{'日付':'2022-01-19','ドロップダウン':'sample2','数値':'393'},<br>
{'日付':'2022-01-03','ドロップダウン':'sample1','数値':'77900'}]"<br>
,1)
        - テーブル行数 "" : テーブル行数処理なし
        - テーブル設定文字列：　テーブル２行分の日付、ドロップダウン、数値を設定
        - テーブル更新タイミング： 
            - 規定値 0：　レコード追加時のみ設定
            - 1：　レコード追加・更新時に設定

- 編集：　チェックが無しで、テーブル行の追加・削除ボタンを非表示
- 非表示：　チェックすると、テーブル全体を非表示

![2022-01-04_23h06_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/1f8bf541-95ae-4c2f-3c1b-ab52f66a6107.png)

## グループの設定

グループ項目の開閉を計算式で指定できます。
計算結果が true の場合、グループを展開。false の場合、グループを閉じる

生年月日が入力されたらグループを開く例

![2022-05-04_12h29_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6af2ad7c-9741-c7ac-2a23-2968519f70df.png)
![2022-05-04_12h28_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/616781d9-f8dd-0fe2-b96d-ce7c369a55eb.png)


## レコード番号

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

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

## リビジョン

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

# コメントの書き方

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

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

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

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

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



# プラグインの追加

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


![2017-06-07_18h33_39.png](https://qiita-image-store.s3.amazonaws.com/0/100572/b8d0caec-94e9-8eda-41e6-6d6b8552efb0.png)



# プラグインの設定

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


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

<img width="986" alt="2019-02-24_15h07_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/c21f169d-b538-846a-edfc-825ce93e2558.png">

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


## 循環参照の許可

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

## 非同期計算

「非同期計算」をチェックすると、値変更イベントで非同期に計算処理を行います。
　項目の値変更時、「カーソル移動前に計算処理」から「カーソル移動後に計算処理」に変わります。
　テーブル等で値変更イベントが連続する場合、計算回数を削減し、処理時間を短縮を図ります。
　※ベータ機能　大きな仕様変更・開発中止があり得ます

## ユーザー情報

計算式で、UINFO, OINFO, GINFO 関数利用時に「ユーザー情報」チェックを指定

## 編集

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

## 非表示

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

## ランク

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

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


## 運用環境に反映

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


## フィルタ機能

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

<img width="882" alt="2017-09-18_22h23_50.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/674f5e52-72a9-f000-c415-13763ccadf56.png">


## ソート機能

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

<img width="881" alt="2017-09-18_22h33_50.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/01a6c09b-4331-922d-5572-660045b17999.png">



## 関数入力支援

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

<img width="881" alt="2017-09-18_19h43_34.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/130b56d3-255f-9a20-3c76-0abdd041fcf9.png">


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

<img width="887" alt="2017-09-18_19h41_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/d29fe5e8-f291-f0fe-83f0-cca1148fb727.png">



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

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

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

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

<img width="1042" alt="2017-08-26_14h13_52.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/b13b7ab5-e4f0-2ee8-8aaf-b3608bf95ee7.png">

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

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

# エラーチェック

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

<img width="888" alt="2017-09-18_19h44_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/08d717b6-cd1e-f471-8101-f91f1b7d60cb.png">

# 循環参照エラーについて

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

![2017-06-07_22h12_27.png](https://qiita-image-store.s3.amazonaws.com/0/100572/8236b12a-eedd-8d60-511e-8c193db053bf.png)

![2017-06-07_22h16_17.png](https://qiita-image-store.s3.amazonaws.com/0/100572/30b121a8-a3ca-e7ee-95c3-265e63e3e8fc.png)

# 一括計算機能

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

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

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

<img width="967" alt="2019-02-09_17h53_51.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/2aec8a02-d0ca-120f-2f88-97df46684e49.png">

## ボタン設定

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

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

<img width="663" alt="2019-02-09_18h06_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/03ec6869-6bba-f2cd-c7ce-cd12e0983852.png">

## 一覧別設定

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

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

<img width="521" alt="2019-02-09_18h06_48.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/56e3018d-ca97-3fc0-6b5d-663710f3fe39.png">

## 一括計算の実行

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

<img width="1114" alt="2019-02-09_18h12_09.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/4d87942b-6e21-0864-0daf-dbaeb8caac62.png">

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

<img width="1128" alt="2019-02-09_18h15_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/11f478d9-f705-2992-c853-19e6a1738a1f.png">

- 更新結果の表示

更新レコード数（更新数/変更数/計算対象）

<img width="1128" alt="2019-02-09_18h16_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/3fab2222-365e-853e-e216-5701d062b598.png">

# 既存レコードの更新

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

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

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

**※最大処理レコード20万件。20万超のレコードは、一覧の一括計算で対象レコードを絞って実行してください。
20万件処理時、読み込み 約 400 回 + 書き込み 2,000 回 = 合計約 2,400 回の API を発行します。
1アプリで1日に実行できるAPIリクエスト数は、10,000 回**

![2022-01-04_20h40_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b6774304-e9db-ff7f-2be2-1637b0c9440e.png)

# 計算式ツール

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

## 計算式ツールの有効化

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

<img width="883" alt="2019-01-30_15h50_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/f9e5f2e3-bfd9-8834-0380-dd4de1babc6f.png">

## 計算式ツールの表示

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

![2021-06-25_18h37_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/93e35923-b41b-0795-f92a-1870baa49698.png)

## 計算式の入力と実行

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

<img width="601" alt="2019-01-30_16h06_47.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/2f730423-64d0-1990-46d1-2d11f4b2c66c.png">

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

<img width="599" alt="2019-01-30_16h16_55.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/006c51e8-5608-c44a-ffee-8a19e64cc554.png">

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

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

<img width="591" alt="2019-01-30_16h28_22.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/bfa2703f-ee1f-55e0-bdfb-5a15d6b4ff58.png">

## 関数の入力支援

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

<img width="592" alt="2019-01-30_16h28_52.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/e8f5e184-8493-7ec6-1547-ba8613334395.png">

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

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

<img width="594" alt="2019-01-30_16h29_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/712c9bf1-edfc-9afc-8a61-86bf13f0dbe5.png">

## レコードの移動

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

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

<img width="598" alt="2019-01-30_16h24_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/e3b6f7f0-f57b-65ae-7b93-75308b399b71.png">

## 関数・演算子・項目・計算式の入力サポート機能

右側のテーブルに、関数・演算子・項目・計算式が表示されます。
テーブル行をクリックすると、説明表示、ダブルクリックで計算式編集エリアに挿入などの機能があります。

![2021-06-25_17h53_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/92989208-9ef8-33f8-b08e-9eb09ffa5cab.png)


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

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

<img width="889" alt="2017-09-18_19h47_55.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/40dcca88-aaab-2628-ed6a-9c5ec5685695.png">

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

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

<img width="883" alt="2017-09-18_19h52_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/2d3ee6f9-2c5e-8058-1efc-7a0ede142b22.png">

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

<img width="886" alt="2017-09-18_19h54_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/87de6468-1b47-7071-1f1e-d4b8361e32e4.png">

# 注意事項
- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。
- 計算項目を計算式に指定する場合<br>
計算項目を計算式プラグインの計算式で使用した場合、
計算項目の値が変化したタイミングでは、計算式プラグインの計算が行われません。
これは、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")

<img width="435" alt="2018-06-23_14h02_41.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/8ecd2f13-32b4-d46d-ffb3-4342fbbdb59f.png">

<img width="863" alt="2018-06-23_14h01_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/a49fb831-f5aa-5f8e-eb37-307c1163e4b5.png">

## 文字列変換

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

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

<img width="489" alt="2019-01-10_19h37_51.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/e47474ea-481c-aa23-4421-add1cd6e5c32.png">

<img width="849" alt="2019-01-10_19h38_40.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/3f87f4e4-e000-c37f-915d-a4b862bdc0dd.png">

## 消費税計算

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

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

<img width="479" alt="2018-06-23_12h52_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/7b011aeb-ec08-b948-2bed-cf0586e0cd32.png">

<img width="877" alt="2018-06-23_12h53_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/dc8a56c2-c76a-c181-0a99-68032112a52e.png">

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

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

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

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

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

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

<img width="623" alt="2017-10-04_21h15_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/7de9771b-977d-0132-f0f7-9a43b0a6f22b.png">

<img width="1128" alt="2017-10-04_22h11_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/22b17019-3bf4-8eb1-a861-14eb6ee7e435.png">

## テーブル行の値を取得

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

- テーブルの最終行
LASTIF 関数で、値の入っている最終行を取得します。
    - DATE_FORMAT(LASTIF(対応日付, 対応日付), "YYYY-MM-DD")
    - LASTIF(対応日付, 対応内容)


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

<img width="414" alt="2017-10-10_10h48_46.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/204fe0b7-6a3d-b800-7264-6d1fe7e86824.png">

<img width="898" alt="2017-10-10_10h47_53.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/c3a8bb4e-9868-fba3-3dab-8c74b4587f55.png">

## 時間集計の設定

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

- テーブル内の時刻項目を計算して、勤務時間を集計します。
    - 県内実務時間
DURATION_FORMAT(
SUMIF(AND(区分=="県内",終了,開始,休憩),
DURATION(終了)-DURATION(開始)-DURATION(休憩,"minutes")),
 "$%H時間 @m分")

- テーブル内の時刻項目から勤務時間を計算します。
    - 勤務時間
IF(AND(終了,開始,休憩),
DURATION_FORMAT(
DURATION(終了)-DURATION(開始)-DURATION(休憩,"minutes"),
 "$%H時間 @m分"))

<img width="759" alt="2017-10-29_20h01_17.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/4e0c1168-d146-2952-a034-69dabfd87465.png">

<img width="879" alt="2017-10-29_20h11_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/1b648eba-7cd1-4785-8cba-ad8b3224c49f.png">

## 日付計算

<img width="561" alt="2019-01-24_19h53_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/1e0b8487-708e-7848-49c2-c33e5e0b5264.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"))
<img width="458" alt="2019-02-19_01h24_23.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/623465bd-f03f-c0b7-64a8-84a216b9a0fa.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"))

## 時刻項目の計算

時刻計算は、そのままでは計算できないのでダミーの日付を付加して計算します。

- 時刻の３０分後を計算する例
    - IF(時刻,DATE_ADD("2000-01-01 "&時刻,30,"minute","HH:mm"))

## 正規表現による置換

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

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

- [(株)を株式会社に自動変換](https://qiita.com/rex0220/items/c81af42029f389b4af40)
- [和暦変換](https://qiita.com/rex0220/items/9f8eb7607fec4f22060a)
- [計算式プラグインとカレンダーPlus 連携](https://qiita.com/rex0220/items/fb732b02c8f81d03b4c9)
- [計算式プラグインでテーブル行複写](https://qiita.com/rex0220/items/22e1f326131d325aab7f)
- [計算式プラグインでテーブル行番号付与](https://qiita.com/rex0220/items/b985640a19e7ffe4d0ec)

# 利用ライブラリ
・jQuery MITライセンス
・jQuery-UI MITライセンス
・momentjs  MITライセンス
・sweetalert2 MITライセンス
・FileSaver  MITライセンス
・zlib MITライセンス
・bignumber.js MITライセンス
・kintone-ui-component  MITライセンス
・idb ISCライセンス
・pqgrid 商用ライセンス