<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>INDEX+XMATCH &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/indexxmatch/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Mon, 18 May 2026 14:04:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>INDEX+XMATCH &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スプレッドシートのXMATCH関数の使い方｜MATCHとの違い・逆方向検索まで解説</title>
		<link>https://mashukabu.com/spreadsheet-xmatch-function/</link>
					<comments>https://mashukabu.com/spreadsheet-xmatch-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:28:53 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[INDEX+XMATCH]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[XMATCH関数]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[検索関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4725</guid>

					<description><![CDATA[スプレッドシートのXMATCH関数の使い方を基本から解説。MATCH関数との違いを比較表で整理し、一致モード4種・検索モード4種の使い分け、逆方向検索・ワイルドカード・バイナリサーチの活用法、INDEX+XMATCHの組み合わせまで網羅。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで <a href="https://mashukabu.com/spreadsheet-match-function/">MATCH関数</a> を使っていて、「末尾から検索できたらラクなのに」と思ったことはありませんか？日報や作業ログのように下へ追記していく台帳で、同じ担当者名が並んでいると、最新（最後）のエントリだけ拾いたいのに先頭側がヒットしてしまいますよね。</p>



<p class="wp-block-paragraph">そんなときに頼りになるのが <strong>XMATCH関数</strong> です。MATCH関数の上位互換にあたる検索系関数で、<strong>逆方向検索・ワイルドカード専用モード・並べ替え不要の近似一致・バイナリサーチ・正規表現</strong>まで、MATCHにはない機能が一通り揃っています。</p>



<p class="wp-block-paragraph">この記事では、XMATCH関数の構文と引数の基本から、一致モード4種・検索モード4種の早見表、実務シーン別の応用例（最新ロット取得・INDEX+XMATCHで左方向検索・行列クロス検索・IFERRORでエラー回避）、MATCH関数との比較表、よくあるエラーの対処法までまとめて解説します。MATCH関数からの乗り換えを検討している方はもちろん、INDEX+MATCHの式に慣れている方ほど効果を実感しやすい関数ですよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのXMATCH関数とは？MATCHの上位互換にあたる位置検索関数</a><ol><li><a href="#toc2" tabindex="0">XMATCH関数で何ができる？</a></li><li><a href="#toc3" tabindex="0">XMATCH関数とMATCH関数の違い（ざっくり）</a></li></ol></li><li><a href="#toc4" tabindex="0">XMATCH関数の構文と引数</a><ol><li><a href="#toc5" tabindex="0">基本構文</a></li><li><a href="#toc6" tabindex="0">引数の説明</a></li><li><a href="#toc7" tabindex="0">一致モード5種の早見表</a></li><li><a href="#toc8" tabindex="0">検索モード4種の早見表</a></li></ol></li><li><a href="#toc9" tabindex="0">XMATCH関数の基本的な使い方</a><ol><li><a href="#toc10" tabindex="0">完全一致で位置を取得する（一致モード 0）</a></li><li><a href="#toc11" tabindex="0">ワイルドカードで部分一致検索する（一致モード 2）</a></li><li><a href="#toc12" tabindex="0">近似一致で最も近い値を取得する（一致モード -1 / 1）</a></li><li><a href="#toc13" tabindex="0">正規表現で柔軟に一致させる（一致モード 3・スプレッドシート独自）</a></li></ol></li><li><a href="#toc14" tabindex="0">XMATCH関数の実践的な使い方・応用例</a><ol><li><a href="#toc15" tabindex="0">逆方向検索で最新データの位置を取得する</a></li><li><a href="#toc16" tabindex="0">INDEX+XMATCHで左方向の列を検索する</a></li><li><a href="#toc17" tabindex="0">INDEX+XMATCHで行列クロス検索する</a></li><li><a href="#toc18" tabindex="0">IFERRORと組み合わせてエラーを防ぐ</a></li><li><a href="#toc19" tabindex="0">バイナリサーチで大量データを高速検索する</a></li><li><a href="#toc20" tabindex="0">実務シナリオ: 在庫表で最新ロットの位置を取得する</a></li></ol></li><li><a href="#toc21" tabindex="0">XMATCH関数のよくあるエラーと対処法</a><ol><li><a href="#toc22" tabindex="0">#N/Aエラー（検索値が見つからない）の対処法</a></li><li><a href="#toc23" tabindex="0">#VALUE!エラー（範囲指定が不正）の対処法</a></li><li><a href="#toc24" tabindex="0">大文字小文字・全角半角の表記ゆれ対策</a></li></ol></li><li><a href="#toc25" tabindex="0">XMATCH関数とMATCH関数の違い・使い分け</a><ol><li><a href="#toc26" tabindex="0">MATCH→XMATCHへの書き換え（Before/After）</a></li><li><a href="#toc27" tabindex="0">どちらを選ぶべき？シーン別の判断基準</a></li><li><a href="#toc28" tabindex="0">XMATCH関数とXLOOKUP関数の使い分け</a></li><li><a href="#toc29" tabindex="0">INDEX+MATCHとの違い</a></li></ol></li><li><a href="#toc30" tabindex="0">まとめ：XMATCH関数で位置検索を一段ラクにする</a><ol><li><a href="#toc31" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのXMATCH関数とは？MATCHの上位互換にあたる位置検索関数</span></h2>



<p class="wp-block-paragraph">XMATCH関数（読み方: エックスマッチ関数）は、<strong>検索範囲から指定した値を探し、その値が何番目にあるかを数値で返す関数</strong>です。関数名の「X」はExtended（拡張）の意味で、<a href="https://mashukabu.com/spreadsheet-match-function/">MATCH関数</a> を強化した上位互換にあたります。位置番号を返す点はMATCHと同じですが、検索の方向や一致の仕方を細かく指定できるのが特徴です。</p>



<p class="wp-block-paragraph">たとえば部署列（C2:C6）から「総務部」が何番目にあるかを調べると、<code>=XMATCH("総務部", C2:C6)</code> で「3」が返ります。返るのは値そのものではなく、あくまで位置（インデックス）です。</p>



<h3 class="wp-block-heading"><span id="toc2">XMATCH関数で何ができる？</span></h3>



<p class="wp-block-paragraph">XMATCH関数が活躍するのは、おもに次のような場面です。</p>



<ul class="wp-block-list"><li>検索値が範囲の <strong>何番目にあるか</strong> を数値で取得したい（INDEX関数と組み合わせる前提のケース）</li><li>日報・作業ログなどの追記型データから <strong>最新のエントリ位置</strong> だけを拾いたい</li><li>検索列が範囲の左端にない表で、<a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a> では届かない <strong>左方向の検索</strong> をしたい</li><li>大きな表で <strong>行と列の見出しを同時に検索</strong> して、クロス検索を組みたい</li><li>「ぴったり85点はないけれど80点台のランクは何位か」のような <strong>近似一致</strong> を、並べ替えなしで実現したい</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>XMATCH関数が返すのは「位置番号」であって値そのものではありません。値を直接取得したい場合は、<a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a> や <a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a> と組み合わせて使います。XMATCH関数は「位置」を返す部品として、INDEX関数との組み合わせで真価を発揮します。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc3">XMATCH関数とMATCH関数の違い（ざっくり）</span></h3>



<p class="wp-block-paragraph">詳しい比較は後半の「XMATCH関数とMATCH関数の違い・使い分け」で解説しますが、ざっくり押さえておきたい違いは次の3点です。</p>



<ul class="wp-block-list"><li><strong>デフォルトが完全一致</strong>（MATCHは近似一致）なので、引数の指定ミスが起きにくい</li><li><strong>逆方向検索（末尾から検索）が可能</strong> で、追記型の台帳と相性がよい</li><li><strong>近似一致でデータの並べ替えが不要</strong> になり、事前のソート作業が要らない</li></ul>



<h2 class="wp-block-heading"><span id="toc4">XMATCH関数の構文と引数</span></h2>



<h3 class="wp-block-heading"><span id="toc5">基本構文</span></h3>



<p class="wp-block-paragraph">XMATCH関数の構文はこちらです。</p>



<pre class="wp-block-code"><code>=XMATCH(検索値, 検索範囲, [一致モード], [検索モード])</code></pre>



<p class="wp-block-paragraph">引数は4つあります。第3引数（一致モード）と第4引数（検索モード）は省略可能で、省略時はそれぞれ「完全一致」「先頭から検索」になります。</p>



<h3 class="wp-block-heading"><span id="toc6">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th><th>指定例</th></tr></thead><tbody><tr><td>検索値</td><td>必須</td><td>探したい値（文字列・数値・セル参照）</td><td>&#8220;営業部&#8221;、E001、A1</td></tr><tr><td>検索範囲</td><td>必須</td><td>検索対象の <strong>1行または1列</strong> の範囲</td><td>A2:A6、B1:F1</td></tr><tr><td>一致モード</td><td>省略可</td><td>一致の判定方法（0, -1, 1, 2, 3）</td><td>0</td></tr><tr><td>検索モード</td><td>省略可</td><td>検索する方向（1, -1, 2, -2）</td><td>1</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">省略した場合は「先頭から完全一致で検索」という最もシンプルな動作になります。MATCH関数とは異なりデフォルトが完全一致なので、第3引数の書き忘れによる事故が起きにくいのがメリットです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>検索範囲には <strong>1行または1列</strong> だけを指定します。<code>A1:C5</code> のような2次元の範囲を渡すと <code>#VALUE!</code> エラーになります。複数列を横断して検索したい場合は、後述の「INDEX+XMATCHでクロス検索する」パターンを使いましょう。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc7">一致モード5種の早見表</span></h3>



<p class="wp-block-paragraph">一致モードは、検索値と範囲内の値をどう照合するかを決める引数です。</p>



<figure class="wp-block-table"><table><thead><tr><th>一致モード</th><th>動作</th><th>データの並び順</th><th>主な用途</th></tr></thead><tbody><tr><td>0（デフォルト）</td><td><strong>完全一致</strong>。値がぴったり一致する位置を返す</td><td>不問</td><td>通常の検索</td></tr><tr><td>-1</td><td><strong>検索値以下の最大値</strong> の位置を返す</td><td>不問</td><td>価格帯・点数のランク判定</td></tr><tr><td>1</td><td><strong>検索値以上の最小値</strong> の位置を返す</td><td>不問</td><td>在庫の繰上げ判定</td></tr><tr><td>2</td><td><strong>ワイルドカード一致</strong>（<code>*</code>、<code>?</code>、<code>~</code> を使用）</td><td>不問</td><td>部分一致検索</td></tr><tr><td>3</td><td><strong>正規表現一致</strong>（スプレッドシート独自）</td><td>不問</td><td>複雑なパターン照合</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">MATCH関数の近似一致ではデータの並べ替えが必須でしたが、XMATCHなら並べ替え不要で近似一致ができます。一致モード3の正規表現は <strong>Googleスプレッドシート独自の拡張</strong> で、Excelには無い機能です。</p>



<h3 class="wp-block-heading"><span id="toc8">検索モード4種の早見表</span></h3>



<p class="wp-block-paragraph">検索モードは、範囲をどの方向から探すかを決める引数です。</p>



<figure class="wp-block-table"><table><thead><tr><th>検索モード</th><th>動作</th><th>条件</th><th>主な用途</th></tr></thead><tbody><tr><td>1（デフォルト）</td><td><strong>先頭から検索</strong></td><td>不問</td><td>通常の検索</td></tr><tr><td>-1</td><td><strong>末尾から逆方向検索</strong></td><td>不問</td><td>最新エントリの取得</td></tr><tr><td>2</td><td><strong>昇順バイナリサーチ</strong></td><td>昇順にソート済み必須</td><td>大量データの高速検索</td></tr><tr><td>-2</td><td><strong>降順バイナリサーチ</strong></td><td>降順にソート済み必須</td><td>大量データの高速検索</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">通常は先頭から検索（1）で問題ありません。末尾から検索（-1）はXMATCH関数の目玉機能で、MATCH関数にはない便利な動作です。</p>



<h2 class="wp-block-heading"><span id="toc9">XMATCH関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">ここからは具体例で動きを見ていきます。以下の社員管理表（A1:D6）を使って説明します。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>社員番号</td><td>氏名</td><td>部署</td><td>役職</td></tr><tr><td>2</td><td>E001</td><td>田中太郎</td><td>営業部</td><td>課長</td></tr><tr><td>3</td><td>E002</td><td>鈴木花子</td><td>経理部</td><td>主任</td></tr><tr><td>4</td><td>E003</td><td>佐藤一郎</td><td>総務部</td><td>部長</td></tr><tr><td>5</td><td>E004</td><td>山田美咲</td><td>営業部</td><td>主任</td></tr><tr><td>6</td><td>E005</td><td>高橋健一</td><td>開発部</td><td>課長</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc10">完全一致で位置を取得する（一致モード 0）</span></h3>



<p class="wp-block-paragraph">部署列（C2:C6）の中で「総務部」が何番目にあるかを調べる、いちばんシンプルな使い方です。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;総務部&quot;, C2:C6)</code></pre>



<p class="wp-block-paragraph">結果は「3」になります。C2:C6 の中で「総務部」は C4 にあり、先頭から数えて3番目の位置だからです。</p>



<p class="wp-block-paragraph">一致モードを省略しても完全一致で検索してくれます。MATCH関数では <code>=MATCH("総務部", C2:C6, 0)</code> のように第3引数に <code>0</code> を書く必要がありましたが、XMATCHなら省略できる分シンプルです。</p>



<h3 class="wp-block-heading"><span id="toc11">ワイルドカードで部分一致検索する（一致モード 2）</span></h3>



<p class="wp-block-paragraph">部分一致で検索したいときは、一致モードに <code>2</code> を指定します。<code>*</code>（任意の文字列）と <code>?</code>（任意の1文字）が使えます。</p>



<figure class="wp-block-table"><table><thead><tr><th>ワイルドカード</th><th>意味</th><th>使用例</th></tr></thead><tbody><tr><td><code>*</code>（アスタリスク）</td><td>任意の文字列（0文字以上）</td><td><code>"*太郎"</code> → 太郎で終わる値</td></tr><tr><td><code>?</code>（クエスチョン）</td><td>任意の1文字</td><td><code>"E00?"</code> → E001〜E009</td></tr><tr><td><code>~</code>（チルダ）</td><td><code>*</code> や <code>?</code> 自体をエスケープ</td><td><code>"~<em>"</code> → <code></em></code> を検索</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば氏名列から「鈴木」で始まる人の位置を調べるには、こう書きます。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;鈴木*&quot;, B2:B6, 2)</code></pre>



