【INDEX関数とMATCH関数の組み合わせにより、場所を探す作業から解放されます】
最近、改めて「INDEX関数とMATCH関数の組み合わせ」が便利だと痛感しましたので特集記事を書かせて頂きます
自分自身もこの2つの関数の「組み合わせ」を覚えたときには一つレベルが上がった気がしたものです
VBAを勉強する際にも「場所の検索の概念」はとても重要ですので、関数のレベルでこの概念に慣れておくとよいと思います
ここで言う「場所の検索の概念」を簡単な事例で紹介したいと思います

上の画像で地区が大阪の場合の売上金額を調べる場合にはC5のセルを参照しています
この場合、知りたい地区が変わるたびにF5セルに入力する数式をC4からC6まで可変にすることになります
これはとても不便です
ですので、自動的に検索できるようにしたいですよね
これが「場所の検索」の概念です
今回の記事ではINDEX関数とMATCH関数を組み合わせた「場所の検索」について、基本的な内容から応用までを幅広く解説したいと思います
目次
INDEX関数とMATCH関数のイメージ
まずは2つの関数のイメージに触れておきましょう
INDEX関数
ちなみに「INDEX」という単語の意味を調べると以下のような意味になるそうです
(参照:https://eikaiwa.weblio.jp/column/phrases/meaning/index)
- 索引
- 指標
- 目盛り
一番上の「索引/本などで該当箇所をすぐに見つけやすいようにページ数などを示したもの」が今回の記事では一番意味が近いと思います
話を元に戻します
Microsoft社のHPで紹介されていた文法は以下の通りです
INDEX(配列, 行番号, [列番号])
配列というのが分かりにくいと思うのですが、ここでは複数の値としておきましょう
つまり、INDEX関数とは1(1),2(2),3(3)*という風に番号が()で振られた値があったとしたら、番号で値を指定するという内容になります
MATCH関数
Microsoft社のHPで紹介されていた文法は以下の通りです
MATCH(検査値, 検査範囲, [照合の型])
ここで、上の2つ目の引数:検索範囲、に注目してください
この検索範囲というのが前述のINDEX関数の「配列」と大いに関連があります
検索範囲には複数の値があります
当然、エクセルなので行番号や列番号が各々の値にはあります
ですので検索範囲を配列として扱うことも可能です
つまり、INDEX関数とMATCH関数を組み合わせることで「配列」を共有して処理できます
話をMATCH関数に戻しましょう!
MATCH関数では、1つ目の引数:検索値にて設定した値の「検索範囲/配列」での番号(行番号、列番号)を取得できます
1(1),2(2),3(3)という配列があったとして、2を検索値にした場合には()内の2が取得できる、そんなイメージになります
ちなみにエクセルのワークシートにはR1C1形式というのがあります

R1C1形式にすると列が番号で表示されます
つまり、列はアルファベットでなく数値でも表現できます
エクセルをR1C1形式にすると、私が昔住んでいた札幌を思い出します
*下記の画像は(https://beyondvillage.com/2017/06/14/sapporoaddressgoban/)より引用させて頂きました

北1東2、南2西3・・・住所が格子状に表示されていて、急遽転勤した私にもわかりやすかったです
つまり、このINDEXとMATCH関数の組み合わせはこの格子状の住所で表示された地図をうまく活用するということでもあります
事例1
INDEX関数とMATCH関数の組み合わせの事例の一番目を紹介します

東京(4行目)、大阪(5行目)、名古屋(6行目)の売上金額を自由自在に抽出します
今回は行方向(南北方向)のみの事例です
MATCH関数
まずF4セルを検索値(画像では名古屋という値が表示されています)として第一引数に設定します

その後に、第二引数として4行目から6行目のB列を設定します
ここがINDEX関数と間接的に共有して活用する地図です
ちなみに第三引数は0(完全一致)だけ覚えておけば大丈夫です
ここまで設定すると以下のような地図内の「行位置」が表示されます

3と表示されているのは、検索値の名古屋が東京(1)、大阪(2)、名古屋(3)の地図内で3番目だからです
次にこの位置をINDEX関数に渡して実際の売り上げ金額を表示します
INDEX関数

INDEX関数内では、まずは第一引数にC列の4行目から6行目を指定します
これでMATCH関数と間接的に共通の地図を共有する形になります
そして、第二引数にて前述の「MATCH関数」を渡します
MATCH関数は既に3という数字がでていますので300(1)、170(2)、330(3)の中で330が出力されます

ここで1番目の事例紹介は終わりです
次の事例では南北方向だけでなく、東西方向も加えた事例を紹介します
事例2

今回は東西方向も加わりますので、INDEX関数の第三引数も設定します

ここで気を付けていきたいのは、INDEX関数とMATCH関数とで地図の範囲を共有することです
ですので、以下のようにスタート地点が3つとも重なるようにしてください

応用編1
地図内がいびつになっていて、2つの軸を組み合わせないと位置が決められないケースについて解説します
下の画像ならば、10月には2024年の10月と2025年の10月の2つがあります

この場合は検索値を複合して作成しつつ、引数も複合にします
まずは検索値です

上記のように「C9&C10」としてMATCH関数内の検索値を複合して作成します
次に検索値に対応する地図も&を使って複合します

これでINDEXとMATCH関数を通常通りに使用できます

応用編2
INDEXとMATCH関数の組み合わせはSUM関数内などの複数範囲を指定するのにも使えます

次のような月別の合計を検索するケースを考えましょう

1月は地図内の1番目、2月は2番目という風にSUM関数の範囲を可変にします
この場合は、MATCH関数で月の位置を取得します
そして、INDEX関数で地図の全範囲を取得できるようにしておきます

この際、列位置についてはINDEX関数の第三引数になるので、コンマが必要になる点に注意してください

<まとめ>
今回はINDEX関数とMATCH関数を組み合わせて、地図内の場所を検索する方法を解説しました
MATCH関数で位置を取得、INDEX関数で位置の値を取得すると考えて頂ければと思います
ここで大前提としては、同じ地図を共有することとなります
これ、重要ですのでぜひ覚えておいてくださいね
後、当ブログではINDEX関数とMATCH関数を組み合わせを利用したダッシュボードの事例も紹介しています⇒記事

ご興味がある方はぜひそちらもご覧ください!
コメントを残す