目次

この記事でわかること

INDEX MATCHの基本構文を5分で理解し、手元の表にすぐ実装できる。VLOOKUPとの使い分けを3条件で即判断できる。エラーの9割は3原因のどれかで、今日中に解決できる。

フリーランスの請求・案件管理で「VLOOKUPでは左端しか検索できない」問題を解消するのがINDEX MATCH組み合わせです。MATCHで位置番号を取得し、INDEXで値を返す2段構造で、行列双方向の検索も1つの式で実現できます。この記事では基本構文から複数条件、エラー対処まで実務レベルで解説します。

この記事の結論

INDEX MATCH組み合わせの核心は「MATCHが何番目かを返し、INDEXがその番目の値を返す」という役割分担にあります。この2段構造を理解すれば、検索列の位置制約を受けないVLOOKUP超えの検索が書けるようになります。フリーランスの請求管理・案件台帳・入金確認のあらゆる表に応用でき、一度覚えると関数を書き直す頻度が大幅に減ります。

今日やるべき1つ

手元のExcelまたはGoogleスプレッドシートに =INDEX(C2:C10, MATCH(“確認したい値”,A2:A10,0)) を入力し、動作を確認してください(5分)。

状況別ショートカット

状況読むべきセクション所要時間
基本構文を今すぐ理解したいINDEX MATCHの基本は2ステップで完結3分
VLOOKUPとどちらを使うか迷っているVLOOKUP比較は3条件で判断3分
行と列を同時に検索したい行列双方向検索はMATCHを2回使う4分
複数条件の式が書けない複数条件検索は連結キーで解決4分
エラーが出て原因が分からないINDEX MATCHエラーは3原因で9割解決3分

INDEX MATCHの基本は2ステップで完結

最初は「2つの関数が何をしているのか」を切り分けて理解するのが最短ルートです。INDEXとMATCHをそれぞれ単独で動かしてから組み合わせると、式の全体像が一気に見えてきます。

MATCHは「何番目か」を返す番号係

MATCH関数の役割は1つです。指定した検索値が、指定した範囲の何番目にあるかを数字で返します。構文は =MATCH(検索値, 検索範囲, 0) で、末尾の 0 は完全一致を意味します。たとえばA2:A10に顧客名が並んでいる場合、=MATCH(“田中商店”, A2:A10, 0) は田中商店が上から何番目にあるかを返します。MATCH単体では値を取得しておらず、位置情報だけを出力しています。この「番号しか返さない」特性がINDEXと組み合わせたときに意味を持ちます。

INDEXは「番目の値」を取り出す引取係

INDEX関数は指定した範囲から、指定した行番号・列番号の位置にある値を返します。構文は =INDEX(範囲, 行番号, 列番号) です。列番号を省略すれば1列の範囲から行番号だけで値を取り出せます。単独で使うと行番号を手入力する必要があり実用性が低いですが、MATCHが返した番号を行番号に渡すことで、自動的に対応する値を取り出せるようになります。

組み合わせの基本構文は1パターンを覚えるだけ

最初に覚える構文は =INDEX(返したい列の範囲, MATCH(検索値, 検索範囲, 0)) の1パターンです。具体的にはA列に案件名、C列に報酬額が並ぶ表で =INDEX(C2:C10, MATCH(“Webデザイン案件”, A2:A10, 0)) と書くと、Webデザイン案件と一致する行の報酬額がC列から返ってきます。ポイントは返したい列の範囲(C2:C10)と検索範囲(A2:A10)の行数を必ず揃えることです。行数がずれると、番号は正しく取れていても別の行の値が返るという誤抽出が起きます。INDEX MATCH初心者が最も多く踏むミスなので、範囲設定は常にセットで確認する習慣をつけてください。

「INDEXとMATCHを分けて理解してから組み合わせると急に分かった」という声もあります(INDEX関数+MATCH関数の組み合わせ方)。

CHECK

▶ 今すぐやること: A列に3件のデータを入力し、上記の基本構文をC列で試して返り値を確認する(5分)

Q: 末尾の 0 は必ず入れる必要がありますか?

