
Googleスプレッドシート連番Tips続き
前回、連番Tipsを書きました。
今回はその続きです。例えば、

といった分類・階層型のシートは珍しくないはずです。前回紹介したコード
=IF(ISBLANK(B2),"",ROW()-1)を使って、A列にコピーすると

と数字が歯抜けに見えます…。そこで今回は
=IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)をA2セルに設定し、


A8までにコピーすると

と行は非連続ながら、連番されます。利用場面は限られますが、知っていると便利なTipsです。
●解説
=IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)IF, MAX, INDIRECT, ROWを組み合わせてるので難しく見えますが、やりたいことを文章にすると
1つ上の行までのA列で、一番大きな数字を取得し、プラス1
です。この条件をざっくり二分すると
A列で1つ上の行までを取得→INDIRECT
一番大きな数字を取得→MAX
と2つの関数で概ね処理できます。順を追って紹介して行きましょう。
まず、A2からA6に数字を用意します。

INDIRECTは該当セルの値を返します。A2であれば1を

A6を指定すれば、

該当する値、5を返します。

INDIRECTはセルの範囲指定ができ、A2:A6を記述すれば、


該当値を列挙します(敢えて、横に並べて表示)。
次にMAXを使って最大値を取得。セル範囲として、B2:B6を記述すると、

一番大きな数字5を返し、

プラス1なら、6となります。
では準備ができたので、関数を組み合わせ、A列の最後、A7に記載します。

この組み合わせを使えば、

数値が非連続(とびとび)でも、数値が1つずつ増やせます。
汎用性を持たせるために、INDIRECTで指定するセル範囲の終点を該当行数-1に修正。
=MAX(INDIRECT("A1:A"&ROW()-1))+1
仕上げとして、B列にデータがなければ空白で、B列にデータがあれば採番するというIF文で括れば、上述の
=IF(B2="","",MAX(INDIRECT("A1:A"&ROW()-1))+1)が完成です。

さいごに
課題が1つ残ってます。本当はArrayFormulaを使って、縦列のコピーを不要にしたかったものの、上手く設定できず。。。
もっとスプレッドシートの修行をせねば