Excel関数で行番号を返す方法をお探しですね。

広告

ExcelのROW関数・COLUMN関数を使いこなそう!行番号・列番号を活用した便利テク

Excelで表を作っていると、「このデータって何行目だっけ?」「今見ている列は何列目?」「データが増えても自動で最後まで集計したい!」なんて思うこと、ありますよね。

そんなときに役立つのが**ROW関数**と**COLUMN関数**です。

この2つは、セルの位置を数字で教えてくれるシンプルな関数なんですが、INDEX関数やMATCH関数と組み合わせると、行や列を追加しても壊れない、とっても便利な数式が作れるんです。

この記事では、ROW・COLUMN関数の基本的な使い方から、連番の作り方、列番号の取得方法、INDEX関数との合わせ技、そして最終行を自動で見つける実務テクニックまで、わかりやすく解説していきます!

ROW関数・COLUMN関数って何?行番号・列番号を教えてくれる便利な関数

**ROW関数**は、指定したセルが何行目にあるかを教えてくれる関数です。

例えば「=ROW(A5)」と入力すると、A5セルは5行目なので「5」という答えが返ってきます。

何も指定せず「=ROW()」と入力すると、その数式を入力したセル自身の行番号を教えてくれます。

「今、何行目にいるのか」を数式の中で使いたいときや、行を増やしたり削ったりしても自動で変わる連番を作りたいときに、とっても便利なんです。

**COLUMN関数**は、指定したセルが何列目にあるかを教えてくれる関数です。

A列なら1、B列なら2、C列なら3というように、列の位置を数字で取得できます。

例えば「=COLUMN(C1)」なら「3」が返ってきます。

こちらも何も指定せず「=COLUMN()」とすれば、数式を入力したセルの列番号がわかります。

ROW関数が縦方向の位置を扱うのに対して、COLUMN関数は横方向の位置を扱う関数だと考えると、わかりやすいですね。

基本の書き方はとってもシンプルです。

ROW関数は「**=ROW([参照])**」、COLUMN関数は「**=COLUMN([参照])**」と書きます。

[参照]の部分は省略できて、セル範囲を指定した場合は、基本的にその範囲の左上セルの行番号または列番号が返されます。

Microsoft 365などの新しいExcelでは、範囲指定すると複数の結果が一気に表示される「スピル」という機能が働くこともあるので、1つの値だけが欲しいときは、セルをはっきり指定しておくと安心です。

ROW関数で連番を自動で作る方法と気をつけたいポイント

ROW関数の代表的な使い道は、**表の連番作り**です。

例えばA2セルから下に「1、2、3……」と番号を振りたいとき、A2セルに「**=ROW()-1**」と入力して、下にコピーしていきます。

A2セルは2行目なので、2から1を引いて「1」になります。

A3セルでは「=ROW()-1」が「3-1」になって「2」が返るので、コピーするだけで連番がずらっと続いていきます。

手で番号を入力するのと違って、途中に行を追加しても式が自動で計算し直されるので、管理表や一覧表で使いやすいんです。

表の開始行が変わる場合は、「今の行番号から、連番を始める直前の行番号を引く」と考えると応用しやすくなります。

例えば見出しが5行目にあって、データが6行目から始まる表なら、6行目に「**=ROW()-5**」と入力すれば、最初のデータ行に「1」が表示されます。

また、開始番号を1001など好きな番号にしたいときは、「**=ROW()-5+1000**」のように足し算すれば、6行目から1001、1002、1003……と続く番号が作れます。

ただし、ROW関数の連番には**注意点**もあります。

ROW関数はあくまでワークシート上の行番号をもとに計算するので、フィルターで一部の行を非表示にしても、見えている行だけを詰めた連番にはなりません。

フィルター後に表示されている行だけで連番を振り直したい場合は、SUBTOTAL関数やAGGREGATE関数など、非表示行を考慮できる関数を使う必要があります。

普通の一覧表ならROW関数で十分ですが、「表示されている行だけを数えたいのか」「シート上の位置に応じて番号を出したいのか」を分けて考えることが大切です。

COLUMN関数を使って列番号を自動で取得する活用テク

COLUMN関数は、**横方向にコピーする数式**ととっても相性がいい関数です。

例えば、別の表から1列目、2列目、3列目のデータを順番に取り出したいとき、列番号を手入力で「1」「2」「3」と変えていくのは面倒ですよね。