A: フリーランスの実務でINDEX MATCHを使う場面のほぼすべてで 0(完全一致)を使うと覚えてください。1 や -1 は昇順・降順に並んだ数値範囲の近似検索に使うもので、顧客名・案件名・商品名を検索する際に指定すると意図しない結果が返ります。

Q: 行番号は何から始まりますか?

A: MATCH関数が返す番号は指定した検索範囲の先頭を1番目とします。A2:A10を検索範囲にした場合、A2にある値はMATCHが1を返し、INDEXはC2:C10の1番目つまりC2の値を返します。

VLOOKUP比較は3条件で判断

VLOOKUPには実務で頻繁に問題になる3つの制約があります。この3条件のいずれかに当てはまったとき、INDEX MATCHへの切り替えを検討してください。売掛金管理をExcelで効率化している場合も、列構成の変更に強いINDEX MATCHへの移行を検討する価値があります。

検索列が左端にないとVLOOKUPは機能しない

VLOOKUPはデータ範囲の最左列にある値しか検索キーにできません。たとえばA列に請求書番号、B列に顧客名、C列に金額が並ぶ表で、顧客名(B列)をキーに請求書番号(A列)を調べようとすると、VLOOKUPはそもそも対応していません。INDEX MATCHはMATCHで顧客名の位置を検索範囲B列で探し、INDEXでA列の同行の値を返せるため、検索列と返したい列の位置関係に制約がありません。フリーランスが途中からカラムを追加した表でも、構文を書き直さずに対応できます。

列を追加挿入するとVLOOKUPの列番号がずれる

VLOOKUPの第3引数は列番号を数値で手入力します。表の途中に列を1列挿入すると、参照していた列番号がすべて1つずつずれ、誤った値が返ってきます。INDEX MATCHはINDEXの参照範囲を列で直接指定するため、列の挿入・削除をしてもINDEXが参照する列はそのまま追随します。案件管理表や顧客台帳に項目を後から追加することが多いフリーランスには、この挿入耐性の差が実務で積み重なります。

行列双方向の検索はVLOOKUPでは1式で書けない

VLOOKUPは縦方向の検索に特化しており、行と列の両方を同時に検索する二次元表への対応が一式では難しい構造です。INDEX MATCHはMATCHを2回ネストすることで、行の位置と列の位置を同時に特定し1式で交差点の値を取り出せます。料金テーブルや作業単価表など、縦軸と横軸の両方に条件を持つ表を扱う場面では、INDEX MATCHの方が式の数を減らせます。

「VLOOKUPより柔軟で、検索列が左になくても扱いやすい」という声もあります(INDEX関数+MATCH関数の組み合わせ方)。

CHECK

▶ 今すぐやること: 手元の表でVLOOKUPを使っている式を1つ選び、検索列が左端以外にある場合はINDEX MATCHで書き換えてみる(5分)

Q: XLOOKUPがあればINDEX MATCHは不要ですか?

A: Microsoft 365やExcel 2021以降ではXLOOKUPが使えますが、GoogleスプレッドシートやExcel旧バージョンをクライアントと共有するフリーランスには、INDEX MATCHの方が互換性の観点で安全です。XLOOKUPが使える環境限定ならXLOOKUPを優先しても問題ありません。

Q: INDEX MATCHのデメリットはありますか?

A: 式が長くなるためVLOOKUPより初見での読み解きに時間がかかります。また、参照先の列を直接指定する構造上、範囲が広いと数式バーで全体を確認しにくくなります。VLOOKUPで問題なく機能している表はあえて書き換える必要はありません。

自分の使う場面を3分で診断

以下の3問でINDEX MATCHに切り替えるべきかどうかを判定できます。

Q1: 今使っている表で、検索したい列はデータ範囲の左端にありますか? Yesの場合はQ2へ進んでください。Noの場合はINDEX MATCHの採用を強くおすすめします(Result A)。

Q2: 今後その表に列を追加する可能性がありますか? Yesの場合はINDEX MATCHへの切り替えを検討してください(Result B)。Noの場合はQ3へ進んでください。

Q3: 行と列の交差点を1式で取り出したい表がありますか? Yesの場合はINDEX MATCHが適しています(Result C)。Noの場合は現在の構成でVLOOKUPを使い続けても問題ありません(Result D)。