<p class="wp-block-paragraph">結果は「2」です。B2:B6 の中で「鈴木花子」が2番目にあるため、その位置が返ります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>MATCH関数では完全一致モード（0）でワイルドカードが使えましたが、XMATCHではワイルドカード専用の一致モード（2）に分離されています。完全一致モード（0）のままだと <code><em></code> や <code>?</code> は <strong>ただの文字</strong> として扱われるので、<code>"鈴木</em>"</code> を検索しても #N/A になります。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc12">近似一致で最も近い値を取得する（一致モード -1 / 1）</span></h3>



<p class="wp-block-paragraph">数値データに対して「ぴったり一致する値がなければ、近い値で代用する」モードです。</p>



<ul class="wp-block-list"><li><strong>-1（以下の最大値）</strong>: 検索値以下で最も大きい値の位置を返す</li><li><strong>1（以上の最小値）</strong>: 検索値以上で最も小さい値の位置を返す</li></ul>



<p class="wp-block-paragraph">たとえば、点数テーブル <code>{60, 70, 80, 90}</code> に対して85点のランクを調べたいとします。テーブルに85はありませんが、以下のように書けば80の位置が返ります。</p>



<pre class="wp-block-code"><code>=XMATCH(85, {60,70,80,90}, -1)</code></pre>



