ROW関数の使い方|行削除しても崩れない連番と偶数行の色分け

ROW関数は、セルの行番号を数値で返す関数です。単独で使う場面はほとんどなく、「行削除しても崩れない連番」と「〇行おきに色を付ける条件付き書式」という2つの実務用途でほぼ出番が決まります。引数を省略すると、数式が入っているセル自身の行番号を返します。

この記事でわかること

  • ROW関数の構文と、引数を省略したときの動き
  • 行を削除しても自動で振り直される連番の作り方
  • ROW()-1 と ROWS($A$2:A2) のどちらを使うか
  • 条件付き書式で偶数行だけに色を付ける式
  • 並べ替えで連番が変わってしまうときの対処


目次

ROW関数の構文と引数

構文

=ROW([参照])
引数指定するもの注意点
参照行番号を知りたいセル省略すると、数式が入っているセル自身の行番号を返す

=ROW() を5行目に入れれば 5 が返ります。=ROW($A$10) なら、どこに置いても 10 です。

範囲を指定した場合は、その範囲の先頭の行番号が返ります。=ROW($B$3:$B$20) は 3 です。範囲の行数を知りたいときはROWS関数を使います。

ROW関数はExcel 2016以前から使える関数で、バージョンによる違いはありません。

ROW関数の使い方|行削除しても崩れない連番と偶数行の色分けの解説図1

行削除に強い連番を作る

なぜ手入力ではだめか

1・2・3……とオートフィルで数字を入れた連番は、行を1本削除した瞬間に歯抜けになります。5行目を消せば、以降が 4・6・7…… と飛びます。並べ替えのキーや通し番号として使っている場合、この歯抜けは後工程で問題になります。

数式で連番を作れば、行を削除した時点で残った行が自動的に振り直されます。

書き方① ROW() から差を引く

見出しが1行あり、データが2行目から始まる表なら、A2に次の式を入れて下へコピーします。

=ROW()-1

2行目で 2-1=1、3行目で 3-1=2 となり、1から始まる連番になります。見出しが3行あるなら -3 にします。

書き方② ROWS で起点から数える

もう1つの定番がこちらです。

=ROWS($A$2:A2)

$A$2 で起点を固定し、後ろの A2 は固定しません。下へコピーすると範囲が $A$2:A3・$A$2:A4 と伸びていき、その行数が連番になります。

書き方長所注意点
=ROW()-1短く、意味が読み取りやすい表の開始行が変わると引く数を直す必要がある
=ROWS($A$2:A2)表全体を上下に移動しても壊れにくい式がやや長い

表の位置が動く可能性があるならROWS、動かないと決まっているならROW、という選び方になります。どちらも行削除には同じように強く動きます。

⚠️ 行を「挿入」したときは数式が入らない

行削除では自動で振り直されますが、行を挿入した場合、その行には数式が入りません。連番が1つ抜けた状態になります。

表をテーブル(範囲を選んで Ctrl+T)にしておくと、行を挿入・追加したときに数式が自動で埋まります。連番を数式で持つなら、テーブル化まで合わせて行うのが確実です。

ROW関数の使い方|行削除しても崩れない連番と偶数行の色分けの解説図2

実務でよく使う4パターン

① 空白行を飛ばして連番を振る

ROW関数は行番号をそのまま使うため、空白行にも番号が付いてしまいます。入力済みの行だけに番号を振るなら、COUNTA関数に切り替えます。

=IF($B2="", "", COUNTA($B$2:$B2))

B列が空欄なら何も表示せず、入力済みなら「ここまでに入力された件数」を返す形です。連番の用途が「件数の通し番号」なら、こちらのほうが実態に合います。

② 偶数行に色を付ける(縞模様)

条件付き書式の数式ルールに、MOD関数と組み合わせて指定します。

  1. 色を付けたい範囲(見出しを除いた表全体)を選択する
  2. 「ホーム」→「条件付き書式」→「新しいルール」→「数式を使用して、書式設定するセルを決定」
  3. 数式を入れ、「書式」で塗りつぶし色を選ぶ