Result A: 左端以外のキー検索

今すぐINDEX MATCHで書き換えると誤抽出リスクをゼロにできます。基本構文は =INDEX(返したい範囲, MATCH(検索値, 検索範囲, 0)) です。

Result B: 列追加が想定される表

VLOOKUP継続も可能ですが、列追加のたびに列番号修正が発生します。新規作成の表からINDEX MATCHを採用するとメンテナンスコストが下がります。

Result C: 二次元表の交差点検索

MATCHを2回ネストする構文を使います。本記事の「行列双方向検索」セクションを参照してください。

Result D: VLOOKUP継続

現状の表がシンプルな左端キー検索であれば、VLOOKUPで十分です。式を複雑にすると保守性が下がります。

CHECK

▶ 今すぐやること: 自分が最もよく使う表の検索列の位置を確認し、Result AまたはBに該当する場合は今週中にINDEX MATCHで1式書き換える(3分)

Q: 診断でResult Dになりましたが、INDEX MATCHを覚える意味はありますか?

A: 覚えておく価値はあります。フリーランスは表の設計が変わるタイミングで即座に対応できるかどうかが作業効率に直結します。Result Dの表でも練習として書き換えてみることで、必要なときに迷わず使える状態になります。

Q: Googleスプレッドシートでも同じ診断が使えますか?

A: 使えます。INDEX MATCHの構文はExcelとGoogleスプレッドシートで共通しているため、本診断の判定基準はどちらの環境でも適用できます。

行列双方向検索はMATCHを2回使う

行と列を同時に検索する表でも、基本は「MATCHを2個ネストして行と列の番号をそれぞれ取得する」だけです。構造を3ブロックで捉えると迷わなくなります。

二次元検索の構文は引数の順序で覚える

行列双方向の構文は =INDEX(データ範囲, MATCH(行の検索値, 行の検索範囲, 0), MATCH(列の検索値, 列の検索範囲, 0)) です。第2引数が行番号を返すMATCH、第3引数が列番号を返すMATCHになります。例として、B2:E10に単価データが入り、A2:A10に顧客区分、B1:E1にサービス種別が並ぶ表では =INDEX(B2:E10, MATCH(“法人A”, A2:A10, 0), MATCH(“月次レポート”, B1:E1, 0)) と書くと、法人Aかつ月次レポートの交差単価を返します。式が長くなって戸惑う場合は「データ本体の範囲・行を探すMATCH・列を探すMATCH」の3ブロックと覚えると整理しやすいです。

データ範囲と2つの検索範囲を揃えるのが前提

二次元検索で誤抽出が起きる最多原因は、データ範囲の行数・列数と検索範囲の行数・列数がずれていることです。データ範囲がB2:E10なら、行の検索範囲はA2:A10(9行)、列の検索範囲はB1:E1(4列)になります。データ範囲の行数と行検索範囲の行数が一致していること、データ範囲の列数と列検索範囲の列数が一致していることを、式を書く前に確認してください。このチェックを省略すると、MATCHが正しい番号を返しても意図しない行・列の値を取り出す誤動作に気づきにくくなります。

Googleスプレッドシートでも同一構文が使える

ExcelとGoogleスプレッドシートを使い分けるフリーランスにとって、二次元検索の構文をそのまま両環境で使えることは実務上の重要なポイントです。「Googleスプレッドシートでも同様に使え、行列の両方を探せる点が強みとして説明されている」という報告があります(Googleスプレッドシート INDEX + MATCH関数の組み合わせ)。クライアントからExcel形式で表を受け取り、自分の作業はGoogleスプレッドシートで行うケースでも、INDEX MATCHの式をコピーするだけで動作します。INDEX MATCHはExcelとGoogleスプレッドシートの両環境で完全互換です。なおExcelとGoogleスプレッドシートの違いを5つの判断基準で整理した記事も参考にしてください。

CHECK

▶ 今すぐやること: B2:E5の4行4列のサンプル表を作成し、二次元検索の構文を1式入力して交差点の値が正しく返るかを確認する(7分)

