Menu

INDEX関数とMATCH関数の組み合わせ: 左側・縦横の検索

=INDEX(C2:C6,MATCH(F2,A2:A6,0))はA列でF2の行を探し、C列のその行の値を返します。左側の検索も、縦横の2方向の検索もでき、どのバージョンのExcelでも使えます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=INDEX(C2:C6,MATCH(F2,A2:A6,0))は、A2:A6でF2がある行を探し、C2:C6の同じ行の値を返します。MATCHが位置を探し、INDEXがその位置の値を取り出します。どのバージョンのExcelでも使え、左側も検索できます。

商品の価格
G2
ABCDEFG
1ProductCategoryPriceCodeLook forPrice
2AppleFruit$1.20P-101Pear$1.50
3PearFruit$1.50P-102
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

F2をMilkに変えると、G2は$1.10を返します。C2:C6をB2:B6に変えると、代わりにカテゴリーを返します。

INDEXとMATCHの連携のしかた

この数式は、1つのセルの中で2つの手順を行っています。ここではそれぞれを別のセルに分けて、各部分が何を返すかを見られるようにしています。

2つの手順を1セルずつ
G3
ABCDEFG
1ProductCategoryPriceCodeLook forBread
2AppleFruit$1.20P-101Position4
3PearFruit$1.50P-102Price$2.40
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

BreadはA2:A6の4番目の項目なので、MATCH(G1,A2:A6,0)は4を返します。INDEX(C2:C6,4)はC2:C6の4番目の項目$2.40を返します。G2の代わりにMATCHをINDEXの中に入れれば、1セルの数式になります。正しく動かすための規則が2つあります:

  • 2つの範囲は同じ行から始まり、同じ高さにする。 MATCH(...,A2:A6,0)は2行目から数えるので、INDEXはC1:C6ではなくC2:C6を読む必要があります(C1:C6だと1つ上の行を返します)。
  • MATCHの最後は0にする。 0がないとMATCHはA列が並べ替えられていると仮定した近似一致を行い、名前のリストでは違う行の位置を返すことがあります。3つの照合の種類はMATCHのページで説明しています。

値がリストにないと、MATCHは#N/Aを返し、数式全体も#N/Aになります。=IFNA(INDEX(C2:C6,MATCH(F2,A2:A6,0)),"Not found")なら代わりに文字列を表示します。

左側を検索する

VLOOKUPは探す列より右の列を返します。INDEXとMATCHは列の順番を気にしません。D列を探してA列を返せます。

コードから商品名を出す
G2
ABCDEFG
1ProductCategoryPriceCodeCodeProduct
2AppleFruit$1.20P-101P-310Bread
3PearFruit$1.50P-102
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

P-310ではBreadが返ります。F2にP-205と入力するとCarrotです。VLOOKUPなら、先にCode列を表の先頭に移す必要があります。

縦横の2方向の検索: 2つのMATCHを使うINDEX

INDEXは行番号と列番号を受け取ります。表全体を渡し、1つのMATCHに行を、もう1つのMATCHに列を探させます。

地域別・月別の売上
B8
ABCD
1RegionJanFebMar
2North4,2003,9004,800
3South3,1003,6003,300
4East5,2004,7005,600
5West2,8003,0003,400
6RegionEast
7MonthMar
8Sales5,600
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

EastはA2:A5の3行目、MarはB1:D1の3列目なので、INDEXはB2:D5の3行3列目の5,600を返します。行のMATCHは最初の列を下方向に、列のMATCHは見出し行を横方向に探し、どちらの範囲も表B2:D5と位置がそろっています。

INDEX MATCHがVLOOKUPより優れている点

=VLOOKUP(F2, A2:D6, 3, FALSE)
=INDEX(C2:C6, MATCH(F2, A2:A6, 0))

どちらも価格を返します。違いが出るのはシートが変わったときです:

  • 列の挿入。 CategoryとPriceの間に列を挿入すると、VLOOKUPは3列目を求め続けますが、そこは新しい空の列です。INDEX版では、ExcelがC2:C6をD2:D6に調整するので、そのまま動き続けます。
  • 左側の検索。 上で見たとおり、VLOOKUPにはできず、INDEX MATCHにはできます。

Excel 2021とMicrosoft 365では、XLOOKUPが1つの関数で、もっと簡単な引数で両方をこなします。それでもExcel 2019以前で開く必要があるファイルにはINDEX MATCHが適していますし、INDEXの部分は単独でも役に立ちます。2つの条件で同時に検索する方法は複数条件での検索をご覧ください。

練習: 左側を検索する

在庫データの書き出し
G2
ABCDEFG
1CodePriceStockProductLook forPrice
2P-101$1.2040AppleMilk
3P-102$1.5025Pear
4P-205$0.8060Carrot
5P-310$2.4015Bread
6P-412$1.1030Milk
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: 商品名は最後の列にあります。G2で、INDEXとMATCHを使ってF2の商品の価格を返してください。

練習: 縦横の2方向の検索

テストの点数
B9
ABCD
1StudentMathScienceArt
2Ana788592
3Ben647188
4Cara958973
5Dev826779
6
7StudentCara
8SubjectScience
9Score
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: B9で、B7の生徒のB8の教科の点数を返してください。

よくある質問

INDEXとMATCHの組み合わせはどう動きますか?

MATCHが列の中で値の位置を探し、INDEXが別の列のその位置の値を返します。=INDEX(C2:C6,MATCH("Pear",A2:A6,0))では、PearがA2:A6の2番目の項目なのでMATCHが2を返し、INDEXがC2:C6の2番目の項目を返します。

VLOOKUPではなくINDEX MATCHを使うのはなぜですか?

探す列より左の列を返せるうえ、表の中に列を挿入しても壊れないからです(古くなる列番号がありません)。Excel 2021とMicrosoft 365では、XLOOKUPが1つの関数で同じ利点を持っています。

MATCHの0はどういう意味ですか?

完全一致を求めるという意味です。指定しないとMATCHは照合の種類1、つまり列が昇順に並んでいることを前提にした近似一致を使い、並べ替えていないリストでは違う行の位置を返すことがあります。

INDEX MATCHで縦横の2方向の検索をするには?

INDEXに表全体と、行用と列用の2つのMATCHを渡します:=INDEX(B2:D5,MATCH("South",A2:A5,0),MATCH("Feb",B1:D1,0))は、Southの行とFebの列が交わる値を返します。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める