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… と振られ、レコードを開いたとき・行を足したり消したりしたとき・保存するときに振り直されます。すでにあるレコードには、編集して保存したときに入ります。
いまはPCの画面に対応しています。モバイル画面への対応は無料版で予定しています。「1-1」のような書式つきの行番号や、行の並べ替えは有料版で提供する予定です。
行番号を付ける前に考えること
行番号を入れる列は、あとから足すとレコードの数だけ保存し直すことになります。テーブルを作る段階で入れておくのが楽です。
そのうえで、次の点を先に決めてください。
- 数値と文字列、どちらの列にするか。集計や並べ替えに使うなら数値、帳票で「No.1」のように出すなら文字列が扱いやすくなります
- 番号を何に使うのか。「会話で指すため」なら行番号で十分ですが、「明細そのものを一意に識別したい」なら別アプリに切り出してレコードにする設計もあります(→6章 複数アプリのつなぎ方)
- 明細が何行くらいになるか。数十行を超えるなら、テーブルではなく明細用のアプリにしたほうが、検索も集計もしやすくなります
明細をテーブルで持つか別アプリで持つかは、kintoneのアプリ設計で最初に迷うところです。判断の基準は5章 アプリ設計の基本にまとめています。
まとめ
- kintoneのサブテーブルに行番号は付かない。計算フィールドでも作れない
- 手入力すると、行を消した瞬間に番号が飛ぶ。並べ替えもできないので、ずれは必ず起きる
- JavaScriptなら20行ほどで書ける。サブテーブルの
changeイベントで行の増減を拾う - CSV読み込みやAPI登録ではJavaScriptは動かない
- 設定だけで済ませるなら無料のテーブル行番号。複数のテーブルにも設定できる
- 行番号の列は、テーブルを作る段階で入れておくと後戻りがない
よくある質問
kintoneのサブテーブルに行番号は標準で付きますか
付きません。サブテーブルの行には番号の表示がなく、行番号を出す計算式もありません。番号を出すには、テーブル内に数値か文字列(1行)の列を作り、JavaScriptかプラグインで値を入れます。
計算フィールドで行番号を出せませんか
出せません。テーブル内の計算フィールドは、その行の中にある値しか参照できず、「自分が何行目か」を知る手段がありません。ROW() のような関数も用意されていません。
行番号を手で入力してはいけませんか
おすすめしません。途中の行を消すと以降の番号をすべて打ち直すことになり、直し忘れが必ず起きます。明細が10行を超えるアプリでは、手入力は現実的ではありません。
サブテーブルの行を並べ替えることはできますか
標準ではできません。kintoneのサブテーブルは行の追加と削除だけで、上下に移動するボタンはありません。順番を変えるには、行を消して入れ直すか、並び順用の列を作ってCSVで入れ直すことになります。
テーブル行番号プラグインは無料ですか
無料です。会員登録も不要で、MITライセンスのため商用でも使えます。外部のサーバーと通信しないので、自治体のLGWAN環境や閉じた社内ネットワークでも動きます。