Q: 列検索のMATCHに指定する範囲は必ずヘッダー行ですか?

A: ヘッダー行である必要はありませんが、列のラベルが入っている行を検索範囲に指定する必要があります。ヘッダーが1行目にある表では1行目を列検索範囲に指定してください。行が1行でも範囲指定はB1:E1のように行を揃えて書きます。

Q: MATCHを2回ネストすると処理が重くなりますか?

A: 数千行規模の表でも体感できるほど遅くなることはほぼありません。ただし数万行以上のデータで複数の二次元検索式を同一シートに大量配置する場合は、計算の重さが累積することがあります。その場合はデータを絞り込んでから検索する設計を検討してください。

複数条件検索は連結キーで解決

覚えるパターンは「条件を&で結合して1本のキーにする」方法と「補助列を作る」方法の2つだけです。

条件を&で結合する方法は式1本で完結する

複数条件をMATCHに渡すには、複数の検索値と複数の検索範囲を同時に使う必要があります。Excelではこれを配列数式で処理します。構文は =INDEX(返す範囲, MATCH(条件1&条件2, 範囲1&範囲2, 0)) ですが、Excelでは式を入力後にCtrl+Shift+Enterで配列数式として確定する必要があります(数式バーに {} が付きます)。たとえばA列に顧客名、B列にサービス種別、C列に報酬額がある表で「田中商店かつ動画制作」の報酬額を返す場合、=INDEX(C2:C10, MATCH(“田中商店”&”動画制作”, A2:A10&B2:B10, 0)) をCtrl+Shift+Enterで入力します。Googleスプレッドシートでは通常のEnterのみで配列式として動作します。

補助列を使う方法は式の保守性が上がる

複数条件が3つ以上になる場合や、条件の組み合わせが頻繁に変わる場合は、補助列を作るアプローチを検討してください。表に空き列を1つ追加し、そこで =A2&B2 のように条件を結合した文字列を生成します。検索側でも同様に条件を結合した検索値を作り、INDEX MATCHの検索範囲にこの補助列を指定します。補助列方式は式が単純になり、後から見返したときに何を検索しているかが把握しやすくなります。チームやクライアントと表を共有するフリーランスには、式の読みやすさが長期的な作業効率に影響するため、補助列を積極的に使う設計をおすすめします。Googleスプレッドシートの初心者向け基本操作ガイドも合わせて参考にしてください。

「複数条件の抽出で&を使う方法や、AND条件を作る手順が整理されている」という報告があります(INDEX+MATCH関数で複数条件を検索する方法)。

複数条件検索で&結合のとき型に注意する

&で数値と文字列を結合すると、「001」のような0埋め番号が「1」と解釈される型不一致が起きることがあります。これはセルが数値型で保存されている場合に&結合が文字列変換を行う過程で表示形式を無視するためです。IDや番号など0埋めが必要なキーを条件に使う場合は、検索値側と検索範囲側の両方でTEXT関数を使って文字列形式に統一してから結合することで型不一致を回避できます。

CHECK

▶ 今すぐやること: A列・B列に条件データ、C列に返したい値を入力した5行のサンプルを作り、&結合の複数条件式をCtrl+Shift+Enterで試す(7分)

Q: Googleスプレッドシートではいつも通常のEnterで確定すれば大丈夫ですか?

A: はい、Googleスプレッドシートでは配列式をCtrl+Shift+Enterで確定する必要はありません。通常のEnterで入力した式が自動的に配列として処理されます。ただし古いバージョンのExcelから移行した式をそのまま貼り付けた場合は動作を確認してください。

Q: 条件が4つ以上になっても&でつなげますか?

A: 構文上は可能ですが、4条件以上になると式が長くなり可読性が低下します。3条件以上のケースでは補助列を作る方法を優先してください。

INDEX MATCHは7つの実務テクで完全活用

以下のハックはフリーランスの業務に直結する7つの実践パターンです。それぞれ10分以内で実装できます。

ハック1: 案件名から報酬額を2秒で取り出す

【対象】: 案件管理表で報酬額を毎回手動確認しているフリーランス