<p class="wp-block-paragraph">この式は「3」を返します。85以下の最大値は80で、テーブルの3番目だからです。逆に「85以上で最も小さい値」を取りたい場合は <code>=XMATCH(85, {60,70,80,90}, 1)</code> と書くと、90の位置である「4」が返ります。</p>



<p class="wp-block-paragraph">MATCH関数の近似一致ではデータの昇順・降順ソートが必須でしたが、XMATCHなら <strong>並べ替え不要</strong> で近似一致ができます。価格帯テーブルや評価テーブルのように、後から行を追加することがある表で特に便利です。</p>



<h3 class="wp-block-heading"><span id="toc13">正規表現で柔軟に一致させる（一致モード 3・スプレッドシート独自）</span></h3>



<p class="wp-block-paragraph">Googleスプレッドシート版のXMATCH関数には、Excelには無い <strong>正規表現一致モード（3）</strong> があります。<code>*</code> や <code>?</code> よりも複雑なパターンを書きたいときに使います。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;E00[1-3]&quot;, A2:A6, 3)</code></pre>



<p class="wp-block-paragraph"><code>E001</code>〜<code>E003</code> のいずれかにマッチする最初の位置を返します。上記の例では A2 の「E001」が最初に該当するので「1」が返ります。<code>[1-3]</code> は文字クラスで、<code>1</code> か <code>2</code> か <code>3</code> のいずれか1文字を表します。</p>



