残業を減らす!Officeテクニック

Excelで巨大な表に連番を振る効率的な方法! 空白を飛ばして連番を生成するワザも

 連番を作成する方法はいくつかあります。フィルハンドルをドラッグするのが定番。隣の列に既存のデータが入力されていれば、フィルハンドルをダブルクリックするのが手っ取り早いでしょう。

 関数を利用する方法もあります。代表格は、ROW関数です。「=ROW()」と入力することで、数式の入力されている行の行番号を取得できます。見出しがある時はその行数の分を引いて、以下のように「=ROW()-1」となります。

見出しの行の分(-1)を引いて「=ROW()-1」となる。2行目以降も同じ数式「=ROW()-1」で、「2」「3」「4」…と連番が振られる

 ROW関数を使って行番号を振った場合、行の追加・削除があっても、連番を保持できるメリットがあります。この動作はご存じの方が多いでしょう。ただ、数式のコピーは必要です。

 同様に連番を保持できる「SEQUENCE関数」もあります。スピルに対応しているため、数式をコピーする必要もなく、大量の連番を一気に振りたいときに便利です。

SEQUENCE関数の構文。引数[開始値]から[増分]ずつ増える[行数]×[列数]の配列を作成する

 構文は上記の通りですが、すべての引数が省略可能です。省略した引数は「1」と見なされるため、例えば、1,500行分の連番を振るなら「=SEQUENCE(1500)」と、ひとつ数式を入力するだけです。しかし、表の行数がわからないと過不足が生じます。

セルA2に「=SEQUENCE(1500)」とすれば、1,500行分の連番を生成できる

 最終行番号を取得できれば、SEQUENCE関数の弱点は回避できますよね。今回は、関数を使って表の最終行番号を取得し、最終行までの連番を生成する方法、また、空白を飛ばして連番を振る方法を紹介します。

未入力のデータがない表の行数を調べる

 表の最終行を調べる場合、特定の列に必ずデータが入力されているかどうかがポイントになります。未入力のセルがないなら、その列のデータの数を数えるだけです。まずは、COUNTA関数でデータの数を数えてみましょう。

ここでは、B列に必ずデータが入力されている前提で、COUNTA関数を利用する。「=COUNTA(B:B)」と入力すると、B列に入力されているデータの数がわかる。結果は「1501」となった
最終行は、1501行だとわかる

 最終行がわかれば、SEQUENCE関数と組み合わせるだけです。見出し行分を引いて引数に指定します。

セルA2に「=SEQUENCE(COUNTA(B:B)-1)」と入力した。先ほど、COUNTA関数の結果は「1501」だったので、「COUNTA(B:B)-1」で、1~1500までの連番を生成できる

未入力のデータが含まれる表の行数を調べる

 COUNTA関数で数えられるのは、データの入力されているセルの数です。もし、B列に未入力のセルがある場合は、連番が足りなくなってしまいます。試しに任意のセルのデータを消去してみましょう。

セルB5~B9のデータを消去した。COUNTA関数の結果は変わる
SEQUENCE関数とCOUNTA関数を組み合わせた数式の結果も変わり、連番が足りていない

 空白のセルの問題を回避するには、数値の最大値を求めるMAX関数とROW関数を使います。「空白ではないセルの最大行」を求めると考えます。入力する数式は「=MAX((B:B<>"")*ROW(B:B))」です。

MAX関数とROW関数を組み合わせて「=MAX((B:B<>"")*ROW(B:B))」と入力する。結果は「1501」となった

 B列に空白が含まれていても「1501」の結果が得られました。これをSEQUENCE関数と組み合わせればうまくいきそうですね。見出し行の分引いておくことを忘れずに。

セルA2に「=SEQUENCE(MAX((B:B<>"")*ROW(B:B))-1)」と入力した。「MAX((B:B<>"")*ROW(B:B))-1」で「1500」となる
最終行まで連番が振られている

任意の行を飛ばして連番を振る

 保留扱いの行や補足を追加した行など、任意の行を飛ばして連番振りたいことがありますよね。ROW関数やSEQUENCE関数ではなく、MAX関数を使います。以下は連番用の数式として「=MAX($A$1:A1)+1」と入力して、コピーした状態です。

セルA2に「=MAX($A$1:A1)+1」と入力して、コピーした状態

 「$A$1:A1」はセルA1からA1までの意味です。下方向へコピーすると、「$A$1:A2」「$A$1:A3」「$A$1:A4」と変化します。MAX関数の対象にするセル範囲が広がるわけです。MAX関数は数値の最大値を求めるので、見出し行の分として「+1」しています。

 数値が入力されていなければ判定対象外なので、連番が表示された行の一部を消去すると、以下のように空白を飛ばした連番となります。

空白のセルは飛ばして連番が続く

 オートフィルで数式をコピーしておくこと、空白にしたセルに再び連番を振る時は数式のコピーが必要といった手間はかかりますが、わかりやすい方法だと思います。定番のROW関数の連番の代わりに使ってもいいですね。