株式会社COTSUBU
kintone

kintoneのテーブル(サブテーブル)に行番号を付ける方法|見積明細・作業明細で使う

宇田川 将也|7分
kintoneサブテーブル行番号プラグインJavaScript

kintoneのサブテーブルに行番号を出す標準機能はありません。計算フィールドでも作れません。1行目を1、2行目を2…と振るには、テーブルの中に列を1つ作り、JavaScriptか無料プラグインテーブル行番号で値を入れます。

サブテーブルの基本と、番号まわりの限界

サブテーブル(テーブル)は、1つのレコードの中に繰り返しのデータを持つための仕組みです。見積1件に明細が何行も入る、作業報告1件に作業が何項目も入る、といった構造をそのまま表せます。

便利な一方で、番号に関しては次の制限があります。

やりたいこと 標準機能
明細の行に 1, 2, 3… と番号を出す できない
計算フィールドで「何行目か」を取る できない(同じ行の値しか見られない)
行を上下に動かして並べ替える できない(追加と削除のみ)
行数を数える できる(テーブル内の数値の合計などは可能)
一覧画面にテーブルの中身を出す できない(詳細画面を開く必要がある)

なぜ手入力ではダメなのか

「No」という数値の列を作って手で打つ方法は、最初はうまくいきます。崩れるのは行を消したときと、途中に足したときです。

たとえば見積明細が5行あり、3行目を削除したとします。

削除前 削除後(手入力のまま) 本来あるべき番号
1 防水工事 1 防水工事 1
2 足場設置 2 足場設置 2
3 撤去処分 — —
4 清掃 4 清掃 3
5 諸経費 5 諸経費 4

番号が3番だけ飛びます。この見積書をそのままお客様に出すと、「3番はどこへ行ったのか」と聞かれます。しかもkintoneのサブテーブルには行の並べ替えがないため、「あとから2行目と3行目を入れ替えたい」となると、行を消して打ち直すことになり、番号はさらにずれます。

行番号が必要になる実務の場面

  • 見積・請求の明細:帳票に「No.」の列がある。電話で「3行目の単価を直してください」と言える
  • 作業報告・作業明細:当日の作業を順番どおりに残す。写真の並びと突き合わせる
  • 設備点検の項目:点検表の番号が、紙の様式と一致している必要がある
  • 工程・手順書:「手順4から再開」と指示できる

いずれも「番号がずれない」ことが前提です。ずれる可能性がある運用は、結局は帳票に出してから手で直すことになります。

JavaScriptで行番号を振る

テーブル内に「No」という数値の列を用意し、行の追加・削除のたびに1から振り直す最小の例です。

(() => {
  'use strict';
  const TABLE = '明細';   // サブテーブルのフィールドコード
  const NO = 'No';        // テーブル内の数値フィールド

  const renumber = (event) => {
    event.record[TABLE].value.forEach((row, i) => {
      row.value[NO].value = i + 1;
      row.value[NO].disabled = true;   // 手で書き換えられないようにする
    });
    return event;
  };

  // 画面を開いたとき・行を足し引きしたとき・保存するとき
  const events = ['create', 'edit'].flatMap((t) => [
    `app.record.${t}.show`,
    `app.record.${t}.change.${TABLE}`,
    `app.record.${t}.submit`,
  ]);

  kintone.events.on(events, renumber);
})();

20行ほどです。ポイントは、行の追加・削除がサブテーブルのフィールドコードに対する change イベントとして届くことです。app.record.create.change.明細 を拾えば、行を1つ消した瞬間に番号を振り直せます。JavaScriptカスタマイズの基本は13章 JavaScript・API・外部連携にまとめています。

この書き方で足りないところ

足りないところ 何が必要になるか
「1-1」「A-001」のような書式 連結と桁そろえの処理を追加
テーブルが複数ある(明細と指摘事項など) ルールを配列にして回す作りに変更
モバイル画面 mobile.app.record.* のイベントを別に指定
CSVの読み込み・REST APIからの登録 動きません(ブラウザ側の処理のため)
行の並べ替え(上へ・下へ) ボタンのDOMを自前で描く必要あり

また、値が入るのは画面を開いた時点までです。開いただけでは保存されないので、既存のレコードに番号を入れるには一度編集して保存する必要があります。

設定だけで済ませる:テーブル行番号(無料)