<p class="wp-block-paragraph">正規表現を使うと「3桁の数字で終わる商品コード」「特定の接頭辞＋数字」のような <strong>構造的な検索</strong> が一発で書けます。ただし正規表現に慣れていないと読みにくくなりがちなので、シンプルな部分一致ならワイルドカード（一致モード2）で十分です。</p>



<h2 class="wp-block-heading"><span id="toc14">XMATCH関数の実践的な使い方・応用例</span></h2>



<h3 class="wp-block-heading"><span id="toc15">逆方向検索で最新データの位置を取得する</span></h3>



<p class="wp-block-paragraph">XMATCH関数の目玉機能が、<strong>逆方向検索（検索モード -1）</strong> です。末尾から先頭に向かって検索し、最初に見つかった位置を返します。</p>



<p class="wp-block-paragraph">これが活躍するのは、日報や作業ログのような <strong>追記型の台帳</strong> です。下へどんどん行を追加していくシートで、同じ担当者名が何度も登場するとき、「最新（最後）のエントリだけ拾いたい」というニーズに刺さります。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;田中太郎&quot;, B2:B100, 0, -1)</code></pre>



<p class="wp-block-paragraph">第3引数の <code>0</code> は完全一致、第4引数の <code>-1</code> が末尾からの逆方向検索です。MATCH関数では逆順検索ができなかったので、<code>MAX</code> と <code>IF</code> の配列数式を組み合わせるような回りくどい式が必要でした。XMATCHなら検索モードに <code>-1</code> を渡すだけで解決します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>逆方向検索でも返る値は <strong>「先頭からの位置番号」</strong> です。たとえば B2:B100 の80番目に該当データがあれば、検索方向に関係なく「80」が返ります。INDEX関数に渡せばそのまま該当行の値を取り出せるので、計算ロジックを変える必要はありません。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc16">INDEX+XMATCHで左方向の列を検索する</span></h3>