やりたいこと入れる数式
シートの偶数行に色=MOD(ROW(),2)=0
シートの奇数行に色=MOD(ROW(),2)=1
3行おきに色=MOD(ROW(),3)=0
データの2件目・4件目…に色=MOD(ROW()-1,2)=0

MOD関数は割り算の余りを返します。ROW() を2で割った余りが0なら偶数行、という判定です。

⚠️ ここで基準になるのはシートの実際の行番号で、表の何件目かではありません。見出しが1行あってデータが2行目から始まる表に =MOD(ROW(),2)=0 を設定すると、シートの2行目=データの1件目から色が付きます(見出しのすぐ下が塗られます)。

見出しの直下を白から始めたいなら、見出し分をずらして =MOD(ROW()-1,2)=0 と書きます。縞模様が1行ずれて見えるときは、ほぼこの差です。

③ 偶数行だけを合計する

同じ考え方を集計にも持ち込めます。SUMPRODUCT関数の条件式にMODとROWを置く形です。

=SUMPRODUCT((MOD(ROW($C$2:$C$100),2)=0) * $C$2:$C$100)

範囲に対して行ごとの判定を行い、条件を満たす行の金額だけを合計します。1行おきに小計行が入っている表などで使えます。

④ 〇行おきにデータを取り出す

INDEX関数の行番号にROWSを渡すと、一定間隔で値を拾えます。3行おきに取り出す例です。

=INDEX($A$1:$A$300, ROWS($A$1:A1)*3-2)

ROWS($A$1:A1) が 1・2・3…… と増え、*3-2 によって 1・4・7…… という行番号になります。縦に長い定型データを、一定間隔で別の表へ組み替えるときの形です。

ROW関数の使い方|行削除しても崩れない連番と偶数行の色分けの解説図3

うまくいかないときの原因と直し方

症状主な原因直し方
連番が2から始まる見出し行の分を引いていない=ROW()-1 のように差を引く
表を移動したら連番がずれたROW()-1 の引く数が合わなくなった=ROWS($A$2:A2) に書き換える
行を挿入した行だけ番号がない挿入行に数式が入っていない数式をコピーする。またはテーブル化する
空白行にも番号が付くROWは行番号をそのまま返す=IF($B2="","",COUNTA($B$2:$B2)) に切り替える
並べ替えたら連番が変わった数式は常に現在の行位置で再計算される下の「並べ替えとの相性」を確認する
縞模様が1行ずれる判定がシートの行番号で行われている見出し分をずらして =MOD(ROW()-1,2)=0 にする
フィルタをかけると縞が乱れる判定はシートの行番号で行われるテーブルスタイルの縞模様に切り替える
#VALUE!参照に文字列を指定した参照はセルまたはセル範囲を指定する

⚠️ 並べ替えとの相性

ROW関数で作った連番は、並べ替えても「上から1・2・3」のままです。行が入れ替わっても、数式は常にその時点の行位置で計算し直されるためです。

これは「常に上から通し番号」が欲しい場面では利点ですが、「元の並び順に戻すための番号」としては使えません。元の順序を保存したいなら、連番の列をコピーして値の貼り付けで固定してください。固定した数値なら、並べ替えても行と一緒に動きます。

フィルタと縞模様

条件付き書式の =MOD(ROW(),2)=0 はシートの行番号で判定するため、フィルタで行が隠れると、見えている範囲の縞が不揃いになります。フィルタを頻繁に使う表なら、テーブル機能のスタイル(縞模様)を使うほうが見た目が安定します。


似た関数・機能との使い分け

関数・機能対応バージョン返すもの・選ぶ場面
ROW2016〜セルの行番号。連番・行おきの判定
ROWS2016〜範囲の行数。起点固定の連番
COLUMN2016〜セルの列番号。横方向の連番
COLUMNS2016〜範囲の列数。VLOOKUPの列番号にも使う
COUNTA2016〜入力済みの件数。空白を飛ばす連番
SEQUENCE2021〜連番をまとめて生成する(スピル)
テーブル(Ctrl+T)2016〜縞模様・行追加時の数式の自動入力

