「この表って何行あるんだろう?」と数えたくなること、ありますよね。手動で数えると行数が多いときにミスしがちです。データが増減するたびに数え直すのも面倒です。ROWS関数を使えば、セル範囲の行数を一発で自動カウントできますよ。
しかも、単に行数を数えるだけではありません。HLOOKUP・INDEX・OFFSETと組み合わせれば、行番号の自動採番やデータ範囲の動的制御まで実現できます。地味だけれど縁の下の力持ちです。この記事では、ROWS関数の基本構文から実務で頻出する組み合わせパターン、ROW関数・COLUMNS関数との違い、よくあるエラー対処、FAQまでまとめて紹介します。
ExcelのROWS関数とは?
読み方と名前の由来
ROWS関数の読み方は「ロウズ」です。英語の「ROW(行)」の複数形で、行がいくつあるかを意味します。複数形の「S」が付くことで、「位置」を返すROW関数とは別物だと意識できますよ。
ROWS関数でできること
ROWS関数は、指定したセル範囲の行数を数値で返す関数です。たとえば =ROWS(A1:A5) と入力すると、結果は 5 になります。A1からA5まで5行分あるからですね。
列の範囲がどれだけ広くても、行数だけを数える点がポイントです。=ROWS(A1:Z5) と書いても結果は同じく 5 ですし、=ROWS(A1:A100) なら 100 を返します。シンプルですが「範囲のサイズを数値化できる」という性質が、他の関数と組み合わせたときに威力を発揮します。
NOTE
ROWS関数はExcel 2007以降のすべてのバージョンで使用できます。Microsoft 365・Excel 2021・Googleスプレッドシートでも同じ構文で動作するので、環境を問わず安心して使えますよ。
ROWS関数の書式と引数
基本構文
=ROWS(配列)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 配列 | 必須 | 行数を調べたいセル範囲や配列を指定します。セル参照、名前付き範囲、配列定数のいずれも使えます |
引数は1つだけなので、覚えやすい関数です。ただし、ROW関数と違って引数の省略はできません。=ROWS() と書くと「この関数に対して、少なすぎる引数が入力されています」というエラーが返るので注意してください。
引数に指定できるのは以下のいずれかです。
- セル範囲(例:
A1:A10) - 単一セル(例:
B5) - 名前付き範囲(例:
売上データ) - テーブル名(例:
テーブル1[売上]) - 配列定数(例:
{1;2;3}) - 他の関数が返す範囲(例:
OFFSET(A1,0,0,5,1))
ROWS関数の基本的な使い方
まずは基本パターンから順番に見ていきましょう。
セル範囲の行数を調べる
=ROWS(A1:A10)
A1からA10までの行数 10 を返します。列方向にどれだけ広がっていても結果は同じです。=ROWS(A1:G10) でも 10 ですし、=ROWS(A5:Z14) でも 10 です。「どこから始まる範囲か」ではなく「縦方向の行数」だけが結果に反映されます。
単一セルの行数を調べる
=ROWS(B5)
単一セルは1行分なので、結果は 1 です。実務で単体で使う場面は少ないですが、数式の仕組みを理解するための基本として押さえておきましょう。
名前付き範囲の行数を調べる
=ROWS(売上データ)
名前の定義で「売上データ」と名付けた範囲の行数を返します。テーブルやデータ範囲に名前を付けている場合は、セル参照を書くよりわかりやすくなりますよ。「数式」タブの「名前の管理」から定義済みの名前を一覧確認できます。
テーブル名の行数を調べる
=ROWS(テーブル1)
=ROWS(テーブル1[売上])
Ctrl + T で作成したテーブルなら、テーブル名や列名を指定して行数を取得できます。データを追加すると自動で行数が増えるので、動的なデータ集計に向いていますよ。見出し行はカウントされず、データ部分の行数だけが返るのもポイントです。
見出し行も含めたい場合は テーブル1[#すべて] と書きます。
配列定数の行数を調べる
=ROWS({1,2,3;4,5,6;7,8,9})
配列定数の行数 3 を返します。セミコロン(;)で区切られたブロックが行に対応します。カンマ(,)は列の区切りなので、{1,2,3} は1行3列、{1;2;3} は3行1列という違いを覚えておきましょう。
ROWS関数の実務活用パターン
ここからが本番です。ROWS関数の真価は「他の関数と組み合わせる」ところにあります。実務でよく使う7つのパターンを紹介します。
パターン1: HLOOKUP関数と組み合わせて行番号を自動化
横方向の検索テーブルでHLOOKUP関数を使うとき、行番号を手入力していませんか? ROWS関数を組み合わせると、オートフィルで行番号が自動的にずれてくれます。
=HLOOKUP(B$8,$A$1:$G$5,ROWS($A$1:A1),FALSE)
この数式を下方向にコピーすると、ROWS関数の部分が ROWS($A$1:A2)、ROWS($A$1:A3)… と変化します。行番号が 1、2、3… と自動で増えていくので、手入力の手間がなくなります。複数行の検索結果をまとめて取り出したいときに便利な定番テクニックです。
TIP
同じテクニックはVLOOKUP関数でも使えます。VLOOKUPの列番号を自動化したい場合は、対になるCOLUMNS関数を使ってください。
パターン2: INDEX関数と組み合わせて最終行のデータを取得
データ範囲の最後の値を取り出したいときに便利なパターンです。
=INDEX(A2:A100,ROWS(A2:A100))
ROWS関数で範囲の行数を取得し、INDEX関数の行番号に渡しています。範囲が99行あるので、99行目(つまり最後の行)のデータを返します。
データが途中までしか入っていない場合は、COUNTA関数と組み合わせるとさらに正確です。
=INDEX(A2:A100,COUNTA(A2:A100))
ROWSは「範囲のサイズ」、COUNTAは「データが入っているセルの数」を返します。空白セルが混ざる可能性があるかどうかで使い分けましょう。
パターン3: OFFSET関数と組み合わせて可変範囲を作る
OFFSET関数の「高さ」引数にROWS関数を使うと、範囲のサイズを動的に制御できます。
=OFFSET(A1,0,0,ROWS(データ範囲),1)
名前付き範囲「データ範囲」の行数に応じて、OFFSET関数が返す範囲の高さが変わります。グラフの参照範囲やドロップダウンリストの元データを可変にしたいときに活躍するパターンです。
たとえばグラフの参照範囲を「名前の定義」で以下のように設定すると、データが増減してもグラフが自動的に追従します。
=OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
このパターンは「動的グラフ範囲」と呼ばれます。月次レポートや日次集計を運用する現場で重宝しますよ。詳しくはOFFSET関数の解説記事も参考にしてください。
パターン4: INDIRECT関数と組み合わせて動的な範囲サイズを取得
文字列で組み立てた範囲の行数を調べたいときに使えます。
=ROWS(INDIRECT("A1:A"&B1))
セルB1に入力された数値に応じて範囲のサイズが変わります。B1が 20 なら =ROWS(A1:A20) と同じ結果です。ユーザーが行数を入力して範囲を制御する仕組みを作りたいときに便利ですよ。
シート名を可変にした参照にも応用できます。
=ROWS(INDIRECT("'"&A1&"'!B2:B100"))
A1セルに「2026年4月」のようなシート名を入れておくと、対応するシートのB2:B100の行数を返します。月別に分かれたシートを横断して件数を集計するときに便利です。
パターン5: データ件数の検証に使う
想定どおりのデータ件数があるかチェックする数式です。
=IF(ROWS(データ範囲)=COUNTA(データ範囲),"OK","空白セルあり")
ROWS関数で範囲の行数を調べ、COUNTA関数でデータが入っているセルの数を比較しています。空白行が混ざっていると数が合わなくなるので、データの欠損チェックに使えますよ。
入力フォームや取り込みデータの整合性確認に向いているパターンです。「100行あるはずなのに件数が合わない」というトラブルを早期に発見できます。
パターン6: SEQUENCE関数の代わりに連番を作る(古いバージョン向け)
Microsoft 365より前のバージョンではSEQUENCE関数が使えません。ROWSとオートフィルを組み合わせれば連番を作れます。
=ROWS($A$1:A1)
A2セルにこの数式を入れて下方向にコピーすると、ROWS関数の範囲が $A$1:A1、$A$1:A2、$A$1:A3 と広がっていきます。結果が 1、2、3… となる仕組みです。行を挿入・削除しても番号が自動で振り直されるので、ROW関数より安定した連番が作れますよ。
パターン7: 配列数式のサイズを可変にする
SUMPRODUCT関数や配列数式で範囲サイズを動的に決めたいときに役立ちます。
=SUMPRODUCT((A1:INDEX(A:A,ROWS(売上データ)))*1)
ROWS関数で「売上データ」の行数を取得し、INDEX関数で範囲の終端を決めています。データが増えてもそのまま使える式が組めますよ。データ量に応じて自動でスケールするレポートを作るときに便利なテクニックです。
ROW関数とROWS関数の違い
ROWS関数とROW関数は名前が1文字違うだけなので混同しがちです。役割はまったく別物なので、ここで整理しておきましょう。
| 関数 | 戻り値 | 引数 | イメージ |
|---|---|---|---|
| ROWS | 行数(個数) | 範囲必須 | 「物差しの長さ」を測る |
| ROW | 行番号(位置) | 省略可 | 「現在地の番地」を返す |
具体例で比較してみましょう。
=ROW(A3) → 3 (A3は3行目にあるので「3」)
=ROW(A5:A10) → 5 (範囲の先頭A5の行番号)
=ROW() → 数式が入っているセルの行番号
=ROWS(A3) → 1 (A3は1行分なので「1」)
=ROWS(A5:A10) → 6 (A5からA10まで6行分ある)
=ROWS() → エラー(引数省略不可)
ポイントは「複数形のROWSは複数の行を数える」「単数形のROWは1つのセルの位置を返す」と覚えることです。
実務での使い分けは、ざっくり以下のように分かれます。
- セルが何行目にあるか知りたい → ROW関数
- 範囲に何行分のデータがあるか知りたい → ROWS関数
- オートフィルで連番を作りたい → どちらでも可(ROWSのほうが行挿入に強い)
COLUMNS関数との違い
ROWSと対称ペアになるのがCOLUMNS関数です。両者は方向が違うだけで、構文も使い方もそっくりですよ。
| 関数 | 数えるもの | 例 | 結果 |
|---|---|---|---|
| ROWS | 行数(縦方向) | =ROWS(A1:A10) | 10 |
| COLUMNS | 列数(横方向) | =COLUMNS(A1:J1) | 10 |
組み合わせて使えば、範囲のセル総数も計算できます。
=ROWS(A1:E10)*COLUMNS(A1:E10)
10行 × 5列で 50 が返ります。範囲のサイズ感を数値化したいときに便利です。
なお、ROWS・COLUMNSの兄弟関数として、位置を返すROW・COLUMNがあります。4つの関係をまとめると以下のとおりです。
「単数形 = 位置」「複数形 = サイズ」「ROW系 = 縦」「COLUMN系 = 横」という4象限で覚えておくと、必要なときに迷わず選べますよ。
よくあるエラーと対処法
ROWS関数で実務でつまずきやすいパターンと対処法をまとめました。
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| 「少なすぎる引数」エラー | =ROWS() と引数を省略した | ROWS関数は引数が必須です。行数を調べたい範囲を必ず指定してください |
#REF! | 参照していたセルや範囲が削除された | 参照先が存在するか確認してください。シートを削除した場合も発生します |
#NAME? | 名前付き範囲のスペルミス、関数名のtypo | 「数式」タブの「名前の管理」から定義済みの名前を確認してください。=ROW( と書いていないか(複数形のSが抜けていないか)も要チェック |
| 期待と違う数値が返る | 行数ではなく行番号を求めていた | 行番号がほしい場合はROW関数を使ってください |
1 しか返らない | 単一セルを引数にしていた | 範囲を A1:A10 のようにコロンで指定してください |
| テーブルで思ったより少ない | テーブル名指定では見出し行が含まれない | 見出し行も含めたい場合は テーブル1[#すべて] を使ってください |
| シートを統合したら値がずれた | INDIRECT組み合わせ時にシート名にスペースや日本語が含まれる | シート名はシングルクォートで囲んでください: "'シート名'!A1:A10" |
トラブルが起きたら、まずはROWS関数単体で =ROWS(範囲) と書いて期待通りの行数が返ってくるか確認するのが鉄則です。組み合わせ式の中で問題が起きていることが多いので、切り分けが大切ですよ。
よくある質問(FAQ)
Q1. ROWS関数とROW関数はどう使い分ければよいですか?
A. 範囲の「サイズ(何行あるか)」を知りたいときはROWS関数、特定のセルの「位置(何行目か)」を知りたいときはROW関数を使います。たとえば「データが20行ある」を知りたいときは =ROWS(A1:A20)、「セルA5は5行目にある」を知りたいときは =ROW(A5) です。複数形のSが付いているかどうかで判断すると覚えやすいですよ。
Q2. ROWS関数で引数を省略するとどうなりますか?
A. ROW関数と違って、ROWS関数の引数は省略できません。=ROWS() と書くと「この関数に対して、少なすぎる引数が入力されています」というエラーが返ります。必ず行数を数えたい範囲を指定してください。
Q3. テーブルで見出し行も含めて行数を数えたいのですが?
A. デフォルトのテーブル名指定(=ROWS(テーブル1))では見出し行はカウントされません。見出し行も含めたい場合は =ROWS(テーブル1[#すべて]) と指定してください。逆に集計行も除いたデータ部分だけが欲しい場合は、そのまま テーブル1 を指定すれば大丈夫です。
Q4. ROWS関数で行を追加・削除しても自動で更新されますか?
A. 名前付き範囲やテーブル名を引数にしている場合は、自動で更新されます。一方、A1:A10 のような固定セル参照を引数にしている場合は、範囲外への追加分はカウントされません。データが増減する可能性があるなら、テーブル化(Ctrl + T)または名前付き範囲の利用がおすすめです。
Q5. SEQUENCE関数とROWS関数のどちらで連番を作るのがよいですか?
A. Microsoft 365やExcel 2021以降を使っているなら、=SEQUENCE(10) のように一発で連番を作れるSEQUENCE関数がシンプルです。一方、Excel 2019以前など古いバージョンと互換性を持たせたい場合は、=ROWS($A$1:A1) のROWS関数版が役立ちます。SEQUENCEはスピル動作、ROWSはオートフィルが必要という違いも意識しておきましょう。
Q6. Googleスプレッドシートでも同じように使えますか?
A. 使えます。Googleスプレッドシートでも =ROWS(A1:A10) と書けば同じ結果が返ります。INDEX・OFFSET・INDIRECTとの組み合わせも基本的に同じ動作をするので、Excelで覚えたパターンをそのまま流用できますよ。
まとめ
ROWS関数はセル範囲の行数を取得するシンプルな関数です。他の関数と組み合わせることで、行番号の自動化やデータ範囲の動的制御まで幅広く活用できます。
ポイントをおさらいすると、
- 構文は
=ROWS(配列)で引数は1つだけ(省略不可) - ROW関数が「位置」、ROWS関数が「サイズ」を返す
- HLOOKUP・INDEX・OFFSET・INDIRECT などとの組み合わせが実務で便利
- 動的グラフ範囲・データ件数検証・連番採番などに応用できる
- 対称ペアのCOLUMNS関数もあわせて覚えておくと効果的
「行数を数える」だけの地味な関数に見えて、可変範囲を扱う数式の屋台骨になる関数です。HLOOKUP や OFFSET を多用する現場では特に出番が多いので、構文と組み合わせパターンを引き出しに入れておきましょう。
