行と列の番号を求めるROW関数とCOLUMN関数

2017.06.14関数

セルの行番号を求めるROW関数と、列番号を求めるCOLUMN関数について紹介します。
この2つの関数は、単独では単純に行番号や列番号を求めるだけですので、あまり意味を持ちませんが、INDEX関数やVLOOKUP関数などの行列関数と組み合わせをすることで便利さを発揮する関数です。
実際に操作できるファイルがあります。こちらからダウンロードして操作してみましょう。

ROW関数

ROW関数は、セルの行番号を求めます。
ダウンロードしたファイルの「ROW関数の基本」シートで操作します。
ROW関数の書式は、

=ROW(行番号を調べたいセル)

です。
セルA1の行番号を調べたいときは、

=ROW(A1)

となります。
セルC2に入力してみましょう。

ROW関数(セル参照)

 

セルA1の行番号1が求められます。

セル指定のROW関数の結果

 

また、

=ROW()

のように引数を入力しない書式もでき、その場合は、関数の入力されているセルの行番号を求めます。
セルC3に入力してみましょう。

ROW関数(引数なし)

 

計算式が入力されたセルC3の行番号3が求まります。
セルC3に入力した計算式をC4からC6の範囲にコピーすれば、4から6の数字が求まります。

ROW関数のコピー

COLUMN関数

COLUMN関数は、セルの列番号を求めます。
ダウンロードしたファイルの「COLUMN関数の基本」シートで操作します。
COLUMN関数の書式は、

=COLUMN(列番号を調べたいセル)

です。
セルA1の列番号を調べたいときは、

=COLUMN(A1)

となります。
セルB3に入力してみましょう。

COLUMN関数(セル指定)

 

セルA1の列番号1が求められます。

セル指定のCOLUMN関数の結果

 

Excelの列番号はアルファベットで表示されますが、COLUMN関数の求める値は、列番号の数字です。COLUMN関数は、あるセルが数字で何列目か知りたい場合にも利用できます。

また、ROW関数と同様に

=COLUMN()

のように引数を入力しない書式もでき、その場合は、関数の入力されているセルの列番号を求めます。
セルC3に入力してみましょう。

COLUMN関数(引数なし)

 

計算式が入力されたセルCの列番号3が求まります。
セルC3に入力した計算式をD3からF3の範囲にコピーすれば、D列の列番号4からF列の列番号6の数字が求まります。

COLUMN関数のコピー

ROW関数の応用

ダウンロードしたファイルの「ROW関数の応用」シートをご覧ください。

A1からC9の範囲には、各施設の大人と子供の入場料が縦方向で交互に入力されています。
E1からG6の範囲に、大人と子供が列方向に並ぶように入場料のレイアウトを変更した表を作成します。

大人と子供の料金表

 

この時、縦に入力されたデータの一覧から1つ飛ばしでデータを取り出す必要があります。

データの範囲から、任意の位置のデータを抜き出すのにINDEX関数を使いますが、縦の位置を知るためにROW関数を使います。
INDEX関数の解説はこちらをご覧ください。

大人料金の値はF2からF6に求めるので、行番号も2から6行になります。大人料金のもともとの値はC2、C4、C6、C8に入力されていますので、2から6の数字を2,4,6,8に置き換えます。
C列の料金の元のデータは1つ飛ばしなので、2を乗算することになります。

換算するには、元のデータの行番号=(求める先の行番号-1)*2という計算式になります。

セルF2には、C1からC9の範囲の中で、上記の計算式で求めた行番号の位置のデータを求めますので、次の計算式になります。

=INDEX($C$1:$C$9,(ROW()-1)*2)

INDEX関数とROW関数の組み合わせ(大人料金)

 

C1からC9の範囲は下方向にコピーしても位置が変わりませんので絶対参照にしています。
では、この計算式をF3からF6の範囲にコピーしてみましょう。

大人料金のコピー

 

子供料金は、大人料金の計算式の一つ下の行になるので、大人料金の計算式の行番号に1を足した、

=INDEX($C$1:$C$9,(ROW()-1)*2+1)

の計算式になります。
セルG2に入力しましょう。

INDEX関数とROW関数の組み合わせ(子供料金)

 

セルG2に入力した計算式を、G3からG6の範囲にコピーしましょう。

子供料金のコピー

COLUMN関数の応用

ダウンロードしたファイルの「COLUMN関数」シートのA1からE11の範囲には、商品ごとの仕入金額、販売価格、仕入元、納期の商品一覧表が入力されています。
G1からK6の範囲に、実際に販売したものの一覧表を作成します。

販売一覧表

 

この場合は、VLOOKUP関数を使いますが、何列もある表をVLOOKUP関数で参照する場合、1つの計算式を作ってそれを列方向にコピーすることはできず、1列ごとに計算式を作ったり少しだけ変更したりする必要があります。

VLOOKUP関数は、

=VLOOKUP(検索値,一覧表,列番号,0)

のような書式となりますが、検索値は相対参照、一覧表は絶対参照を使えばコピーができます。
しかし、VLOOKUP関数の列番号は、実際の数字を入力するケースがほとんどで、一回一回入力する手間がかかっているのではないでしょうか。
そこで、列番号はCOLUMN関数で求めた値を工夫することで、1つの計算式を作って列方向にコピーすることができます。

今回の場合は、VLOOKUP関数を求めるセルが、8列目から11列目までです。
対して参照元は、2から5列目です。
つまり、VLOOKUP関数を求める列から6を引けば、列番号になります。
セルH3には次の計算式が入ります。

=VLOOKUP($G3,$A$2:$E$11,COLUMN()-6,0)

VLOOKUP関数とCOLUMN関数の組み合わせ

 

列番号をCOLUMN関数で求め、6を引いています。
セルG3は行方向には相対参照ですが、列方向には絶対参照になるため、Gの前だけに$を付けています。
では、この計算式をI3からK3までコピーし、さらに、H4からK6までコピーしてみましょう。

VLOOKUP関数とCOLUMN関数の組み合わせ式のコピー

 

VLOOKUP関数の場合は、列番号を1列ごとに設定しますが、この方法でCOLUMN関数を組み合わせれば、1つの計算式でコピーできるので計算式作成の効率化ができます。

まとめ

今回はROW関数で行番号を求め、また、COLUMN関数で列番号を求め、さらに求めた値を他の関数と組み合わせることで、数式作成の簡略化ができることを紹介しました。

主に行列関数との組み合わせで使われることが考えられますが、LARGE関数やSMALL関数など順位を求める関数とも相性がよいです。

Back to top