【手順】: A列に案件名、B列に単価、C列に契約月が並ぶ案件一覧を用意します(1分)。別シートのサマリー表で案件名をキーに =INDEX(B2:B100, MATCH(検索セル, A2:A100, 0)) を入力します(2分)。別シートから参照する場合は範囲の前にシート名を付けて =INDEX(案件一覧!B2:B100, MATCH(A2, 案件一覧!A2:A100, 0)) と書きます(1分)。

【ポイントと理由】: 一度式を設定すれば案件追加のたびにコピーするだけで参照が維持できます。MATCHが検索範囲全体を毎回走査するため、行を追加しても範囲がA2:A100のように広く取られていれば自動的に新規行も検索対象に含まれます。

【注意点】: 検索値のセルに全角スペースや末尾スペースが入っていると完全一致が成立しません。まず検索値と検索範囲の表記を目視で比較し、原因を特定してください。スペースが混入している場合はTRIM関数で除去することも有効です。

ハック2: 請求書番号から顧客情報を左方向に返す

【対象】: A列に顧客名、B列に請求書番号が並ぶ表で、番号から氏名を逆引きしたいフリーランス

【手順】: B列(請求書番号)を検索キーにA列(顧客名)を返す逆引き式を設定します(2分)。=INDEX(A2:A50, MATCH(“INV-0023”, B2:B50, 0)) と入力します(1分)。検索値を入力セルに分離して =INDEX(A2:A50, MATCH(E1, B2:B50, 0)) とすれば、E1に番号を入れるだけで顧客名が自動表示されます(2分)。

【ポイントと理由】: INDEX MATCHなら検索列の位置に関係なく1式で逆引きが完結します。MATCHが検索範囲として指定した列を独立して走査し、INDEXが別の列を参照するという2関数の分業構造がこれを可能にします。VLOOKUPは検索と返却が同じ範囲に縛られますが、INDEX MATCHはそれぞれが独立した範囲を持てます。

【注意点】: 請求書番号に数値型と文字列型が混在しているとMATCHが一致を検出できません。セルの書式を統一することが先決で、TEXT関数やVALUE関数での型変換は必要になる場合のみ使用します。

ハック3: 作業単価テーブルから条件交差点を自動取得

【対象】: 顧客区分×作業種別の二次元単価表を持ち、都度手動で確認しているフリーランス

【手順】: B2:E10に単価データ、A2:A10に顧客区分、B1:E1に作業種別が並ぶテーブルを準備します(2分)。=INDEX(B2:E10, MATCH(顧客区分セル, A2:A10, 0), MATCH(作業種別セル, B1:E1, 0)) を入力します(2分)。顧客区分と作業種別を変更するたびに単価が自動更新されることを確認します(1分)。

【ポイントと理由】: 行と列の両方にMATCHを使う二次元検索は、テーブルにデータを追加しても式を書き直さずに済む設計です。単価テーブルの行・列を増やすたびに式を修正するという手間がなくなり、表の縦横が増えるほど削減効果が積み重なります。

【注意点】: データ範囲と2つの検索範囲の行数・列数が揃っていないと誤抽出が起きます。B2:E10のようにヘッダーを除いた範囲だけをデータ範囲にしてください。

ハック4: 入金確認表で未入金案件を条件付き抽出

【対象】: 案件と入金ステータスを同一表で管理し、未入金の確認に時間がかかっているフリーランス

【手順】: A列に案件名、B列に請求額、C列に入金ステータス(「済」「未」)が並ぶ表を用意します(1分)。別の確認セルで =INDEX(A2:A100, MATCH(“未”, C2:C100, 0)) と入力すると、最初に見つかった「未」ステータスの案件名が返ります(2分)。次の未入金を順に取り出すためにMATCH式の結果をカウントして順番に返す構成にするか、フィルター機能との併用を検討します(2分)。

【ポイントと理由】: INDEX MATCHで未入金の案件名を別セルに自動表示する構成にすると、確認のたびにフィルターをかけ直す操作が不要になります。フィルター操作は表示を切り替えるため他のセルの参照が一時的に崩れるケースもありますが、INDEX MATCHは元の表に一切手を加えず別セルに結果を返せるため、表の状態を保ったまま未入金確認ができます。なお入金管理全体の仕組みについてはフリーランスの請求書番号の付け方と管理方法も参考にしてください。

