Excelの「INDIRECT関数」は、指定した文字列をセル名と認識して、間接的にほかのセルを参照するための関数です。一見するとわかりづらいINDIRECT関数は、ほかの関数と組み合わせると非常に便利に使えます。本章ではINDIRECT関数の概要と、MATCH関数・VLOOKUP関数と組み合わせて使う方法について、画像付きでわかりやすく解説します。
Excelの「INDIRECT」関数とは
Excelの「INDIRECT」関数とは、文字列形式で指定したセルの値を表示するための機能です。INDIRECT関数は「=INDIRECT(参照文字列)」の構文で使用します。
【1】「参照文字列」として指定した文字列が、INDIRECT関数では「セル名」として認識されます。通常のセル参照とは異なり、文字列をもとに「間接的」にセルを参照するのがINDIRECT関数です
【2】E2セルの数式は「=INDIRECT(“A2”)」で、表示される値は「一般」となります。このように、セル番地を直接指定するときはダブルクォーテーション「”」で囲むことで、「A2」がセル名として認識されます
MATCH関数とINDIRECT関数を組み合わせて値を取得する方法
INDIRECT関数はほかの関数と組み合わせて使用します。たとえば先ほどの例で、E1セルに「一般」や「学生」などの区分を入力すると、E2セルに料金が表示されるようにしてみましょう。この場合は、E1セルの文字列と一致するセルをA2~A5から検索し、そのとなりのB列セルを表示させる必要があります。
そこで「MATCH関数」を使用します。MATCH関数は指定範囲から検索し、戻り値は一致するセルの相対位置。INDIRECT関数の「検索文字列」は文字列なので、文字列連結子の「&」で「B」と「MATCH関数の戻り値」を連結すれば、正しいセル名を指定できます。
【1】E2セルに「=INDIRECT(“B”&MATCH(E1,A2:A5,0)+1)」と入力しましょう。MATCH関数の構文は「MATCH(検索値, 検索範囲, 照合方法)」です。「照合方法」は基本的に「0」を指定すれば問題ありません。なおMATCH関数の戻り値に「+1」しているのは、検索範囲の先頭が「A2」でその上に表タイトルがあるからです
【2】E2セルに「1500」と表示されました。先ほどのMATCH関数の戻り値は「2」ですが、タイトル行を考慮して1加えて「3」とします。さらに「&」で連結することで、「=INDIRECT(“B3”)」と指定するのと同じ結果になります。E1に「一般」や「シニア」と入力した場合の動作も確認してみましょう
VLOOKUP関数とINDIRECT関数を組み合わせて値を取得する方法
「VLOOKUP関数」とINDIRECT関数を組み合わせると、複数シートを参照する処理を行うときに便利です。VLOOKUP関数は表を縦方向に検索し、対応する値を返します。構文は「VLOOKUP(検索値, 範囲, 列番号, 検索の型)」で、ここでは「範囲」の指定方法が重要。
【1】たとえば、売上を集計するシートで製品番号とカテゴリー名を指定し、カテゴリ別のシートでまとめた価格を表示させる処理を考えてみましょう。VLOOKUP関数単独だと、検索範囲の「シート名」をひとつずつ変更しないといけません
【2】もし「B列」に記載してあるカテゴリー名で、VLOOKUP関数のシート名を指定できれば、オートフィルですべての価格が表示可能に。VLOOKUP関数とINDIRECT関数を組み合わせる方法を見ていきましょう
【3】製品価格のデータは、それぞれカテゴリーごとに別のシートにまとめてあります。なお「カテゴリー名」と「シート名」は同じものにしないと、この方法が使えないので要注意
【4】C2セルに「=VLOOKUP(A2,INDIRECT(B2&”!A:B”),2,FALSE)」と入力します。INDIRECT関数には、シート名(カテゴリー名)を示すB2セルの文字列と、検索範囲を示す「!A:B」を連結した文字列が指定されます
【5】あとはC2セルをクリックし、C6セルに向かってオートフィルを行えば、すべてのセルにINDIRECT関数が適用されます。今後さらに行を増やす場合も、オートフィルを行うだけで別シートを参照可能です
まとめ
ExcelのINDIRECT関数は、指定した文字列をセル名と認識し、そこにある文字列を返す関数です。MATCH関数やVLOOKUP関数と組み合わせて使うと、参照するセルやシートを手作業で指定する必要がなくなるので便利です。慣れるまで使い方が難しく感じられるかもしれませんが、今回紹介したサンプルを参考にして練習してみてください。
※サムネイル画像(Image:monticello / Shutterstock.com)