Q&A 35

レコードをグループ化し,そのグループ内で連続するレコード番号を設定したい


例えば次のような表で,[区分] の値ごとに [番号] に連続した値を設定したい場合を想定します。レコードを挿入するとき自動的に番号を入力する方法と,すでに入力されたレコードの番号を振り直す方法を順に説明します。

区分番号
A1
A2
A3
B1
B2
C1
C2
新規入力時の初期値式の設定
次にレコードを挿入するとき,[区分] の値に 'A' を入力したら [番号] には 4 を,'D' なら 1 を自動的に入力するための設定です。これは,[番号] 項目の初期値式で自己表引きすることで可能です。つまり,レコードの挿入を始め[区分] に値が入力されたあと,その値ですでに入力されているレコードを調べ,[区分] の値が同じレコードの [番号] の最大値を求め,それに 1 を加えた値を今挿入しているレコードの [番号] の値とします。
以下のようにします。なお,[区分] と [番号] はどちらも基本項目とし,[区分] は文字列型,[番号] は数値型です。
  1. 表定義の [属性]-[索引] で索引を登録します。このとき,第1キー項目に [区分],第2キー項目に [番号] を指定します。[番号] の整列順は昇順とします。この索引の名前を例えば '区分別番号順' とします。
  2. [番号] の初期値式を次のように設定し,表定義を終了します。→#対話表引き
    #対話表引き(, .[区分]=[区分], .[番号]+1, ,'区分別番号順',1,65)
なお,[区分] によるグループ分けなど無関係に [番号] の最大値を求めたいときは,組込み関数 #最終値 が使えます。

既存レコードの置換
既に入力してあるレコードの [区分] の値ごとに [番号] の値を連続した値に置き換えたいときは,以下のようにします。
  1. 表編集で番号を振り直したい順番に整列します。このとき整列キー項目に [番号] を含まない索引を使用してください。
  2. [表操作]-[置換] で [式で置換] を選び置換します。置換式は次のようにします。→#順番
    [番号] := #順番([区分])