以下の表の「作業内容」の項目に値を入力すると同時に「No」の項目に連番を表示する方法について解説していきます。
まずは準備段階として、「No」の項目の先頭に「1」のみを入力します。
次に、セルB6以降に「No」を表示する数式を入力していきます。
セルB6以降に入力する数式は、以下のような式になります。
・該当する行に関して、C列「作業内容」に値が入力されている場合に、B列「No」に連番を表示する
・「No」に表示する番号は、「No」を表示する行よりも上の範囲の最大値に1を加えた番号になる
この内容を満たした数式は、以下になります。
=IF(C6="","",MAX($B$5:B5)+1)
// セルB6に入力する数式
MAX関数で指定した範囲の最大値を取得することができるため、IF関数で該当する行のC列に値が入力されている場合に関してのみ、MAX関数で取得した値に1を加えた値を表示しています。
MAX関数の引数に設定している範囲($B$5:B5)は、該当する行よりの上の範囲になります。
セルB6の場合はセルB5~B5の範囲、セルB7の場合はセルB5~B6の範囲、セルB8の場合はセルB5~B7の範囲、という感じになります。
範囲の始まりのセル(B5)に関しては固定し、終わりのセル(数式を入力したセルの真上)に関しては相対的に変化させる必要があるため、「$B$5:B5」のように始まりのみを絶対参照($)にして終わりは相対参照にしています。
この数式を、連番を表示させたい範囲の最後までコピーすることで、「作業内容」の項目の値の有無に応じて連番を表示することができます。
この方法を活用する場合、行の挿入時に注意すべき点があります。
行を挿入した場合、挿入した範囲には数式が表示されません。
そのため、挿入した範囲内の「作業内容」の項目に値を入力してしまうと、間違った連番になってしまいます。
また、挿入したセルの次の行(B12)の数式に関しては、以下のように参照範囲がずれてしまいます。
=IF(C12="","",MAX($B$5:B8)+1)
// 理想はMAX($B$5:B11)となるべき
そのため、挿入した範囲にも数式を反映させる場合は、挿入した行の一つ上のセル(B8)の数式を、挿入した行の一つ下のセル(B12)までコピーする必要があります。
この数式の場合、上記の点が少しややこしいので、参照範囲がずれない別の数式についても解説していきます。
参照範囲がずれない数式とは、以下のような数式になります。
=IF(C5="","",COUNTA($C$5:C5))
この数式は、「No」の先頭の項目であるセルB5に入力します。
この数式は、数式を入力した行までの「作業内容」の項目に値が入力されているセルの数を表示するといったものなります。
指定した範囲内に値が入力されているセルの数を取得するためにCOUNTA関数を活用しています。
COUNTA関数に指定する範囲に関しては、セルB5に入力する数式の場合はセルC5~C5の範囲、セルB6の場合はセルC5~C6の範囲、セルB7の場合はセルC5~C7の範囲と、終わりの位置のみを相対参照で反映する必要があります。
そのため、「$C$5:C5」と始まりを絶対参照($)にして終わりを相対参照にしています。
こちらの数式を先ほど同様にコピーすることで、連番を表示することができます。
この数式の場合は、COUNTA関数の参照範囲の終わりの位置を、数式を入力している行と同じにしているため、行を挿入した場合に関しても、連番がずれてしまうことはありません。
挿入した行にも連番を表示させるには、「No」の項目に入力されている数式をコピーするだけで表示することができます。
最初に解説した数式とは異なり、挿入した行の一つ下のセル(B12)までコピーする必要はありません。