<p class="wp-block-paragraph">XMATCH関数が最も活躍するのは、<a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a> と組み合わせる <strong>INDEX+XMATCH</strong> のパターンです。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a> は検索列が範囲の <strong>左端</strong> にある必要があり、左方向の検索ができません。一方、INDEX+XMATCHなら、検索列と戻り値の列を別々に指定できるので、左方向の検索も問題なく書けます。</p>



<p class="wp-block-paragraph">たとえば「営業部の社員の社員番号を知りたい」とします。部署（C列）で検索して、社員番号（A列）を返す数式です。</p>



<pre class="wp-block-code"><code>=INDEX(A2:A6, XMATCH(&quot;営業部&quot;, C2:C6))</code></pre>



<p class="wp-block-paragraph">処理の流れは次のとおりです。</p>



<ol class="wp-block-list"><li><code>XMATCH("営業部", C2:C6)</code> → C2:C6 で「営業部」は1番目 → 「1」を返す</li><li><code>INDEX(A2:A6, 1)</code> → A2:A6 の1番目 → 「E001」を返す</li></ol>



<p class="wp-block-paragraph">検索範囲（C列）と戻り値の範囲（A列）を別々に指定できるため、左方向だけでなく <strong>離れた列同士</strong> の参照も自由自在です。</p>



<h3 class="wp-block-heading"><span id="toc17">INDEX+XMATCHで行列クロス検索する</span></h3>



<p class="wp-block-paragraph">INDEX+XMATCH最大の見せ場が、<strong>行と列を同時に検索するクロス検索</strong> です。行の位置も列の位置もXMATCHで動的に取得することで、表のどこを参照するかを完全に数式で組み立てられます。</p>



<p class="wp-block-paragraph">「社員番号 E003 の役職を取得したい」というケースで見てみましょう。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D6, XMATCH(&quot;E003&quot;, A2:A6), XMATCH(&quot;役職&quot;, A1:D1))</code></pre>



<p class="wp-block-paragraph">処理の流れはこうなります。</p>



<ol class="wp-block-list"><li><code>XMATCH("E003", A2:A6)</code> → 「3」（A列で3番目）</li><li><code>XMATCH("役職", A1:D1)</code> → 「4」（見出し行で4番目）</li><li><code>INDEX(A2:D6, 3, 4)</code> → 表の3行4列目 → 「部長」を返す</li></ol>



<p class="wp-block-paragraph">列の見出し名で位置を検索するので、<strong>途中に列が追加・移動されても数式が壊れません</strong>。大きな表や、列構成が変わる可能性があるテンプレートで特に重宝するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc18">IFERRORと組み合わせてエラーを防ぐ</span></h3>



<p class="wp-block-paragraph">XMATCH関数は検索値が見つからないと <code>#N/A</code> エラーを返します。共有シートで他の人にも触らせる表では、<a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a> で囲んでエラー表示を避けるのが定番です。</p>



<pre class="wp-block-code"><code>=IFERROR(XMATCH(&quot;マーケ部&quot;, C2:C6), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">「マーケ部」はデータに存在しないため、<code>#N/A</code> ではなく「該当なし」が表示されます。</p>



<p class="wp-block-paragraph">INDEX+XMATCH の式と組み合わせる場合は、<strong>全体をIFERRORで囲む</strong> のがポイントです。</p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(B2:B6, XMATCH(&quot;E010&quot;, A2:A6)), &quot;見つかりません&quot;)</code></pre>



