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以前から使える関数で、バージョンによる違いはありません。

行削除に強い連番を作る
なぜ手入力ではだめか
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)にしておくと、行を挿入・追加したときに数式が自動で埋まります。連番を数式で持つなら、テーブル化まで合わせて行うのが確実です。

実務でよく使う4パターン
① 空白行を飛ばして連番を振る
ROW関数は行番号をそのまま使うため、空白行にも番号が付いてしまいます。入力済みの行だけに番号を振るなら、COUNTA関数に切り替えます。
=IF($B2="", "", COUNTA($B$2:$B2))
B列が空欄なら何も表示せず、入力済みなら「ここまでに入力された件数」を返す形です。連番の用途が「件数の通し番号」なら、こちらのほうが実態に合います。
② 偶数行に色を付ける(縞模様)
条件付き書式の数式ルールに、MOD関数と組み合わせて指定します。
- 色を付けたい範囲(見出しを除いた表全体)を選択する
- 「ホーム」→「条件付き書式」→「新しいルール」→「数式を使用して、書式設定するセルを決定」
- 数式を入れ、「書式」で塗りつぶし色を選ぶ
| やりたいこと | 入れる数式 |
|---|---|
| シートの偶数行に色 | =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…… という行番号になります。縦に長い定型データを、一定間隔で別の表へ組み替えるときの形です。

うまくいかないときの原因と直し方
| 症状 | 主な原因 | 直し方 |
|---|---|---|
| 連番が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 はシートの行番号で判定するため、フィルタで行が隠れると、見えている範囲の縞が不揃いになります。フィルタを頻繁に使う表なら、テーブル機能のスタイル(縞模様)を使うほうが見た目が安定します。
似た関数・機能との使い分け
| 関数・機能 | 対応バージョン | 返すもの・選ぶ場面 |
|---|---|---|
| ROW | 2016〜 | セルの行番号。連番・行おきの判定 |
| ROWS | 2016〜 | 範囲の行数。起点固定の連番 |
| COLUMN | 2016〜 | セルの列番号。横方向の連番 |
| COLUMNS | 2016〜 | 範囲の列数。VLOOKUPの列番号にも使う |
| COUNTA | 2016〜 | 入力済みの件数。空白を飛ばす連番 |
| SEQUENCE | 2021〜 | 連番をまとめて生成する(スピル) |
| テーブル(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()-1か=ROWS($A$2:A2)。表が動くならROWS - 行削除には自動で追従するが、行挿入では数式が入らない。テーブル化で解決
- 空白行を飛ばしたいならROWではなくCOUNTA
- 縞模様は
=MOD(ROW(),2)=0。判定はシートの行番号なので見出し分をずらす
※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