COTSUBUが公開している無料プラグインテーブル行番号は、上の内容を設定画面だけで実現します。

  • サブテーブルの指定した列に 1 から行番号を振る
  • 行の追加・削除・保存のたびに自動で振り直す
  • 数値・文字列(1行)どちらの列にも振れる
  • 1つのアプリの複数のサブテーブルに設定できる(点検項目の表と指摘事項の表、など)
  • 行番号の列は手で書き換えられないようにする

無料・会員登録不要・外部と通信しません。 kintoneの公式APIだけで動くので、自治体のLGWAN環境や、閉じた社内ネットワークでも使えます。

設定はこの4ステップです。

  1. サブテーブルに、行番号を入れる列(数値 または 文字列1行)を用意する
  2. アプリの設定 →「プラグイン」→「テーブル行番号」の歯車アイコン
  3. テーブルと列を選ぶ。複数のテーブルに振るときは「+ テーブルを追加」
  4. 「保存する」→「アプリを更新」

番号は上の行から順に 1, 2, 3… と振られ、レコードを開いたとき・行を足したり消したりしたとき・保存するときに振り直されます。すでにあるレコードには、編集して保存したときに入ります。

いまはPCの画面に対応しています。モバイル画面への対応は無料版で予定しています。「1-1」のような書式つきの行番号や、行の並べ替えは有料版で提供する予定です。

行番号を付ける前に考えること

行番号を入れる列は、あとから足すとレコードの数だけ保存し直すことになります。テーブルを作る段階で入れておくのが楽です。

そのうえで、次の点を先に決めてください。

  • 数値と文字列、どちらの列にするか。集計や並べ替えに使うなら数値、帳票で「No.1」のように出すなら文字列が扱いやすくなります
  • 番号を何に使うのか。「会話で指すため」なら行番号で十分ですが、「明細そのものを一意に識別したい」なら別アプリに切り出してレコードにする設計もあります(→6章 複数アプリのつなぎ方)
  • 明細が何行くらいになるか。数十行を超えるなら、テーブルではなく明細用のアプリにしたほうが、検索も集計もしやすくなります

明細をテーブルで持つか別アプリで持つかは、kintoneのアプリ設計で最初に迷うところです。判断の基準は5章 アプリ設計の基本にまとめています。

まとめ

  • kintoneのサブテーブルに行番号は付かない。計算フィールドでも作れない
  • 手入力すると、行を消した瞬間に番号が飛ぶ。並べ替えもできないので、ずれは必ず起きる
  • JavaScriptなら20行ほどで書ける。サブテーブルの change イベントで行の増減を拾う
  • CSV読み込みやAPI登録ではJavaScriptは動かない
  • 設定だけで済ませるなら無料のテーブル行番号。複数のテーブルにも設定できる
  • 行番号の列は、テーブルを作る段階で入れておくと後戻りがない

→ kintone導入支援の詳細 → kintone無料プラグイン一覧 → kintoneで連番・自動採番を作る方法

よくある質問

kintoneのサブテーブルに行番号は標準で付きますか

付きません。サブテーブルの行には番号の表示がなく、行番号を出す計算式もありません。番号を出すには、テーブル内に数値か文字列(1行)の列を作り、JavaScriptかプラグインで値を入れます。

計算フィールドで行番号を出せませんか

出せません。テーブル内の計算フィールドは、その行の中にある値しか参照できず、「自分が何行目か」を知る手段がありません。ROW() のような関数も用意されていません。

行番号を手で入力してはいけませんか

おすすめしません。途中の行を消すと以降の番号をすべて打ち直すことになり、直し忘れが必ず起きます。明細が10行を超えるアプリでは、手入力は現実的ではありません。

サブテーブルの行を並べ替えることはできますか

標準ではできません。kintoneのサブテーブルは行の追加と削除だけで、上下に移動するボタンはありません。順番を変えるには、行を消して入れ直すか、並び順用の列を作ってCSVで入れ直すことになります。

テーブル行番号プラグインは無料ですか

無料です。会員登録も不要で、MITライセンスのため商用でも使えます。外部のサーバーと通信しないので、自治体のLGWAN環境や閉じた社内ネットワークでも動きます。

宇田川 将也/ 代表取締役

2024年に総務省の地域活性化起業人として島根県海士町に着任。役場に住み込んで業務改善に従事し、kintoneで電子決裁や定期健診管理を構築しました。

経歴を見る

この記事について相談する

貴社・貴団体の状況に合わせて、最適な進め方をご提案します。

30分相談を予約する