Excel

【Excel効率化】
INDEX関数&MATCH関数で
誰でもカンタンにデータを統合する方法!

(更新日:2022/01/03)

こんな記事です。

INDEX関数とMATCH関数を使うことで、あらゆる場面で使える超オールマイティなデータ統合の方法が学べます。

想定読者

「バラバラのシートに存在しているデータを一か所にまとめたい!」という方。

「データの統合って、どの関数を、どこで使えばいいのかよくわからない!」という方。

この記事を書いた人

  • Microsoft Certified Trainer 2021-2022(マイクロソフト認定トレーナー)
  • MOS Excel 2019&365 Expert/Associate取得

完成図

下図のように、注文表のF3~F12セル(黄色箇所)に、商品の「サイズ」と「配送先」に応じた送料が表示できたら完成です。もともと注文表には、送料の情報はありませんでしたが、「サイズ」と「配送先」に応じた「送料」を「料金表」から読み取り、注文番号ごとの送料をそれぞれ表示しています。

なお、各商品の送料は、料金表(C16~G18)から読み取っています。この例のように、リアルタイムにデータが更新される注文表と、サイズと配送先に応じた送料を表す料金表(=マスターデータ)を統合するときに、INDEX関数とMATCH関数の組み合わせが有効です。

作成手順

一般化した数式は以下です。今回の具体例に合わせて、各項目にどのようなデータを入れていくか、解説していきます。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))


INDEX関数の参照範囲を入力

まずは、「参照範囲」です。

「料金表」の中の$C$16:$G$18を参照します。このとき、「絶対参照」にしておくことがポイントです。あとでセルをコピーしたときに、このエリアをずっと参照しつづけることができます。範囲選択のイメージとしては、「食パンの白い部分だけ」です。食パンの耳の部分は、「検査範囲1,2」で使用します。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

MATCH関数の検査値(行側)を入力

続いて、「検査値1」を入力します。

検査値1は、料金表の「たて軸」を検索するためのキーワードなので、今回は、サイズ「中」となります。セル参照は、「D3」です。この参照は、「相対参照」です。なぜならば、数式をコピーしたときに、「検査値1」= 検索ワードは、毎回変わるからです。絶対参照にしてしまうと、コピー先でも、ずっと同じ検索ワードになってしまい、注文番号に応じた料金の検索ができなくなってしまいます。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

MATCH関数の検査範囲(行側)を入力

続いて、検査範囲1を指定します。

料金表の「たて軸」に該当します。データとしては、「大・中・小」です。セル参照は、$B$16:$B$18 です。これも「絶対参照」です。イメージとしては、食パンの耳(左サイド)です。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

続いて、「照合条件」です。

MATCH関数の照合条件(行側)を入力

この「照合条件」とは、MATCH関数において、検査値を検索するときの条件を決めるものです。「以下」「完全一致」「以上」の3つから選択することができますが、「完全一致」とします。完全一致の場合は、数字の「0」を入力します。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

MATCH関数の検査値(列側)を入力

続いて、「検査値2」を入力します。

検査値2は、料金表の「よこ軸」を検索するためのキーワードなので、今回は、配送先「沖縄」となります。セル参照は、「E3」です。この参照は、「相対参照」です。なぜならば、数式をコピーしたときに、「検査値1」= 検索ワードは、毎回変わるからです。絶対参照にしてしまうと、コピー先でも、ずっと同じ検索ワードになってしまい、注文番号に応じた料金の検索ができなくなってしまいます。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

MATCH関数の検査範囲(列側)を入力

続いて、「検査範囲2」です。

料金表の「よこ軸」に該当します。データとしては、「関東・関西・九州・北海道・沖縄」です。セル参照は、$C$15:$G$15 、これも「絶対参照」です。イメージとしては、食パンの耳(上辺)です。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

MATCH関数の照合条件(列側)を入力

最後に、再度、照合条件が出てきますが、1回目と同様に「0」を入力 = 完全一致 としてください。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))


 以上を組み合わせると、 始点となるF3セルに入力する数式は以下です。

これで、F3セルに、\800 と表示されました。改めて、料金表を確認してみると、ぶどうのサイズ:中、配送先:沖縄 だと、配送料:\800 であることが確認できます。このいちいち料金表とにらめっこする時間を、INDEX&MATCH関数で、爆速化しています。データ数が数えるほどであれば、関数無しの方がいいかもしれませんが、実務レベルだと、この型を覚えておいた方が、絶対にラクです。

=INDEX($C$16:$G$18,MATCH(D3,$B$16:$B$18,0),MATCH(E3,$C$15:$G$15,0))

最後に、F3セルを、F12までコピーすれば完成です。

完成

ポイントのおさらい

  • INDEX関数とMATCH関数を使うことで、あらゆる場面で使える超オールマイティなデータ統合の方法ができます。
  • 範囲選択時に、「参照範囲」「検査範囲1」「検査範囲2」は、「絶対参照」、それ以外は、「相対参照」にします。

=INDEX(参照範囲, MATCH(検査値1, 検査範囲1, 照合条件), MATCH(検査値2, 検査範囲2, 照合条件))

注意点

範囲選択をミスする事例が多いです。INDEX関数の「参照範囲」は食パンの白い部分、MATCH関数の「検査範囲1」は、食パンの耳(左側)、「検査範囲2」は、食パンの耳(上辺)です。値がうまく統合できていないときは、参照範囲や検査範囲が重複していないか確認しましょう。

INDEX関数の「参照範囲」、MATCH関数の「検査範囲」は、「絶対参照」になっているか確認しましょう!

まとめ

データの統合は、INDEX関数とMATCH関数を使った方法が一番使い勝手がいいと思います。一方で、VLOOKUP関数や、XLOOKUP関数を使った方が、直感的にわかりやすいケースもあるので、場面で使い分けていくといいと思います。別の記事で、そちらも紹介していこうと思います。


最後まで読んでくれてありがとうございます。

それではまた!