概要
ROWSは「範囲に含まれる行の“個数”」を返す関数です。例えばA2:A10なら9、B2:D5なら4。行番号を返すROWとは役割が異なり、「何行あるか」を知りたいときに使います。縦方向の連番生成、最後の行位置の算出、スピル(動的配列)の縦幅取得、入力検証などで役立ちます。
基本の使い方
書式
=ROWS(範囲)
範囲に含まれる行数を返します。セル1つなら1、A2:A10なら9です。
例
=ROWS(A1) // 1
=ROWS(A2:A10) // 9
=ROWS(B2:D5) // 4
=ROWS(A2:A2#) // スピル範囲の縦幅(Microsoft 365)
具体例
範囲の縦幅を取得して可変ロジックに
=ROWS(A2:A100)
データ件数を自動で数え、レポートや集計の繰り返し処理を動的に設計できます。
最後の行インデックス(相対位置)を求める
開始行が2行目で範囲A2:A10なら、最後の行までの相対位置は9。
=ROWS(A2:A10) // 9
あるいは行番号の差から求める場合:
=ROW(A10)-ROW(A2)+1 // 9
スピル(動的配列)の縦幅を取得
動的に出力される範囲の行数を取りたいときは、スピル参照「#」が便利です。
=ROWS(D2#)
D2からスピルした配列の“現在の縦幅”を返します。
応用テンプレート
縦方向に1,2,3…を自動生成(範囲高さに合わせる)
開始セルH2に、指定範囲の行数だけ連番を出したい例(Microsoft 365):
=SEQUENCE(ROWS(A2:A10))
1列・“行数ぶん”の連番が縦に展開します。
INDEXで“最後の行”を可変取得
範囲の最後の行をINDEXで抜き出す(列はn、行は最後):
=INDEX($A$2:$A$20, ROWS($A$2:$A$20))
行数を行引数として渡すことで、範囲の下端を常に参照します。
TAKE関数と組み合わせて下端を切り出す
Microsoft 365で範囲の最後の行だけ取り出す:
=TAKE($A$2:$A$20, ROWS($A$2:$A$20))
入力検証:範囲が“十分な行数”か判定
最低5行必要な設定のチェック:
=IF(ROWS($A$2:$A$20)>=5, "OK", "行が不足")
よくあるつまずきと対策
行“番号”と行“個数”の取り違え
- 行番号が欲しい→ROW
- 行の個数が欲しい→ROWS
役割が違います。設計時に混同しないように。
非連続範囲の行数を数えたい
カンマで分けた非連続参照はうまく数えられません。必要なら行ごとにROWSを合算します。
=ROWS(A2:A10)+ROWS(C2:C5)
データの有無は関係ない
ROWSは「範囲の高さ」を返すだけで、セルの中身は見ません。データ件数を数えたいならCOUNTAやBYROWと組み合わせます(Microsoft 365)。
=SUM(--(BYROW(A2:A20, LAMBDA(r, COUNTA(r)>0))))
スピル参照が使えない環境
A2# のようなスピル参照はMicrosoft 365専用です。従来版では固定範囲を渡すか、配列数式を使用します。
例題
問題1: 範囲A2:A10の行数をB2に表示してください。
解答例:
=ROWS(A2:A10)
問題2: 単一セルC5の行数(常に1)をD2に表示してください。
解答例:
=ROWS(C5)
問題3: スピル出力E2#の“縦幅”をF2に表示してください(Microsoft 365)。
解答例:
=ROWS(E2#)
問題4: 範囲A2:A20の“最後の行”をINDEXで取り、G2に表示してください(列番号は1)。
解答例:
=INDEX($A$2:$A$20, ROWS($A$2:$A$20), 1)
問題5: 範囲B2:B20が5行以上あるとき「OK」、未満なら「行が不足」とH2に表示してください。
解答例:
=IF(ROWS(B2:B20)>=5, "OK", "行が不足")
まとめ
ROWSは「範囲の縦幅(行数)」を返すシンプルな関数で、可変参照、最後の行取得、スピル高さ判定、入力検証に向いています。行番号ならROW、列数ならCOLUMNSと使い分けるのがポイント。非連続範囲は合算で対処し、Microsoft 365ではスピル参照(#)を活用すると柔軟なテンプレートが組めます。用途に合わせて“高さ”を軸にした設計に落とすと、縦コピーや行追加に強いシートになります。
