ExcelのROW関数の使い方|行の増減に強い連番と5つの実務パターン

スポンサーリンク

Excelで連番を手入力していて、行を挿入したら番号がズレた経験ありませんか? 1つ2つならすぐ直せますが、100行を超えるリストだと修正漏れが出てきますよね。そんな悩みを解決するのが、ExcelのROW関数です。

この記事では、ROW関数の基本から崩れない連番の作り方まで解説します。INDEX・SMALL・INDIRECTとの組み合わせなど、実務で使える5つのパターンを紹介します。

ROW関数とは?基本の使い方をおさらい

ROW関数(読み:ロウ)は、セルの行番号を数値で返す関数です。1行目なら1、2行目なら2、10行目なら10を返します。名前のとおり「行(Row)」の番号を取得する、シンプルな関数です。

構文はこちらです。

=ROW([参照])

引数は1つだけで、しかも省略もできます。

引数必須/省略可説明
参照省略可行番号を知りたいセルまたは範囲

それでは、具体的な使い方を見ていきましょう。

引数なし:入力セル自身の行番号を返す

引数を省略すると、数式を入力したセル自身の行番号を返します。

=ROW()

たとえば、A3セルにこの数式を入れると「3」が返ります。A5なら「5」、A10なら「10」です。「いま自分がどの行にいるか」を取得したいときに便利ですよ。

引数あり:任意のセルの行番号を取得する

引数にセル参照を指定すると、そのセルの行番号を返します。

=ROW(A1)    → 1
=ROW(D10)   → 10
=ROW(G5)    → 5

範囲を指定した場合は、先頭の行番号を返します。たとえば =ROW(A1:A5) は「1」です。Microsoft 365環境では、スピルで {1;2;3;4;5} と複数の行番号を返します。

COLUMN関数との対称パターン表(行と列の整理)

ROW関数には、列番号を返すCOLUMN関数という対になる関数があります。この2つは完全に対称です。

比較項目ROW()COLUMN()
返す値行番号(縦方向)列番号(横方向)
省略時数式セルの行番号数式セルの列番号
連番の方向下にコピーで増える右にコピーで増える
典型パターン=ROW()-ROW($A$1)=COLUMN()-COLUMN($A$1)

COLUMN関数で横方向の連番を振った経験があれば、ROW関数はその縦方向バージョンだと考えてください。

崩れない連番|行の増減に強い自動ナンバリング

ROW関数が最も活躍するのは、縦方向の連番を自動生成する場面です。手入力の連番は、行の追加・削除であっさり壊れます。

手入力の連番が壊れる場面(行挿入・削除のあるある)

連番を「1, 2, 3, 4…」と手入力していると、こんな問題が起きます。

  • 途中に行を挿入すると、番号が飛ぶ
  • 行を削除すると、番号が欠番になる
  • 並べ替えをすると、連番がバラバラになる

10行程度ならすぐ振り直せます。でも数百行のリストだと、修正漏れが確実に発生しますよね。

ROW()-Nで1から始める思考ステップ

ROW関数を使えば、連番が自動で更新されます。考え方は次の3ステップです。

  1. ROW() で数式セルの行番号を取得する
  2. 見出し行の行数を引いて、1から始まるように調整する
  3. 下にコピーすれば自動で2, 3, 4…と増える

たとえば、1行目が見出しでA2セルからデータが始まる場合はこうなります。

=ROW()-1

A2セルでは ROW() が2を返します。2 – 1 = 1です。A3なら3 – 1 = 2、A4なら4 – 1 = 3と、自動で連番になりますよ。

ROW()-ROW(見出しセル)で開始行フリーにする

=ROW()-1 には弱点があります。データの開始行が2行目以外だと、引く数を変えなければなりません。見出しが2行あれば =ROW()-2、5行目から始まるなら =ROW()-4 と、毎回計算が必要です。

そこで、汎用的なのがこの書き方です。

=ROW()-ROW($A$1)

$A$1 は見出し行(連番の1つ上の行)を絶対参照で指定しています。データが何行目から始まっても、見出しセルを変えるだけで正しい連番になります。

