2017-10-13 2 views
0

Googleスプレッドシートのデータベースには、一連の企業に参照番号を割り当てるために作成した公式があります。Googleスプレッドシートの数値の増分

各企業は、一意の番号を「RET00XX」の形式で指定する必要があります.XXは一意の会社番号を表します。私は、これらの数字を1から始まり、それに続いて+1して順番にしたいと思います。 新しい会社がデータベースに挿入されるときはいつでも、数式はそれを参照番号と見なすことができます。また、会社が既にデータベースに存在するかどうかを確認することもできます。新しい会社を作成するのではなく、会社の固有の参照番号であると自動的に判断します。

会社名はこれは私が構築されている式(行2中の1つの例)であり、列Bのセル内

である:それが取る

=ARRAYFORMULA(IF($B2<>"",IF((COUNTIF($B$1:$B1,$B2)>0),INDEX($A$1:$R2,MATCH($B2,$B$1:$B1,0),12),CONCATENATE("RET00",ROW($B2))),"")) 

手順は次のとおり
1 - 対応する行の列Bが空でないことを確認します。
2 - COUNTIF機能を使用して、前の行に会社が存在しないことを確認します。
3 - 会社が存在する場合は、INDEX関数を使用して、対応する参照番号を指定します。
4 - 会社が存在しない場合、会社にはCONCATENATEROWの機能を持つ新しい参照番号が割り当てられています。

数式は主に機能していますが、いくつか問題があります。 このデータベースに追加するユーザーは、データベースの中央に行を挿入してエントリを追加する傾向があります。これにより、数式が作成される方法のために、会社固有の参照コードが毎回変わるようになります。これは部分的に私がROW機能を使用していることによるものだと私は信じています。
また、データベースの途中に新しい行が挿入されている場合、以前のすべての行をループするだけでなく、新しい行が挿入されている場合は、数式は、会社が新しい行の後の行にある可能性がある前の行のみを検証します)。

ROWを参照せずに式で連番を指定するにはどうすればよいですか?また、スプレッドシートが、挿入された行の前のものだけでなく、列Bのすべての行を確認するにはどうすればよいですか?

はありがとう

答えて

2

短い答え

使用Google Apps Script値がされるように、データベースとして使用し、ライブスプレッドシート上のIDを設定するには、スプレッドシート関数を使用して

説明

は非常に危険ですスプレッドシートの内容が変更されたときに再計算されます。

数式を使用する代わりに、スクリプトを使用して「固定値」を追加します。スクリプトは、セルエディットや行挿入などのイベントで自動的に呼び出すことができます。カスタムメニューやサイドパネル、スクリプトエディタ、時間駆動トリガなどを使用してスクリプトを呼び出すことができます。SOから

この他、あまりにも役立つことができます:

関連する問題