【注意点】: MATCH(“未”, C2:C100, 0) は最初に一致した1件しか返しません。複数の未入金案件を一覧で抽出したい場合は、ExcelではFILTER関数(Excel 365以降)、GoogleスプレッドシートではFILTER関数を使う方が適しています。

ハック5: エラーをIFERRORで隠さず原因を1ステップで特定

【対象】: INDEX MATCHでエラーが出るたびにIFERRORで隠して原因を放置しているフリーランス

【手順】: エラーが出た式のMATCH部分だけを単独で別セルに貼り付けて =MATCH(検索値, 検索範囲, 0) を実行します(1分)。MATCHがエラーを返す場合は検索値と検索範囲に表記ゆれ・型不一致があります(2分)。MATCHが数値を返すのにINDEXがエラーを返す場合は、INDEXの参照範囲の行数がMATCHの検索範囲と合っていないことが原因です(2分)。

【ポイントと理由】: IFERRORはエラーを隠すだけで原因が残り、後から誤抽出として再発します。検索値と検索範囲の表記ゆれは式の修正では解決できず、データ入力の段階での不一致を修正しなければ同じ問題が別の行でも発生し続けます。IFERRORを使うのは式の完成後、表示を整えるためだけにしてください。

【注意点】: MATCHが正しい番号を返しているのにINDEXがおかしい値を返す場合、原因は必ずデータ範囲と検索範囲のサイズ不一致です。範囲の先頭行と末尾行をそろえることで解決します。

CHECK

▶ 今すぐやること: 自分が最もよく使う表で上記ハック1または2を1式だけ実装し、正しく値が返ることを確認する(10分)

Q: 別シートの範囲を参照するとき、シート名に日本語が含まれていても問題ありませんか?

A: 問題ありません。ただし日本語のシート名を参照する場合、Excelでは自動的にシート名がシングルクォートで囲まれます(例: ‘案件一覧’!A2:A100)。手動で入力するときもシングルクォートを付けてください。

Q: INDEX MATCHの式はどこに置くのが最も管理しやすいですか?

A: 集計や参照が必要なサマリーシートを1枚作り、そこにINDEX MATCH式をまとめるのがおすすめです。データ入力シートと参照シートを分けることで、データの修正と参照式の管理が独立して行えます。

INDEX MATCHエラーは3原因で9割解決

INDEX MATCHのエラーはほぼ3つの原因のいずれかに当てはまります。順番に確認するだけで9割は解決します。

表記ゆれはTRIM+EXACT関数で判定する

最多のエラー原因は検索値と検索範囲のデータが表記上は同じように見えて実際には一致していない「表記ゆれ」です。全角・半角の違い、スペースの混入、改行文字の混入が代表的です。=EXACT(検索値, 範囲内の特定セル) を使うとTRUE/FALSEで完全一致かどうかを判定できます。TRIMを検索値と検索範囲の両方に適用した式 =MATCH(TRIM(検索値), TRIM(範囲), 0) で一時的に動作するかを試すと、スペース混入が原因かどうかを素早く切り分けられます。表記ゆれが判明したらデータ側を修正するのが根本解決です。

数値と文字列の型不一致は値の貼り付けで解消する

セルに数値が入っているように見えても、セルの書式が文字列型に設定されているとMATCHは一致を検出できません。逆に検索値が数値型なのに検索範囲が文字列型のケースも同様です。確認方法は、セルを選択して左上に緑の三角マーク(Excelの場合)が出ていないかを見ます。マークが出ていれば文字列として保存された数値です。修正方法は該当列を選択して「データ」から「テキストを列に分割」(Excel)または「形式を選択して貼り付け」から「値のみ」で再貼り付けすることで型を統一できます。

範囲のサイズ不一致は行番号を並べて確認する