見出しが2行ある場合は、参照を $A$2 にするだけです。

=ROW()-ROW($A$2)

A3セルに入力すると、3 – 2 = 1。A4なら4 – 2 = 2と、正しく連番が振られます。開始行を気にしなくてよいので、テンプレートの使い回しにも向いていますよ。

M365スピル対応:SEQUENCE関数との比較

Microsoft 365をお使いなら、SEQUENCE関数でも縦方向の連番を生成できます。

目的ROW()(※M365)SEQUENCE()
1から10の連番=ROW(A1:A10) → {1;2;…;10}=SEQUENCE(10)
100から始まる連番計算が必要=SEQUENCE(10,1,100)
偶数だけの連番直接指定できない=SEQUENCE(5,1,2,2)
全バージョンで動作ROW()-N なら全対応Excel 2021以降のみ

※ ROW()のスピル展開はMicrosoft 365(またはExcel 2021以降)のみ対応です。

連番を振ることが目的で、開始値や増分を自由に設定したいならSEQUENCE関数が便利です。一方、すべてのExcelバージョンで動作する連番が必要な場面では、ROW関数が安定した選択肢になります。

INDEX + ROW|行番号を動的に切り替える

INDEX関数の行引数にROW関数を使うと、行番号を動的に変えられます。

基本形:行番号をキーにした縦展開

INDEX関数の基本形はこちらです。

=INDEX(範囲, 行番号, [列番号])

この「行番号」の部分にROW関数を組み込むと、数式をコピーするだけで参照行が自動で変わります。

実際の数式:複数行を一括取得するサンプル

たとえば、B列からE列のデータ表があり、別の場所に縦方向に展開したい場合です。

=INDEX($B$2:$B$20, ROW()-ROW($A$1))

この数式をA2セルに入力すると、ROW()-ROW($A$1) は 2-1 = 1で、範囲の1行目を返します。A3にコピーすれば2行目、A4なら3行目と、順番にデータを取得できます。

MATCH関数と組み合わせれば、検索値に一致した行を柔軟に取得できますよ。

=INDEX($B$2:$E$20, MATCH($A2,$B$2:$B$20,0), COLUMN()-COLUMN($G$1))

この数式をH列以降に横にコピーすると、列番号が自動で変わります。INDEX + MATCH + COLUMNの3関数で、縦横どちらにも展開できる柔軟な数式になります。

SMALL + IF + ROW|条件付きデータ抽出の配列数式

ROW関数は、配列数式の中で行番号の配列を生成する役割も担います。レガシーExcel(Excel 2019以前)で条件に合うデータを順番に抽出する定番テクニックです。

ROWが行番号配列を生成する役割

次の配列数式は、A列が「東京」の行のB列の値を上から順に取り出します。

=IFERROR(INDEX($B$2:$B$20, SMALL(IF($A$2:$A$20="東京", ROW($A$2:$A$20)-ROW($A$2)+1), ROW()-1)), "")

※ Excel 2019以前では Ctrl + Shift + Enter で確定する必要があります。

ちょっとむずかしく見えますが、やっていることはシンプルです。

  1. ROW($A$2:$A$20)-ROW($A$2)+1 で1から始まる連番配列を生成
  2. IF関数で条件に合う行だけ番号を残し、それ以外はFALSEにする
  3. SMALL関数で小さい順に番号を取り出す
  4. INDEX関数でその番号の行のデータを返す

ROW関数が「行番号の配列を作る」という裏方の仕事を担っているわけです。IFERROR関数で該当データがなくなったときの #NUM! エラーを空文字に変換しています。

M365ではFILTER関数に置き換え

Microsoft 365をお使いなら、上記の配列数式はFILTER関数1つで置き換えられます。

=FILTER($B$2:$B$20, $A$2:$A$20="東京")

SMALL + IF + ROWの配列数式に比べて、圧倒的にシンプルですよね。M365環境であれば、新しく数式を書くときはFILTER関数を使うのがおすすめです。

ただし、既存のブックがExcel 2019以前で運用されている場合は、ROW関数を使った配列数式が現役で活躍します。

INDIRECT + ROWで動的セル参照