<p class="wp-block-paragraph">XMATCH側にだけIFERRORを掛けると、INDEX関数に「該当なし」が渡されて別のエラーになります。エラーの起点となる関数ではなく、最終的な数式全体をIFERRORで包みましょう。</p>



<h3 class="wp-block-heading"><span id="toc19">バイナリサーチで大量データを高速検索する</span></h3>



<p class="wp-block-paragraph">データが数万行を超えていて、かつ <strong>すでに昇順または降順にソート済み</strong> の場合は、バイナリサーチ（検索モード <code>2</code> または <code>-2</code>）が使えます。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;E003&quot;, A2:A10000, 0, 2)</code></pre>



<p class="wp-block-paragraph">二分探索のアルゴリズムで検索するので、線形検索よりも処理が高速です。ただし <strong>データが正しくソートされていないと誤った結果を返す</strong> ので注意が必要です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>数万行レベルでも体感差が出にくいケースが多いです。バイナリサーチは「ソート済みであることを保証できる」「再計算回数が多い」など、明確に高速化を必要とする場面で導入を検討しましょう。並べ替えコストとのトレードオフも忘れずに。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc20">実務シナリオ: 在庫表で最新ロットの位置を取得する</span></h3>



<p class="wp-block-paragraph">応用パターンとして、入出庫履歴から特定の商品の <strong>最新ロット行</strong> を取り出すケースを見てみましょう。A列に商品コード、B列にロット番号、C列に入庫日が並んでいる入庫履歴を想定します。</p>



<pre class="wp-block-code"><code>=INDEX(B2:B500, XMATCH(&quot;APPLE-01&quot;, A2:A500, 0, -1))</code></pre>



<p class="wp-block-paragraph"><code>XMATCH("APPLE-01", A2:A500, 0, -1)</code> で「APPLE-01」の <strong>末尾側の出現位置</strong> を取得し、その位置のロット番号を INDEX で取り出しています。逆方向検索（-1）を使うことで、最後に入庫されたロット番号だけを拾えます。</p>



<p class="wp-block-paragraph">「最新の単価」「最終更新日」など、追記型データから最新値を取り出す処理は実務で頻出です。INDEX+XMATCH+逆方向検索の3点セットは覚えておくと応用が利きます。</p>



<h2 class="wp-block-heading"><span id="toc21">XMATCH関数のよくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">XMATCH関数で発生しやすいエラーと、その原因・対処法を早見表にまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>主な原因</th><th>対処法</th></tr></thead><tbody><tr><td>#N/A</td><td>検索値が範囲内に存在しない</td><td>データの有無を確認する。IFERRORで囲む</td></tr><tr><td>#N/A</td><td>データ型の不一致（数値と文字列の混在）</td><td>検索値と範囲のデータ型を揃える</td></tr><tr><td>#N/A</td><td>ワイルドカードを一致モード0で使っている</td><td>一致モードを2に変更する</td></tr><tr><td>#VALUE!</td><td>検索範囲に2次元の範囲を指定（例: A1:C5）</td><td>1行または1列の範囲に変更する</td></tr><tr><td>#VALUE!</td><td>一致モードや検索モードに無効な値を指定</td><td>0, -1, 1, 2, 3（一致モード）/ 1, -1, 2, -2（検索モード）</td></tr><tr><td>期待と違う結果</td><td>全角/半角・大文字小文字の不一致</td><td>ASC関数・UPPER関数などで事前に正規化</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc22">#N/Aエラー（検索値が見つからない）の対処法</span></h3>



<p class="wp-block-paragraph">XMATCH関数でいちばん多いエラーです。データ自体が存在しない場合と、<strong>型の不一致</strong> で見つからない場合の2パターンがあります。</p>



<p class="wp-block-paragraph">セルの見た目は同じ数字でも、片方が数値・もう片方が文字列だと別物と判定されます。確認するには、対象セルを選択して数式バーの表示をチェックしてください。文字列として入力された数字はセル内で <strong>左寄せ</strong> で表示されます（数値は右寄せ）。VALUE関数で文字列を数値に変換すれば、型を揃えられます。</p>



<pre class="wp-block-code"><code>=XMATCH(VALUE(A2), B2:B100, 0)</code></pre>



<p class="wp-block-paragraph">逆に範囲側が数値で検索値が文字列なら、検索値を <code>VALUE("123")</code> のように変換します。どちらに揃えるかはデータの実体に合わせて選びましょう。</p>



