皆さんこんにちは。合同会社StudioData代表のRyumaと申します。
今回はINDIRECT関数の基礎的な役割とMATCH関数と組み合わせたちょっとした応用を解説します。
INDIRECT関数の基礎
INDIRECT関数とは?
INDIRECT関数とは、参照するセルの位置を文字列で指定できる関数です。
つまりどういうことなのかを下記の表を使って解説します。
例えば下記のようにINDIRECT関数を使うとE9セルの中身である「B-4」を返してくれます。
=INDIRECT("E9")
基礎の基礎としてINDIRECT関数は「=INDIRECT("セル番号")」の形で書くと、"セル番号"(今回だとE9セル)の中身を返してくれる関数ということを覚えておいてください。
しかし、これだけではD15のセルに「=E9」と打ち込んだのと何も変わりません。
順を追ってこの関数の本領を解説していきますので、まずはINDIRECT関数は、参照するセルの位置を「文字列で指定する」というポイントを押さえておいてください。
文字列で指定しなくてはならないため、「=INDIRECT(E9)」と打つとエラーになります。Excelやスプレッドシートでは文字列は「""」で囲むことも思い出しておいてください。
INDIRECT関数のステップ2
文字列でセルの位置を指定すれば良いため関数を下のように少し改良してみます。
=INDIRECT("E"&9)
ちゃんとこちらも「"E"&9」を「E9セル」と認識して「B-4」と値を返してくれました。
ポイント
INDIRECT関数は「=INDIRECT("セルの文字列")」の形に最終的になれば機能する
「セルの位置を文字列で指定する」という性質から、「アルファベット & 数字」の形に出来ればINDIRECT関数はセルの位置として認識できるという点がポイントです。
つまり、アルファベットや数字を別の関数で指定する形で組み合わせることが出来るのです。
MATCH関数との組み合わせ
では実際にMATCH関数とINDIRECT関数を組み合わせて使ってみましょう。
=MATCH(検索値, 範囲, 検索の型)
MATCH関数は上のような形で書き、「"範囲"の中から"検索値"を見つけ出し、それが上から何行目にあるかを完全一致か部分一致(検索の型)で取得する関数」です。
=MATCH(C15, E1:E13, false)
例えば上の表だと、検索値は"B-4"、探す範囲は"E1:E13"、検索の型は"false(完全一致)"となり、範囲の中でB-4は上から9番目にあるので「9」と返してくれました。
では次に、C9セルにある金額をINDIRECT関数で持ってくるとします。その時は下記のように記述します。
=INDIRECT("C"&9)
ここまでは良いですね。
では、「商品IDがB-4の商品の金額を知りたい」時はどうすれば良いでしょうか。
今使ったMATCH関数とINDIRECT関数を組み合わせて下記のように記述することでこれは解決します。
=INDIRECT("C" & MATCH(C15, E1:E13, false))
まず流れとして「MATCH(C15, E1:E13, false)」の部分が「9」と計算され、ついで「=INDIRECT("C" & 9」がC9セルの中身を取得して「600」と返してくれます。
この組み合わせをうまく使うことでVLOOKUP関数の代用が可能です。VLOOKUPでは"検索値"が検索範囲の一番左の列にあるという条件のもと検索が可能ですが、INDIRECT&MATCHの組み合わせではそのような縛りはありません。
同じようなことがINDEX関数とMATCH関数の組み合わせでも可能ですので、検索の仕方は何パターンか覚えておくようにしましょう。
詳しくはこちら → 「INDEX/MATCH関数でデータの検索【Excel/スプレッドシート】」
INDIRECT関数まとめ
VLOOKUPが使えないようなシチュエーションでINDIRECTとMATCH関数を用いて代用する方法について解説しました。
大量のデータが入っている表の中から、指定した条件のものを取得する、というのは実際の業務の中でもかなり多く登場する作業ですので、状況に応じていくつかの検索方法を使い分けられるようになりましょう!
最後まで読んでいただきありがとうございました!