ROWとROWSの違い

名前が1文字違うだけですが、返すものが違います。

=ROW($B$3:$B$20)     … 3(範囲の先頭行)
=ROWS($B$3:$B$20)    … 18(範囲の行数)

連番を作る用途では、起点を固定して伸ばしていくROWSのほうが、表の位置ずれに強いという関係になります。

Excel 2021・Microsoft 365 ならSEQUENCE

動的配列に対応した環境では、SEQUENCE関数で連番をまとめて作れます。

=SEQUENCE(100)

1つのセルに入れるだけで、下方向へ100件の連番が自動で並びます(スピル)。ただしスピルした範囲は1つのかたまりとして扱われるため、途中の行だけを削除することはできません。行の増減がある表では、各行に数式を置くROW・ROWSのほうが扱いやすくなります。

SEQUENCE関数はExcel 2021以降とMicrosoft 365で使えます。2019以前では #NAME? になります。


よくある質問

Q1:=ROW() と =ROW(A1) は何が違いますか?

=ROW() は数式が入っているセル自身の行番号、=ROW(A1) はA1セルの行番号(=1)です。=ROW(A1) を下へコピーすると参照が A2・A3 と動くため、1から始まる連番になります。ただし他の列を参照する形になるので、意図が読み取りにくくなります。連番なら =ROW()-1 か =ROWS($A$2:A2) を推奨します。

Q2:シートの行番号を非表示にすると、ROWの結果も変わりますか?

変わりません。行番号の表示・非表示は見た目の設定で、行の位置そのものは変わらないためです。同様に、行の高さを変えても結果は変わりません。

Q3:連番を1000行分入れたいのですが、コピーが大変です。

A2に数式を入れてセルを選び、名前ボックス(数式バーの左端)に A2:A1001 と入力してEnterを押すと範囲が選択されます。そのまま Ctrl+D を押すと、一番上の数式が範囲全体に埋まります。表をテーブル化しておけば、行を追加するたびに自動で入ります。

Q4:偶数行の色付けは、条件付き書式とテーブルのどちらがよいですか?

フィルタや並べ替えを使う表ならテーブルのスタイル、間隔を自分で決めたい(3行おきなど)場合や、色の条件を他の判定と組み合わせたい場合は条件付き書式です。条件付き書式はシートの行番号で判定するため、フィルタで行が隠れると縞が不揃いになります。

Q5:横方向の連番を作るには?

COLUMN関数を使います。=COLUMN()-1 のように、開始列の分を引く考え方はROWと同じです。範囲の列数を数えるならCOLUMNS関数で、こちらはVLOOKUP関数の列番号を自動計算させる用途でも使われます。


まとめ

ROW関数の要点
  • 引数を省略するとそのセル自身の行番号。範囲を渡すと先頭行が返る
  • 連番は =ROW()-1 か =ROWS($A$2:A2)。表が動くならROWS
  • 行削除には自動で追従するが、行挿入では数式が入らない。テーブル化で解決
  • 空白行を飛ばしたいならROWではなくCOUNTA
  • 縞模様は =MOD(ROW(),2)=0。判定はシートの行番号なので見出し分をずらす

※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、白石です。製造業の生産管理で15年、毎日の実績集計と帳票づくりをExcelでやってきました。マクロを組もうとして早々に挫折し、そこからは「関数と表の機能だけでどこまでやれるか」でしのいできた口です。部門では「この集計どうやるの」と聞かれる係になり、聞かれた内容を手元にメモし続けました。そのメモがいつのまにか、関数名ではなくやりたいことから引く形になっていて、それがこのサイトのもとになっています。Excelは同じことをやるのに何通りもやり方があって、しかもバージョンによって使える関数が違います。ここでは実際に動かして確かめた式だけを載せ、つまずきやすいところと使えないバージョンを先に書くようにしています。

目次