<h3 class="wp-block-heading"><span id="toc23">#VALUE!エラー（範囲指定が不正）の対処法</span></h3>



<p class="wp-block-paragraph">検索範囲に2次元の範囲（A1:C5など）を指定すると発生します。XMATCH関数は <strong>1行または1列のみ</strong> を受け付けます。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;総務部&quot;, C2:D6)</code></pre>



<p class="wp-block-paragraph">このように2列を渡すと <code>#VALUE!</code> になります。複数列を横断して検索したい場合は、前述の「INDEX+XMATCHで行列クロス検索する」のように、行用と列用の2つのXMATCHに分けてください。</p>



<h3 class="wp-block-heading"><span id="toc24">大文字小文字・全角半角の表記ゆれ対策</span></h3>



<p class="wp-block-paragraph">XMATCH関数の値の照合は <strong>大文字と小文字を区別しません</strong>（&#8221;ABC&#8221; と &#8220;abc&#8221; は同じ）。一方で <strong>全角と半角は別物</strong> として扱います（&#8221;E001&#8243; と &#8220;Ｅ００１&#8221; は別）。</p>



<p class="wp-block-paragraph">データに全角の英数字や記号が紛れ込んでいる場合は、事前に ASC関数で半角に統一しておくと安心です。</p>



<pre class="wp-block-code"><code>=XMATCH(ASC(A2), ARRAYFORMULA(ASC(C2:C100)), 0)</code></pre>



<p class="wp-block-paragraph">検索値と範囲の両方を ASC で半角化することで、表記ゆれを吸収できます。範囲側に ARRAYFORMULA を使うのは、関数を範囲全体に適用するためです。</p>



<h2 class="wp-block-heading"><span id="toc25">XMATCH関数とMATCH関数の違い・使い分け</span></h2>



<p class="wp-block-paragraph">XMATCHはMATCH関数の上位互換です。主な違いを比較表で整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>MATCH</th><th>XMATCH</th></tr></thead><tbody><tr><td>デフォルトの一致モード</td><td>近似一致（1）</td><td><strong>完全一致（0）</strong></td></tr><tr><td>近似一致の並べ替え</td><td>昇順/降順が必須</td><td><strong>不要</strong></td></tr><tr><td>逆方向検索（末尾から検索）</td><td>不可</td><td><strong>可能（検索モード -1）</strong></td></tr><tr><td>ワイルドカード</td><td>完全一致モード（0）で使用</td><td><strong>専用モード（2）で使用</strong></td></tr><tr><td>バイナリサーチ</td><td>不可</td><td><strong>可能（検索モード 2 / -2）</strong></td></tr><tr><td>正規表現</td><td>不可</td><td><strong>一致モード 3（スプレッドシート独自）</strong></td></tr><tr><td>引数の数</td><td>3つ（検索値・範囲・一致モード）</td><td>4つ（検索値・範囲・一致モード・検索モード）</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc26">MATCH→XMATCHへの書き換え（Before/After）</span></h3>



<p class="wp-block-paragraph">実務でよく使う完全一致のパターンを、書き換え例で見てみましょう。</p>



<p class="wp-block-paragraph"><strong>Before（MATCH関数）:</strong></p>



<pre class="wp-block-code"><code>=MATCH(&quot;総務部&quot;, C2:C6, 0)</code></pre>



<p class="wp-block-paragraph"><strong>After（XMATCH関数）:</strong></p>



<pre class="wp-block-code"><code>=XMATCH(&quot;総務部&quot;, C2:C6)</code></pre>



<p class="wp-block-paragraph">第3引数の <code>0</code> を省略できる分、XMATCHのほうがシンプルです。完全一致がデフォルトなので、書き忘れによるエラーの心配もありません。</p>



<h3 class="wp-block-heading"><span id="toc27">どちらを選ぶべき？シーン別の判断基準</span></h3>



<p class="wp-block-paragraph">判断基準はシンプルに次のとおりです。</p>



<ul class="wp-block-list"><li><strong>新しく数式を作る場合</strong> → XMATCH関数がおすすめ。デフォルト完全一致で安全</li><li><strong>既存シートを部分修正する場合</strong> → 既存のMATCH関数に合わせて統一感を優先</li><li><strong>末尾側の一致を取得したい場合</strong> → XMATCH関数の逆方向検索（-1）一択</li><li><strong>大量データを高速検索したい場合</strong> → XMATCH関数のバイナリサーチ（2/-2）</li><li><strong>正規表現で複雑なパターンを検索したい場合</strong> → XMATCH関数の一致モード3</li></ul>