INDEXの参照範囲の行数とMATCHの検索範囲の行数が異なる場合、MATCHが返した番号がINDEXの範囲外を指してエラーになります。たとえばINDEXの範囲がC2:C10(9行)でMATCHの検索範囲がA2:A11(10行)であれば、MATCHが10を返したときにINDEXはC2:C10の10番目(C11)を探そうとしてエラーになります。確認方法は数式バーで範囲の終了行番号を並べて見比べるだけです。両方の終了行番号を一致させるだけで解決します。

CHECK

▶ 今すぐやること: 現在エラーが出ている式があればMATCH部分を別セルに切り出して単独実行し、エラーの発生箇所を特定する(5分)

Q: #N/Aと#REF!はそれぞれ何が原因ですか?

A: #N/A はMATCHが検索値を範囲内で見つけられなかったときに返ります。表記ゆれまたは型不一致が原因です。#REF! はINDEXの参照範囲外の行・列番号を指定しているときに返ります。範囲のサイズ不一致または行・列番号に0以下の値が渡されているケースが主な原因です。

Q: IFERRORで空白を返すとき、いつ使うのが適切ですか?

A: 検索対象が表に存在しないケースが仕様上あり得る場合のみ使用します。たとえば「案件がない月は空白のままにしたい」という設計では =IFERROR(INDEX(…MATCH(…)),””) が適切です。データの入力ミスによるエラーをIFERRORで隠すことは原因の特定を遅らせるためやめてください。

まとめ: INDEX MATCHを実務で使いこなす5つのステップ

INDEX MATCHはMATCHが番号を返しINDEXがその番目の値を取り出すという2段構造を理解した時点で、フリーランスの実務に使えるレベルに達します。VLOOKUPとの使い分けは「検索列が左端でない・列追加が想定される・行列双方向が必要」の3条件で判断できます。複数条件は&結合か補助列で対応し、エラーは表記ゆれ・型不一致・範囲サイズ不一致の3原因から順に確認するだけで9割は解決します。

まず1つ、手元の表で基本構文を試してみることが最短の上達ルートです。

状況次の一歩所要時間
基本構文を初めて試すA列とC列の2列サンプルで基本式を入力5分
VLOOKUPからの切り替えを検討している既存のVLOOKUP式を1つINDEX MATCHで書き換える5分
二次元検索に挑戦したい4行4列の単価テーブルを作りMATCH2回構文を試す7分
複数条件を試したい2条件の&結合式をCtrl+Shift+Enterで入力7分
エラーが出て困っているMATCHを別セルに切り出して単独実行する5分

INDEX MATCH組み合わせに関するよくある質問

Q: INDEXとMATCHはどちらを先に書きますか?

A: 外側にINDEX、内側にMATCHを書きます。INDEXが「何番目の値を返すか」を処理し、MATCHが「何番目か」を計算してINDEXに渡す構造です。=INDEX(範囲, MATCH(検索値, 検索範囲, 0)) の形を先に覚えてください。

Q: ExcelとGoogleスプレッドシートで式の書き方は違いますか?

A: 基本構文は共通です。唯一異なるのは複数条件の配列式で、ExcelではCtrl+Shift+Enterが必要ですが、Googleスプレッドシートでは通常のEnterのみで動作します。Googleスプレッドシートは自動的に配列処理を行います(Googleスプレッドシート INDEX + MATCH関数の組み合わせ)。

Q: VLOOKUP、INDEX MATCH、XLOOKUPのどれを使えばよいですか?

A: 使用環境と表の設計で決まります。Excel 365またはExcel 2021以降を単独で使うならXLOOKUPが最もシンプルです。ExcelとGoogleスプレッドシートの両方で使いたい、または古いExcelと共有する場合はINDEX MATCHが最も互換性が高いです。VLOOKUPは検索列が常に左端にある単純な表に限って使うと保守しやすいです。COUNTIF関数との組み合わせで複数条件を扱う方法も関連知識として役立ちます。

【出典・参照元】

INDEX関数+MATCH関数の組み合わせ方 – VLOOKUPより柔軟で検索列位置を選ばないという実体験解説

Googleスプレッドシート INDEX + MATCH関数の組み合わせ – Googleスプレッドシートでの行列双方向検索の使い方

INDEX+MATCH関数で複数条件を検索する方法 – &を使った複数条件検索とAND条件の作り方