INDIRECT関数と組み合わせると、行番号から動的にセル参照を生成できます。

たとえば、ROW関数で行番号を取得し、ADDRESS関数でセル参照文字列に変換します。その参照文字列をINDIRECTで実際のセル参照に変えるパターンです。

=INDIRECT(ADDRESS(ROW()-1, COLUMN(), 4))

3つの関数を重ねていますが、処理の流れはシンプルです。ROW関数で行番号を取得し、ADDRESS関数でセル参照文字列(例: “A2″)に変換します。INDIRECTで、その文字列を実際のセル参照にしています。A3セルに入力した場合、「1行上のセル=A2」の値を返します。

もう1つの定番が、位置に依存しない固定配列を生成するパターンです。

=ROW(INDIRECT("1:10"))

この数式は、どのセルに入力しても {1;2;3;4;5;6;7;8;9;10} の配列を返します。セルの位置に左右されない点が、SMALL + IF の配列数式で重宝されるポイントです。

FILTER・SEQUENCEでROW関数が不要になるケース

Microsoft 365や Excel 2021以降では、ROW関数が担っていた役割の多くを新しい関数で代替できます。

ROW関数が担っていた役割と現代的な代替

ROW関数の用途代替関数メリット
連番の自動生成SEQUENCE開始値・増分を引数で指定できる
条件付きデータ抽出FILTER配列数式が不要でシンプル
行番号配列の生成SEQUENCEROW(INDIRECT(…)) より直感的

新しく数式を書くときは、SEQUENCE・FILTERを優先した方が読みやすい数式になります。

それでもROW関数が必要な場面

新しい関数を使っていても、ROW関数の出番がなくなるわけではありません。

  • Excel 2019以前の環境で連番や配列数式を使いたいとき
  • 条件付き書式で「行番号が偶数なら色を付ける」判定をしたいとき
  • 数式セル自身の位置を取得して、動的に処理を分岐させたいとき
  • VBAやマクロに行番号を渡したいとき

新しい関数で連番や抽出を処理しつつ、行番号の取得が必要な場面ではROW関数を使う。この使い分けがポイントですよ。

ROW関数 よくある質問・エラー対処

#VALUE!・#REF!が出たときの確認ポイント

ROW関数でエラーが出るケースは多くありません。ただし、次の場面では注意が必要です。

エラー原因対処法
#VALUE!引数にテキスト文字列を指定したセル参照に修正する
#REF!参照先の行が削除された数式を再入力する

=ROW(“A1”) のようにダブルクォーテーションで囲むと、文字列として扱われ #VALUE! エラーになります。正しくは =ROW(A1) です。引用符なしのセル参照を使ってください。

また、非連続範囲(例:=ROW((A1,A5)))は指定できません。連続した範囲で指定するようにしましょう。

ROWS関数との違いは?

名前が似ているROWS関数は、まったく別の関数です。

関数機能
ROW指定セルの行番号を返す=ROW(A3) → 3
ROWS範囲の行数を返す=ROWS(A1:A3) → 3

ROW関数は「位置」を返し、ROWS関数は「個数」を返します。末尾にSが付くかどうかで意味が変わるので、混同しないように気をつけてくださいね。

同じ関係がCOLUMN関数とCOLUMNS関数にもあります。

まとめ

ROW関数は、セルの行番号を返すシンプルな関数です。単体ではあまり目立ちませんが、他の関数と組み合わせることで真価を発揮します。

この記事で紹介した活用パターンをおさらいします。

  • ROW()-ROW(見出しセル) で行の増減に強い連番を作る
  • INDEX + ROWで行番号を動的に切り替えて縦展開する
  • SMALL + IF + ROWで条件付きデータを順番に抽出する(レガシー環境向け)
  • INDIRECT + ROWで位置に依存しない固定配列を生成する
  • M365ではSEQUENCE・FILTERが代替になるが、行番号の取得にはROWが現役

まずは手入力の連番を =ROW()-ROW($A$1) に置き換えるところから試してみてください。行を挿入しても連番が崩れないので、リストのメンテナンスがぐっと楽になりますよ。

タイトルとURLをコピーしました