<h3 class="wp-block-heading"><span id="toc28">XMATCH関数とXLOOKUP関数の使い分け</span></h3>



<p class="wp-block-paragraph">「値そのものを取得したいだけ」なら、<a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a> のほうがシンプルに書けます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E003&quot;, A2:A6, D2:D6)</code></pre>



<p class="wp-block-paragraph">XLOOKUPは検索範囲と戻り値範囲を直接指定するので、INDEX+XMATCHの2段構えが不要です。一方で <strong>位置番号自体が必要</strong> なケース（行番号を別の計算に流したい・複数列を一度に取りたい・行列クロス検索したいなど）では、XMATCH関数のほうが柔軟性で勝ります。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>おすすめ関数</th></tr></thead><tbody><tr><td>1列のテーブルから値を取り出すだけ</td><td>XLOOKUP関数</td></tr><tr><td>位置番号を別の計算に使いたい</td><td>XMATCH関数</td></tr><tr><td>行と列の見出しから値を取り出したい（クロス検索）</td><td>INDEX + XMATCH</td></tr><tr><td>検索列の左側の値を取り出したい</td><td>XLOOKUP関数 または INDEX + XMATCH</td></tr><tr><td>検索値が末尾側のものを取得したい</td><td>XMATCH関数（検索モード -1）</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc29">INDEX+MATCHとの違い</span></h3>



<p class="wp-block-paragraph">長年の定番である <code>INDEX+MATCH</code> の式も、<code>INDEX+XMATCH</code> に置き換えるだけで動きます。</p>



<p class="wp-block-paragraph"><strong>Before（INDEX+MATCH）:</strong></p>



<pre class="wp-block-code"><code>=INDEX(A2:A6, MATCH(&quot;営業部&quot;, C2:C6, 0))</code></pre>



<p class="wp-block-paragraph"><strong>After（INDEX+XMATCH）:</strong></p>



<pre class="wp-block-code"><code>=INDEX(A2:A6, XMATCH(&quot;営業部&quot;, C2:C6))</code></pre>



<p class="wp-block-paragraph">XMATCH側で <code>0</code> を省略できるだけで、ほぼ同じ感覚で使えます。逆方向検索や正規表現が必要になったとき、XMATCHのほうが拡張余地が大きいのが強みです。</p>



<h2 class="wp-block-heading"><span id="toc30">まとめ：XMATCH関数で位置検索を一段ラクにする</span></h2>



<p class="wp-block-paragraph">最後にXMATCH関数のポイントを振り返ります。</p>



<ul class="wp-block-list"><li>構文は <code>=XMATCH(検索値, 検索範囲, [一致モード], [検索モード])</code> の4引数で、第3・第4引数は省略可</li><li><strong>デフォルトが完全一致</strong> なので、引数の指定ミスが起きにくい</li><li><strong>逆方向検索（検索モード -1）</strong> で、追記型の台帳から最新エントリの位置を一発取得できる</li><li><strong>近似一致で並べ替え不要</strong> になり、価格帯や評価テーブルの参照が手軽に</li><li>ワイルドカードは <strong>専用の一致モード（2）</strong> で使う。完全一致モード（0）では文字として扱われる</li><li>スプレッドシート版には <strong>正規表現の一致モード（3）</strong> もあり、複雑なパターンも検索できる</li><li><a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a> と組み合わせれば、<strong>左方向の検索・行列クロス検索</strong> が自由自在</li></ul>



<p class="wp-block-paragraph">まずは <code>=XMATCH("検索値", 範囲)</code> の完全一致パターンから試してみてください。MATCH関数を使っている方は、XMATCHに切り替えるだけで検索の自由度がぐっと広がりますよ。INDEX+MATCH派の方は、<code>MATCH</code> を <code>XMATCH</code> に置き換えるところから始めるのがおすすめです。</p>



<h3 class="wp-block-heading"><span id="toc31">関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-match-function/">スプレッドシートのMATCH関数の使い方｜INDEX+MATCHで左側も検索できる</a></li><li><a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方｜行列指定で値を取得する方法</a></li><li><a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方｜VLOOKUPとの違いも解説</a></li><li><a href="https://mashukabu.com/spreadsheet-vlookup-function/">スプレッドシートのVLOOKUP関数の使い方｜別シート参照・エラー対処まで解説</a></li><li><a href="https://mashukabu.com/spreadsheet-iferror-function/">スプレッドシートのIFERROR関数の使い方｜エラーを別の値に置き換える</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-xmatch-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