そこで「**=COLUMN(A1)**」を使うと、A1では1、右へコピーして「=COLUMN(B1)」になれば2、さらに右では3が返ります。

これで、横方向へコピーするだけで参照する列番号を自動的に変えられるんです。

**INDEX関数と組み合わせる**と、COLUMN関数の便利さがもっとよくわかります。

例えば、A2:D10に商品一覧があって、別の場所に同じ内容を横方向へ取り出したい場合、「**=INDEX($A$2:$D$10,1,COLUMN(A1))**」のように書くと、最初は範囲内の1行目・1列目の値を返します。

この式を右へコピーするとCOLUMN(A1)がCOLUMN(B1)、COLUMN(C1)と変わっていくので、INDEX関数の列番号も2、3と変化します。

列番号を手で修正しなくていいので、転記表やレポート作成でミスを減らせます。

**VLOOKUP関数**でもCOLUMN関数はよく使われます。

例えば検索範囲の左から3列目を取り出す場合、普通は第3引数に「3」と入力しますが、横にコピーして複数の項目を取り出す表では「**COLUMN(C1)**」のように列番号を返す式を入れると、コピー先に応じて取得列を変えられます。

ただし、VLOOKUP関数の第3引数は「検索範囲の中で左から何列目か」を指定するもので、シート全体の列番号とは意味が違います。

検索範囲がB列から始まる場合、COLUMN(C1)の「3」が本当に範囲内の3列目を指しているか確認することが大事です。

INDEX関数などと組み合わせて最終行を自動で見つける

ROW関数とINDEX関数を実務で活用するなら、**最終行の自動取得**はぜひ覚えておきたい使い方です。

毎月データが追加される売上表や在庫表では、集計範囲を「A2:A100」のように固定すると、データが100行を超えたときに集計漏れが起きてしまいます。

かといって列全体を参照すると処理が重くなることもあります。

そこで、最終行を数式で求めて、その行までをINDEX関数で範囲化すると、データ量が変わっても大丈夫な数式が作れるんです。

A列の最終データ行の行番号を取得したい場合、よく使われる式の1つが「**=LOOKUP(2,1/(A:A<>“”),ROW(A:A))**」です。

この式は、A列で空白じゃないセルを調べて、その中で最後に見つかった行番号を返してくれます。

例えばA列の最後の入力セルがA250なら「250」が返ってきます。

COUNTA関数を使って「=COUNTA(A:A)」で件数を数える方法もありますが、途中に空白行がある表や見出しを含む表では、実際の最終行とずれることがあります。

最終行の位置を知りたい場合は、件数じゃなくて「最後に値がある行番号」を取得する考え方が安全です。

取得した最終行は、**INDEX関数で動的範囲を作る**ときに役立ちます。

例えばA2からA列の最終データ行までをSUM関数で合計したい場合は、「**=SUM(A2:INDEX(A:A,LOOKUP(2,1/(A:A<>“”),ROW(A:A))))**」のように書けます。

INDEX(A:A,最終行番号)がA列の最後のデータセルを返すので、A2からそのセルまでが自動的に集計範囲になります。

データを追加するとLOOKUPで求める最終行も変わるので、数式を修正せずに最新データまで集計できるんです。

最終行の「値」そのものを取り出したい場合は、もっとシンプルに「**=INDEX(A:A,LOOKUP(2,1/(A:A<>“”),ROW(A:A)))**」と書けます。

これは、A列で最後に入力されているセルの値を返す式です。

最終更新日、最新の売上、直近の在庫数などを別シートのダッシュボードに表示したいときに便利です。

ただし、数式で空文字「””」を返しているセルは見た目が空白でも完全な空白とは扱いが違う場合があります。

データの作り方によっては、対象列を限定したり、条件を調整したりして、意図した最終行を拾えているか確認してくださいね。

まとめ

ROW関数とCOLUMN関数は単体では地味に見える関数ですが、INDEX関数、LOOKUP関数、MATCH関数などと組み合わせることで、表の変化に自動で追従する柔軟な数式が作れます。

行番号・列番号を数式の中で扱えるようになると、連番作成、横方向への自動参照、最終行までの動的集計、最新データの取得といった作業がぐっと効率化できます。

まずは「**ROWは行番号**」「**COLUMNは列番号**」「**INDEXは行番号と列番号で値や参照を返す**」と整理して、小さな表で試しながら実務の管理表に取り入れていくといいですよ。

ぜひこの記事を参考に、ROW・COLUMN関数を使いこなしてみてください!

広告