Excel関数 逆引き集 | 列番号を取得 → MATCH

Excel VBA Excel
スポンサーリンク

概要

「この項目は横に並んだ表の何列目にあるの?」
そんな“列番号を知りたい”ときに使えるのが MATCH 関数です。

MATCH は「検索値が、指定した範囲の中で何番目にあるか」を返します。
縦方向なら「行番号」、横方向なら「列番号」として使えるイメージです。

ここでは、特に「列番号を取得する」使い方に絞って、初心者向けにわかりやすく解説します。


基本の考え方

MATCH の書式は共通で、縦でも横でも同じです。

=MATCH(検索値, 検索範囲, 検索方法)

検索範囲を「横一列」にして使えば、その範囲の中で何列目かが分かります。

例えば、

=MATCH("売上", B1:Z1, 0)

という式は、「B1:Z1 の横一列の中で “売上” が左から何番目か」を返します。
返ってくる数値は「範囲内での位置」なので、B1:Z1 の中で 3 と返ってきたら、それは「B→1, C→2, D→3 なので D列」という意味になります。

検索方法は、基本的に 0(完全一致)だけ覚えておけば大丈夫です。


基本の使い方(ヘッダー行から列番号を取る)

列番号取得で一番よくあるのは、「見出し行(ヘッダー)から列番号を探す」ケースです。

例えば、1行目に項目名のヘッダーが並んでいる表を想像してください。

A1:日付
B1:担当者
C1:商品
D1:数量
E1:売上

このとき、「“売上” の列番号を知りたい」ときは、次のように書きます。

=MATCH("売上", $A$1:$Z$1, 0)

これで、「A1:Z1 の中で“売上” が左から何番目か」が数値で返ってきます。

もし A1:E1 の範囲だけなら、

=MATCH("売上", $A$1:$E$1, 0)

となり、結果は 5(範囲内で5番目=E列)になります。

この“列番号”を、INDEX や OFFSET など他の関数と組み合わせると、「見出し名がどこにあっても追従してくれる式」が作れるようになります。


応用テンプレート(INDEXと組み合わせた柔軟な参照)

列番号を取るだけでなく、「その列の値を取りたい」ことがほとんどだと思います。
そのときは INDEX 関数とセットで使います。

例えば、ヘッダー行A1:Z1 に項目名、2行目以降にデータが並ぶ表で、「項目名を指定して、その列の 2行目(あるいは任意の行)の値を取りたい」場合は、次のように書けます。

=INDEX($A$2:$Z$2, MATCH("売上", $A$1:$Z$1, 0))

意味をかみ砕くと、

  1. MATCH で「“売上” がヘッダー行の何列目か」を求める
  2. INDEX が「2行目のその列」を返す

という流れです。

行番号を変えれば、3行目・4行目など、任意の行の値を取れます。

=INDEX($A$2:$Z$100, 行番号, MATCH("売上", $A$1:$Z$1, 0))

例えば行番号を 5 にすれば、「5行目の売上列」の値が取れる、というイメージです。


よくあるつまずきと対策

列番号取得でよくあるポイントを押さえておきます。

MATCH が返すのは「範囲内での位置」であって、シート全体の列番号(A=1, B=2…)ではない、という点が重要です。
たとえば、範囲を B1:E1 にして、

=MATCH("売上", B1:E1, 0)

とした場合、E列の“売上”は「4」と返ります(B→1, C→2, D→3, E→4)。
「列番号そのもの(E=5)が欲しいわけではない」ことに注意してください。

どうしてもシート上の列番号に変換したい場合は、

= MATCH("売上", B1:Z1, 0) + COLUMN(B1) - 1

のように、開始列の COLUMN 値を足してあげれば、A=1, B=2…という“シート上の列番号”が求められます。

また、

検索方法(第3引数)は 0(完全一致)を必ず指定する
ヘッダー名の余計な空白・全角半角の違いに注意する
見出し名が変更されたら MATCH の検索値も合わせて見直す

といった点も、実務ではよく効いてくるポイントです。


例題

問題1: 1行目 A1:E1 に「日付, 担当者, 商品, 数量, 売上」が並んでいます。「売上」が A1:E1 の中で何番目かを F1 に表示してください。

=MATCH("売上", A1:E1, 0)

問題2: 1行目 A1:Z1 にヘッダーが並んでおり、セル G1 に検索したい項目名が入っています。G1 の項目名が A1:Z1 の中で何番目かを H1 に表示してください。

=MATCH(G1, A1:Z1, 0)

問題3: A1:Z1 にヘッダー、A2:Z2 にデータがあります。「売上」という項目の 2行目の値を、列番号を MATCH で求めてから INDEX で取得し、B5 に表示してください。

=INDEX(A2:Z2, MATCH("売上", A1:Z1, 0))

問題4: B1:Z1 にヘッダーがあり、「売上」はどこかにあります。「売上」の“シート上の列番号”(A=1, B=2…)を B3 に表示してください。

=MATCH("売上", B1:Z1, 0) + COLUMN(B1) - 1

問題5: A1:Z1 にヘッダー、A2:Z100 にデータがあります。セル G1 に項目名、G2 に行番号が入っているとき、「G1 で指定した項目の、G2 で指定した行の値」を H2 に表示してください(列番号取得に MATCH を使う)。

=INDEX(A2:Z100, G2, MATCH(G1, A1:Z1, 0))

まとめ

MATCH は、本来「位置(何番目か)」を返す関数ですが、横一列に対して使えば「列番号取得」にぴったりの道具になります。

ポイントは、

検索範囲を“横一列”にして使う
返ってくるのはあくまで“範囲内での位置”
INDEX と組み合わせると「項目名ベースでどの列でも参照できる柔軟な式」が作れる

この3つです。

列番号を手書きで数えるのではなく、MATCH に任せるようになると、「列の追加・削除に強い」「ヘッダー名が変わっても直しやすい」シートに育っていきます。

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