<?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>MATCH関数 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/match%e9%96%a2%e6%95%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Fri, 12 Jun 2026 21:55:17 +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>MATCH関数 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スプレッドシートのIFNA関数の使い方｜#N/Aエラー時の代替値を設定する方法</title>
		<link>https://mashukabu.com/spreadsheet-ifna-function/</link>
					<comments>https://mashukabu.com/spreadsheet-ifna-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 14:55:13 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[IFERROR関数]]></category>
		<category><![CDATA[IFNA関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[VLOOKUP関数]]></category>
		<category><![CDATA[エラー処理]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5204</guid>

					<description><![CDATA[スプレッドシートのIFNA関数の使い方を基本から解説。#N/Aエラーだけを処理する構文から、VLOOKUPやINDEX/MATCHとの組み合わせ、IFERROR関数との違い、よくあるエラーの対処法まで実務シナリオで丁寧に解説します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートでVLOOKUPやMATCHを使ったら「#N/A」が表示された。こんな経験、ありませんか？</p>



<p class="wp-block-paragraph">「#N/Aだけ消したいけど、数式ミスまで隠すのは怖い」。そんなときに活躍するのがスプレッドシートのIFNA関数です。</p>



<p class="wp-block-paragraph">この記事では基本の書き方から実務パターンまで解説します。<a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>との違いもしっかり紹介しますよ。</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">スプレッドシートのIFNA関数とは？#N/Aエラー専用の処理関数</a></li><li><a href="#toc2" tabindex="0">IFNA関数の書き方（構文・引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li><li><a href="#toc5" tabindex="0">最もシンプルな使用例</a></li></ol></li><li><a href="#toc6" tabindex="0">基本的な使い方3選</a><ol><li><a href="#toc7" tabindex="0">#N/Aを空白にする</a></li><li><a href="#toc8" tabindex="0">#N/Aのときにメッセージを表示する</a></li><li><a href="#toc9" tabindex="0">#N/Aのときに数値を返す</a></li></ol></li><li><a href="#toc10" tabindex="0">実務で使える応用パターン</a><ol><li><a href="#toc11" tabindex="0">VLOOKUP+IFNAで未登録データを処理する</a></li><li><a href="#toc12" tabindex="0">INDEX/MATCH+IFNAで柔軟な検索をする</a></li><li><a href="#toc13" tabindex="0">IFNAのネストで複数テーブルを順番に検索する</a></li><li><a href="#toc14" tabindex="0">IF関数と組み合わせて空白セルを除外する</a></li></ol></li><li><a href="#toc15" tabindex="0">IFNA関数とIFERROR関数の違い・使い分け</a><ol><li><a href="#toc16" tabindex="0">どちらを使うべき？判断基準</a></li></ol></li><li><a href="#toc17" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc18" tabindex="0">まとめ</a><ol><li><a href="#toc19" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのIFNA関数とは？#N/Aエラー専用の処理関数</span></h2>



<p class="wp-block-paragraph">IFNA関数（読み方: イフエヌエー関数）は、<strong>数式の結果が#N/Aエラーのときだけ代わりの値を返す関数</strong>です。</p>



<p class="wp-block-paragraph">「IF」は「もし」、「N/A」は「Not Available（該当なし）」の略です。</p>



<p class="wp-block-paragraph">たとえば「VLOOKUPで該当なしのときだけ代替値を表示したい」場面です。IFNA関数なら#N/Aだけを処理できます。</p>



<p class="wp-block-paragraph">それ以外のエラーはそのまま残せますよ。</p>



<p class="wp-block-paragraph">IFNA関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a>や<a href="https://mashukabu.com/spreadsheet-match-function/">MATCH関数</a>の#N/Aを空白やメッセージに置き換える</li><li>#N/A以外のエラー（#REF!や#VALUE!など）はそのまま残す</li><li>数式ミスによるエラーを見逃さずに済む</li><li>「検索値が見つからない」ことだけを想定内として処理できる</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>IFERRORとの最大の違い</strong></p><p><a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>はすべてのエラーをまとめて処理します。一方、IFNA関数は#N/Aだけが対象です。「検索で見つからない」は想定内だけど、「参照先が消えた」「数式が壊れた」は検知したい。そんなときはIFNA関数のほうが安全ですよ。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">IFNA関数の書き方（構文・引数）</span></h2>



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



<p class="wp-block-paragraph">IFNA関数の構文はとてもシンプルです。</p>



<pre class="wp-block-code"><code>=IFNA(値, NA時の値)</code></pre>



<p class="wp-block-paragraph">引数は2つだけ。<a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>とまったく同じ形なので覚えやすいですよね。</p>



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



<p class="wp-block-paragraph">それぞれの引数の意味を表で整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>値</td><td>必須</td><td>#N/Aかどうかをチェックしたい数式やセル参照</td></tr><tr><td>NA時の値</td><td>任意</td><td>#N/Aだったときに返す値。文字列・数値・数式のいずれもOK</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">第2引数を省略するとどうなるでしょうか。Googleスプレッドシートでは空文字列（&#8221;&#8221;）が返ります。</p>



<p class="wp-block-paragraph">実務では表示したい値を明示するのがおすすめですよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>文字列を返す場合はダブルクォーテーションで囲みます。数値を返す場合は囲みません。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc5">最もシンプルな使用例</span></h3>



<p class="wp-block-paragraph">A2にVLOOKUPの結果が入っているとします。#N/Aのときに「該当なし」と表示してみましょう。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, D:E, 2, FALSE), &quot;該当なし&quot;)</code></pre>



<ul class="wp-block-list"><li><strong>VLOOKUP(A2, D:E, 2, FALSE)</strong>: A2の値をD列から検索</li><li><strong>&#8220;該当なし&#8221;</strong>: #N/Aエラー時に表示するテキスト</li></ul>



<p class="wp-block-paragraph">検索値が見つかれば結果がそのまま返ります。見つからなければ「該当なし」と表示されます。</p>



<h2 class="wp-block-heading"><span id="toc6">基本的な使い方3選</span></h2>



<p class="wp-block-paragraph">基本がわかったところで、仕事でよく使うパターンを見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc7">#N/Aを空白にする</span></h3>



<p class="wp-block-paragraph">一番よく使うパターンが、#N/Aを空白に置き換えるケースです。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, D:E, 2, FALSE), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">検索値が見つからなかったセルが空白になります。印刷する資料や共有用のシートで重宝しますよ。</p>



<h3 class="wp-block-heading"><span id="toc8">#N/Aのときにメッセージを表示する</span></h3>



<p class="wp-block-paragraph">空白ではなく、わかりやすいメッセージを表示することもできます。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, D:E, 2, FALSE), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">#N/Aの代わりに「該当なし」と表示されます。データが見つからなかったことをひと目で伝えたいときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc9">#N/Aのときに数値を返す</span></h3>



<p class="wp-block-paragraph">数値を返すパターンも実務でよく使います。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, 単価表!A:B, 2, FALSE), 0)</code></pre>



<p class="wp-block-paragraph">#N/Aの代わりに0を返します。SUM関数やAVERAGE関数の集計でエラーが止まるのを防げますよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>#VALUE!や#REF!はどうなる？</strong></p><p>IFNA関数は#N/A以外のエラーには反応しません。たとえば参照先を削除して#REF!が発生した場合、そのまま#REF!が表示されます。数式ミスが隠れないので安心ですね。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc10">実務で使える応用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc11">VLOOKUP+IFNAで未登録データを処理する</span></h3>



<p class="wp-block-paragraph">IFNA関数の最も定番の使い方が、<a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a>との組み合わせです。</p>



<p class="wp-block-paragraph">商品コードで商品マスタを検索するケースを考えてみましょう。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, 商品マスタ!A:C, 3, FALSE), &quot;未登録&quot;)</code></pre>



<p class="wp-block-paragraph">商品コードが見つからなければ「未登録」と表示します。大量データの突合で必須のテクニックですよ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>でも同じことはできます。ただしIFERRORだと列番号ミスの#REF!も隠れてしまいます。</p>



<p class="wp-block-paragraph">IFNA関数なら#REF!はそのまま表示されます。不具合に気づけるのがメリットですよ。</p>



<h3 class="wp-block-heading"><span id="toc12">INDEX/MATCH+IFNAで柔軟な検索をする</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a>と<a href="https://mashukabu.com/spreadsheet-match-function/">MATCH関数</a>を組み合わせた検索でも活躍します。</p>



<pre class="wp-block-code"><code>=IFNA(INDEX(C:C, MATCH(E2, A:A, 0)), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">「検索列より左側の値を取得する」パターンです。見つからないときだけ「該当なし」を返します。</p>



<p class="wp-block-paragraph">VLOOKUPでは対応できない検索が必要な場面で使ってみてください。</p>



<h3 class="wp-block-heading"><span id="toc13">IFNAのネストで複数テーブルを順番に検索する</span></h3>



<p class="wp-block-paragraph">第2引数に別のIFNA関数を入れると、複数テーブルを順番に検索できます。</p>



<pre class="wp-block-code"><code>=IFNA(VLOOKUP(A2, シート1!A:B, 2, FALSE), IFNA(VLOOKUP(A2, シート2!A:B, 2, FALSE), &quot;どちらにもなし&quot;))</code></pre>



<p class="wp-block-paragraph">まずシート1で検索します。#N/Aならシート2を検索します。どちらにもなければ「どちらにもなし」を表示する仕組みです。</p>



<p class="wp-block-paragraph">ちょっと複雑に見えますが、やっていることはシンプルです。「最初のIFNAが失敗したら次のIFNAを試す」という流れですよ。</p>



<h3 class="wp-block-heading"><span id="toc14">IF関数と組み合わせて空白セルを除外する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-if-function/">IF関数</a>とIFNA関数を組み合わせると、入力前のセルを除外できます。</p>



<pre class="wp-block-code"><code>=IF(A2=&quot;&quot;, &quot;&quot;, IFNA(VLOOKUP(A2, D:E, 2, FALSE), &quot;該当なし&quot;))</code></pre>



<p class="wp-block-paragraph">A2が空白ならそもそも検索しません。値が入っているときだけVLOOKUPを実行します。</p>



<p class="wp-block-paragraph">入力途中のデータを扱うときに便利なパターンですよ。</p>



<h2 class="wp-block-heading"><span id="toc15">IFNA関数とIFERROR関数の違い・使い分け</span></h2>



<p class="wp-block-paragraph">IFNA関数と<a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>は構文が同じですが、動作が異なります。大きな違いは「処理するエラーの範囲」です。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>IFNA</th><th>IFERROR</th></tr></thead><tbody><tr><td>対象エラー</td><td>#N/Aのみ</td><td>全7種のエラー</td></tr><tr><td>主な用途</td><td>VLOOKUP等の「該当なし」だけ処理</td><td>汎用的なエラー処理</td></tr><tr><td>バグ発見</td><td>#N/A以外はそのまま表示される</td><td>エラーを隠す可能性あり</td></tr><tr><td>構文</td><td>=IFNA(値, NA時の値)</td><td>=IFERROR(値, エラー時の値)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">具体的に、同じ数式にミスがあった場合の動作を比較してみましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>発生したエラー</th><th>IFNA関数</th><th>IFERROR関数</th></tr></thead><tbody><tr><td>#N/A（検索値なし）</td><td>代替値を表示</td><td>代替値を表示</td></tr><tr><td>#REF!（参照先削除）</td><td>#REF!をそのまま表示</td><td>代替値を表示</td></tr><tr><td>#VALUE!（データ型不正）</td><td>#VALUE!をそのまま表示</td><td>代替値を表示</td></tr><tr><td>#NAME?（関数名ミス）</td><td>#NAME?をそのまま表示</td><td>代替値を表示</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">IFERRORだと#REF!や#NAME?も代替値に置き換わります。数式のスペルミスに気づけないリスクがありますよね。</p>



<h3 class="wp-block-heading"><span id="toc16">どちらを使うべき？判断基準</span></h3>



<p class="wp-block-paragraph">使い分けの基準はシンプルです。</p>



<ul class="wp-block-list"><li><strong>VLOOKUPやMATCHの「該当なし」だけ処理したい</strong> → IFNA関数がおすすめ</li><li><strong>割り算のゼロ除算など複数種のエラーをまとめて処理したい</strong> → <a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>が便利</li><li><strong>数式のバグを見逃したくない</strong> → IFNA関数が安全</li></ul>



<p class="wp-block-paragraph">迷ったらIFNA関数を選んでおくのが安全です。想定外のエラーはそのまま残せるので、デバッグしやすくなりますよ。</p>



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



<p class="wp-block-paragraph">IFNA関数自体はシンプルですが、ハマるポイントがあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>症状</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>#N/A以外のエラーも処理したい</td><td>IFNA関数は#N/Aのみ対象</td><td><a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>に切り替える</td></tr><tr><td>#N/Aなのに代替値が表示されない</td><td>IFNA関数の外で#N/Aが発生している</td><td>#N/Aを返す数式をIFNAの第1引数に直接入れる</td></tr><tr><td>#NAME?エラーが出る</td><td>関数名のスペルミス</td><td>関数名は <code>IFNA</code> と正確に入力する</td></tr><tr><td>意図しない空白が表示される</td><td>第2引数を省略している</td><td>表示したい値（0や&#8221;該当なし&#8221;など）を明示する</td></tr><tr><td>#VALUE!がそのまま表示される</td><td>IFNA関数は#VALUE!に反応しない（正常動作）</td><td>#VALUE!も処理したいならIFERROR関数を使う</td></tr><tr><td>#REF!がそのまま表示される</td><td>IFNA関数は#REF!に反応しない（正常動作）</td><td>参照先のセルやシートが正しいか確認する</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>デバッグのコツ</strong></p><p>トラブル発生時は、まずIFNA関数を外して中の数式だけをテストしましょう。#N/A以外のエラーが出ていないか確認できます。「エラーが消えない」と思ったら、実は#N/A以外のエラーだったというケースが多いですよ。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc18">まとめ</span></h2>



<p class="wp-block-paragraph">スプレッドシートのIFNA関数について解説しました。ポイントを振り返りましょう。</p>



<ul class="wp-block-list"><li>IFNA関数の構文は <code>=IFNA(値, NA時の値)</code> の2つの引数</li><li>#N/Aエラーだけを処理し、他のエラーはそのまま表示する</li><li>VLOOKUP+IFNAの組み合わせが実務で最も頻出</li><li>INDEX/MATCH+IFNAで柔軟な検索にも対応</li><li>IFERRORとの違いは「対象エラーの範囲」</li><li>数式のバグを見逃したくないならIFNA関数が安全</li></ul>



<p class="wp-block-paragraph">まずはVLOOKUP+IFNAから試してみてください。#N/Aだけをきれいに処理しつつ、数式の不具合も見逃しません。</p>



<h3 class="wp-block-heading"><span id="toc19">この記事で紹介した関数・関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-iferror-function/">スプレッドシートのIFERROR関数の使い方</a> &#8212; 全エラーをまとめて処理</li><li><a href="https://mashukabu.com/spreadsheet-vlookup-function/">スプレッドシートのVLOOKUP関数の使い方</a> &#8212; 検索の基本</li><li><a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方</a> &#8212; 柔軟なセル参照</li><li><a href="https://mashukabu.com/spreadsheet-match-function/">スプレッドシートのMATCH関数の使い方</a> &#8212; 位置を検索する</li><li><a href="https://mashukabu.com/spreadsheet-if-function/">スプレッドシートのIF関数の使い方</a> &#8212; 条件分岐の基本</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-ifna-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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-2" checked><label class="toc-title" for="toc-checkbox-2">目次</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>
		<item>
		<title>スプレッドシートのCOLUMN関数の使い方｜列番号を取得する方法</title>
		<link>https://mashukabu.com/spreadsheet-column-function/</link>
					<comments>https://mashukabu.com/spreadsheet-column-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 15:13:30 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[ADDRESS関数]]></category>
		<category><![CDATA[COLUMN関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[ROW関数]]></category>
		<category><![CDATA[列番号]]></category>
		<category><![CDATA[横方向連番]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4666</guid>

					<description><![CDATA[スプレッドシートのCOLUMN関数で列番号を取得する方法を解説。横方向の連番作成やINDEX・ADDRESS関数との組み合わせ技、ROW関数との違いまで、実務で使えるテクニックを紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「スプレッドシートで列の番号を調べたいけど、A列が1でB列が2で&#8230;と数えるのは面倒」そんな経験はありませんか？</p>



<p class="wp-block-paragraph">列数が多い表だと、目的の列が何番目か数え間違えることもあります。手作業で数えていると時間もかかりますよね。</p>



<p class="wp-block-paragraph">スプレッドシートのCOLUMN関数を使えば、列番号を一発で取得できます。横方向の連番作成やINDEX関数との組み合わせにも活用できますよ。</p>



<p class="wp-block-paragraph">この記事では、COLUMN関数の基本から応用技まで紹介します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのCOLUMN関数とは？基本の仕組みを理解しよう</a><ol><li><a href="#toc2" tabindex="0">COLUMN関数の基本構文</a></li><li><a href="#toc3" tabindex="0">COLUMN()引数なしとCOLUMN(A1)の違い</a></li></ol></li><li><a href="#toc4" tabindex="0">COLUMN関数で横方向の連番を作る方法</a><ol><li><a href="#toc5" tabindex="0">月別・日別のヘッダーを自動で作る</a></li><li><a href="#toc6" tabindex="0">表の開始列がA列でない場合の対処法</a></li><li><a href="#toc7" tabindex="0">TEXT関数と組み合わせて月名を自動生成する</a></li></ol></li><li><a href="#toc8" tabindex="0">INDEX+COLUMNの組み合わせ技</a><ol><li><a href="#toc9" tabindex="0">INDEX関数と組み合わせて動的に列を切り替える</a></li></ol></li><li><a href="#toc10" tabindex="0">ADDRESS+COLUMNの組み合わせ技</a><ol><li><a href="#toc11" tabindex="0">ADDRESS関数と組み合わせてセル番地を自動生成する</a></li></ol></li><li><a href="#toc12" tabindex="0">COLUMN関数とROW関数の違い・使い分け</a><ol><li><a href="#toc13" tabindex="0">比較表</a></li></ol></li><li><a href="#toc14" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc15" tabindex="0">まとめ</a><ol><li><a href="#toc16" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのCOLUMN関数とは？基本の仕組みを理解しよう</span></h2>



<p class="wp-block-paragraph">COLUMN関数（読み方: カラム関数）は、<strong>セルの列番号を数値で返す関数</strong>です。「COLUMN」は英語で「列」を意味します。</p>



<p class="wp-block-paragraph">たとえばセルC1にCOLUMN関数を入力すると、結果は「3」です。C列は左から3番目なので、その位置を数値で教えてくれます。</p>



<p class="wp-block-paragraph">COLUMN関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>セルの列番号を数値で返す</li><li>引数を省略すると、数式が入っているセル自身の列番号を返す</li><li>横方向の連番作成に使える</li><li>他の関数と組み合わせて動的な参照を作れる</li></ul>



<h3 class="wp-block-heading"><span id="toc2">COLUMN関数の基本構文</span></h3>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/spreadsheet-sumif-function_01_data_sample-table.png" alt="01 data sample table" /></figure>



<pre class="wp-block-code"><code>=COLUMN([セル参照])</code></pre>



<p class="wp-block-paragraph">カッコの中に、列番号を知りたいセルを指定します。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>セル参照</td><td>任意</td><td>列番号を調べたいセル。省略すると数式のあるセル自身の列番号を返す</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">引数は1つだけで、しかも省略できます。ROW関数と同じく、とてもシンプルな構文ですね。</p>



<h3 class="wp-block-heading"><span id="toc3">COLUMN()引数なしとCOLUMN(A1)の違い</span></h3>



<p class="wp-block-paragraph">COLUMN関数の使い方は大きく2つあります。</p>



<pre class="wp-block-code"><code>=COLUMN()</code></pre>



<p class="wp-block-paragraph">引数なしで使うと、<strong>数式が入っているセルの列番号</strong>を返します。セルD3に入力すれば結果は「4」です。D列は左から4番目ですね。</p>



<pre class="wp-block-code"><code>=COLUMN(A1)</code></pre>



<p class="wp-block-paragraph">セル参照を指定すると、<strong>そのセルの列番号</strong>を返します。どのセルに入力しても結果は「1」です。A列は常に1番目だからです。</p>



<p class="wp-block-paragraph">範囲を指定した場合は、先頭列の番号だけが返ります。</p>



<pre class="wp-block-code"><code>=COLUMN(C3:F10)</code></pre>



<p class="wp-block-paragraph">この結果は「3」です。C列からF列の範囲のうち、先頭のC列の列番号が返る仕組みです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/02_formula_column-basic.png" alt="02 formula column basic" /></figure>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/03_result_column-basic.png" alt="03 result column basic" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>COLUMN関数はGoogleスプレッドシートの全バージョンで使えます。Excelでもまったく同じ構文で動作しますよ。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc4">COLUMN関数で横方向の連番を作る方法</span></h2>



<p class="wp-block-paragraph">COLUMN関数の最も実用的な使い方が、<strong>横方向に並ぶ連番</strong>の作成です。</p>



<h3 class="wp-block-heading"><span id="toc5">月別・日別のヘッダーを自動で作る</span></h3>



<p class="wp-block-paragraph">たとえば、B1セルから右方向に「1, 2, 3&#8230;」と月番号を振りたい場合です。</p>



<pre class="wp-block-code"><code>=COLUMN()-1</code></pre>



<p class="wp-block-paragraph">B1セルに入力すると <code>2-1=1</code>、C1セルなら <code>3-1=2</code> になります。数式を右にコピーするだけで連番が完成します。</p>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/spreadsheet-column-function/04_formula_column-serial.png/">_images/spreadsheet-column-function/04_formula_column-serial.png</a></p>



<p class="wp-block-paragraph">列の挿入・削除にも自動で対応するので、手入力の番号より管理がラクです。</p>



<h3 class="wp-block-heading"><span id="toc6">表の開始列がA列でない場合の対処法</span></h3>



<p class="wp-block-paragraph">実務では、表の左側にラベル列があるケースが多いですよね。たとえばデータがD列から始まる場合を考えてみましょう。</p>



<p class="wp-block-paragraph"><code>=COLUMN()-1</code> だとD列のセルは「3」になってしまいます。こんなときは次の数式を使います。</p>



<pre class="wp-block-code"><code>=COLUMN()-COLUMN($D$1)+1</code></pre>



<p class="wp-block-paragraph"><code>$D$1</code> はデータ開始列のセルです。絶対参照にするのがポイントです。</p>



<figure class="wp-block-table"><table><thead><tr><th>セル位置</th><th>計算内容</th><th>結果</th></tr></thead><tbody><tr><td>D列</td><td>4 &#8211; 4 + 1</td><td>1</td></tr><tr><td>E列</td><td>5 &#8211; 4 + 1</td><td>2</td></tr><tr><td>F列</td><td>6 &#8211; 4 + 1</td><td>3</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/spreadsheet-column-function/05_result_column-offset-serial.png/">_images/spreadsheet-column-function/05_result_column-offset-serial.png</a></p>



<p class="wp-block-paragraph">この方法なら、表がどの列から始まっても正しい連番になります。列を挿入・削除しても自動で振り直されるので安心ですよ。</p>



<h3 class="wp-block-heading"><span id="toc7">TEXT関数と組み合わせて月名を自動生成する</span></h3>



<p class="wp-block-paragraph">COLUMN関数で作った連番を月名に変換するテクニックです。</p>



<pre class="wp-block-code"><code>=TEXT(DATE(2026,COLUMN()-1,1),&quot;M月&quot;)</code></pre>



<p class="wp-block-paragraph">B1セルに入力して右にコピーすると、「1月, 2月, 3月&#8230;」と月名ヘッダーが自動で並びます。</p>



<p class="wp-block-paragraph">DATE関数で各月の1日を作り、TEXT関数で月名に整形する流れです。COLUMN()-1 の部分が月番号になっています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>縦方向の連番にはROW関数、横方向の連番にはCOLUMN関数と覚えておくと迷いません。ROW関数の詳しい使い方は「<a href="https://mashukabu.com/spreadsheet-row-function/">スプレッドシートのROW関数の使い方</a>」で解説しています。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc8">INDEX+COLUMNの組み合わせ技</span></h2>



<h3 class="wp-block-heading"><span id="toc9">INDEX関数と組み合わせて動的に列を切り替える</span></h3>



<p class="wp-block-paragraph">INDEX関数（指定した範囲から行番号・列番号で値を取り出す関数）と組み合わせると、<strong>列の位置に連動して参照先が自動的に変わる数式</strong>を作れます。</p>



<p class="wp-block-paragraph">たとえば、A1:E10に売上データが入っているとします。2行目以降のデータを、列番号に連動して取り出すケースです。</p>



<pre class="wp-block-code"><code>=INDEX($A$1:$E$10, 2, COLUMN())</code></pre>



<p class="wp-block-paragraph">A列に入力すると1列目、B列なら2列目の値が取り出されます。数式を右にコピーするだけで、各列のデータを横に並べられます。</p>



<p class="wp-block-paragraph">データの開始列がずれている場合は、オフセットを加えます。</p>



<pre class="wp-block-code"><code>=INDEX($A$1:$E$10, 2, COLUMN()-COLUMN($C$1)+1)</code></pre>



<p class="wp-block-paragraph">C1セルから数式を入力し始める場合の例です。COLUMN()-COLUMN($C$1)+1 で常に1から始まる連番を作り、INDEXの列番号に渡しています。</p>



<p class="wp-block-paragraph">この組み合わせが活きる場面は次のとおりです。</p>



<ul class="wp-block-list"><li>元データの列順を変えずに、別の場所で並び替えた表を作りたいとき</li><li>ダッシュボードで表示項目を切り替えたいとき</li><li>複数シートから同じ列位置のデータを集約したいとき</li></ul>



<p class="wp-block-paragraph">INDEX関数の詳しい使い方は「<a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方</a>」で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc10">ADDRESS+COLUMNの組み合わせ技</span></h2>



<h3 class="wp-block-heading"><span id="toc11">ADDRESS関数と組み合わせてセル番地を自動生成する</span></h3>



<p class="wp-block-paragraph">ADDRESS関数（行番号と列番号からセル番地の文字列を作る関数）にCOLUMN関数の結果を渡すと、<strong>セル番地を動的に生成</strong>できます。</p>



<pre class="wp-block-code"><code>=ADDRESS(1, COLUMN())</code></pre>



<p class="wp-block-paragraph">A列に入力すると「$A$1」、B列なら「$B$1」が返ります。列の位置に応じてセル番地が自動で変わる仕組みです。</p>



<p class="wp-block-paragraph">INDIRECT関数と組み合わせれば、生成したセル番地をそのまま参照に変換できます。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(ROW(), COLUMN()-1))</code></pre>



<p class="wp-block-paragraph">この数式は「自分の1つ左のセルの値」を返します。ROW関数で行番号、COLUMN()-1 で1つ左の列番号を取得し、ADDRESS関数でセル番地を組み立てています。</p>



<p class="wp-block-paragraph">こうした動的参照は、次のような場面で便利です。</p>



<ul class="wp-block-list"><li>累計計算で「1つ前のセルの値を足す」パターン</li><li>条件によって参照先の列を切り替えたいとき</li><li>マクロを使わずに柔軟なセル参照を実現したいとき</li></ul>



<p class="wp-block-paragraph">ADDRESS関数の詳しい使い方は「<a href="https://mashukabu.com/spreadsheet-address-function/">スプレッドシートのADDRESS関数の使い方</a>」を参考にしてみてください。</p>



<h2 class="wp-block-heading"><span id="toc12">COLUMN関数とROW関数の違い・使い分け</span></h2>



<p class="wp-block-paragraph">COLUMN関数とROW関数は、どちらもセルの位置を数値で返す関数です。取得する方向が異なります。</p>



<h3 class="wp-block-heading"><span id="toc13">比較表</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>COLUMN関数</th><th>ROW関数</th></tr></thead><tbody><tr><td>返す値</td><td>列番号（横方向の位置）</td><td>行番号（縦方向の位置）</td></tr><tr><td>構文</td><td><code>=COLUMN([セル参照])</code></td><td><code>=ROW([セル参照])</code></td></tr><tr><td>使用例</td><td><code>=COLUMN(C1)</code> → 3</td><td><code>=ROW(A3)</code> → 3</td></tr><tr><td>連番の方向</td><td>横方向（右にコピー）</td><td>縦方向（下にコピー）</td></tr><tr><td>よくある用途</td><td>横の連番、列ベースの動的参照</td><td>縦の連番、行ベースの動的参照</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">使い分けのポイントはシンプルです。</p>



<ul class="wp-block-list"><li><strong>横方向の連番やヘッダー</strong> → COLUMN関数</li><li><strong>縦方向の連番やナンバリング</strong> → ROW関数</li></ul>



<p class="wp-block-paragraph">また、COLUMNS関数（範囲の列数を数える関数）との混同に注意してください。COLUMN関数は「<strong>何列目か</strong>」、COLUMNS関数は「<strong>何列あるか</strong>」を返す別の関数です。</p>



<pre class="wp-block-code"><code>=COLUMN(C3:F10)    → 3（先頭列の列番号）
=COLUMNS(C3:F10)   → 4（範囲の列数）</code></pre>



<p class="wp-block-paragraph">ROW関数の詳しい使い方は「<a href="https://mashukabu.com/spreadsheet-row-function/">スプレッドシートのROW関数の使い方</a>」で解説しています。</p>



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



<p class="wp-block-paragraph">COLUMN関数自体は非常にシンプルなので、単独でエラーになることはほとんどありません。ただし、他の関数と組み合わせたときにエラーが出るケースがあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#REF!</code></td><td>参照先のセルや列が削除された</td><td>数式内のセル参照を確認し、有効な範囲に修正する</td></tr><tr><td><code>#VALUE!</code></td><td>COLUMN関数に文字列を渡した</td><td>引数にはセル参照のみ指定する。<code>"A1"</code> のような文字列は不可</td></tr><tr><td><code>#REF!</code>（INDIRECT併用時）</td><td>INDIRECT関数の参照先が存在しない</td><td>シート名やセルアドレスの文字列を確認する</td></tr><tr><td>連番がずれる</td><td>列の挿入・削除でオフセットが変わった</td><td><code>=COLUMN()-COLUMN($開始セル)+1</code> の形式で、開始セルを絶対参照にする</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に注意したいのが「連番がずれる」ケースです。単純な <code>=COLUMN()-1</code> だと、列を挿入したときにオフセット値が合わなくなります。</p>



<p class="wp-block-paragraph">安全に連番を作りたい場合は、<code>=COLUMN()-COLUMN($開始セル)+1</code> のパターンを使ってください。開始セルを絶対参照にしておけば、列の挿入・削除に強くなりますよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>COLUMN関数の引数にセルアドレスの文字列を渡すのはよくある間違いです。<code>=COLUMN("C1")</code> はエラーになります。文字列をセル参照に変換したい場合は、INDIRECT関数を使いましょう。<code>=COLUMN(INDIRECT("C1"))</code> のように書けばOKです。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc15">まとめ</span></h2>



<p class="wp-block-paragraph">COLUMN関数は、セルの列番号を返すシンプルな関数です。単体で使うだけでなく、横方向の連番や動的参照の土台として幅広く活用できます。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしておきましょう。</p>



<ul class="wp-block-list"><li>COLUMN関数は引数なしで自分のセルの列番号、セル参照指定でそのセルの列番号を返す</li><li><code>=COLUMN()-COLUMN($開始セル)+1</code> で、表がどの列から始まっても正しい横方向の連番を作れる</li><li>列の挿入・削除にも自動対応するので、手入力の番号より管理がラク</li><li>INDEX関数と組み合わせれば、列位置に連動する動的な値の取得ができる</li><li>ADDRESS関数と組み合わせれば、セル番地の動的生成もできる</li><li>COLUMN関数は「何列目か」、ROW関数は「何行目か」、COLUMNS関数は「何列あるか」</li></ul>



<p class="wp-block-paragraph">まずは <code>=COLUMN()-COLUMN($A$1)+1</code> の横方向連番パターンから試してみてください。月別ヘッダーや日別の集計表で、すぐに効果を実感できますよ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">この記事で紹介した関数・関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-row-function/">スプレッドシートのROW関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-match-function/">スプレッドシートのMATCH関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-address-function/">スプレッドシートのADDRESS関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-column-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのINDEX関数の使い方｜行列指定で値を取得する方法</title>
		<link>https://mashukabu.com/spreadsheet-index-function/</link>
					<comments>https://mashukabu.com/spreadsheet-index-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 15:13:16 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[INDEX+MATCH]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[VLOOKUP]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[検索関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4660</guid>

					<description><![CDATA[スプレッドシートのINDEX関数の引数と基本構文を解説。MATCH関数と組み合わせてVLOOKUPでは難しい左列検索を実現する方法や、VLOOKUPとの使い分け基準も紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「社員番号から名前を引っ張りたいけど、VLOOKUPだと左側の列は検索できない」。スプレッドシートでこんな壁にぶつかったことはありませんか。</p>



<p class="wp-block-paragraph">列の並びを変えれば対応できますが、元の表を崩すのは避けたいですよね。</p>



<p class="wp-block-paragraph">そんなときに頼りになるのがINDEX関数です。行番号と列番号を指定するだけで、表のどこからでも値を取得できます。この記事では、INDEX関数の基本から実践的な使い方まで解説します。MATCH関数との組み合わせやVLOOKUPとの使い分けもカバーします。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのINDEX関数とは？</a></li><li><a href="#toc2" tabindex="0">INDEX関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc5" tabindex="0">INDEX関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">行番号と列番号を指定して値を取得する</a></li><li><a href="#toc7" tabindex="0">行番号・列番号に0を指定する</a></li></ol></li><li><a href="#toc8" tabindex="0">INDEX+MATCHの組み合わせ（実践パターン）</a><ol><li><a href="#toc9" tabindex="0">INDEX+MATCHの基本パターン</a></li><li><a href="#toc10" tabindex="0">左列への逆引き検索（VLOOKUPでは不可能）</a></li><li><a href="#toc11" tabindex="0">2次元検索（行と列の両方をMATCHで検索）</a></li></ol></li><li><a href="#toc12" tabindex="0">VLOOKUPとINDEX+MATCHの使い分け</a><ol><li><a href="#toc13" tabindex="0">どちらを選ぶべき？</a></li></ol></li><li><a href="#toc14" tabindex="0">INDEX関数でよくあるエラーと対処法</a><ol><li><a href="#toc15" tabindex="0">#REF! エラー</a></li><li><a href="#toc16" tabindex="0">#VALUE! エラー</a></li><li><a href="#toc17" tabindex="0">#N/A エラー（MATCH使用時）</a></li></ol></li><li><a href="#toc18" tabindex="0">INDEX関数のまとめ</a><ol><li><a href="#toc19" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのINDEX関数とは？</span></h2>



<p class="wp-block-paragraph">INDEX関数（読み方: インデックス関数）は、範囲内の指定した行・列の位置にある値を返す関数です。名前はIndex（索引・見出し）が由来で、「表の中から座標を指定してピンポイントで値を取り出す」イメージです。</p>



<p class="wp-block-paragraph">INDEX関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>行番号と列番号を指定して、表から値を1つ取得する</li><li>行番号に0を指定して、列全体を配列として返す</li><li>MATCH関数（検索値の位置番号を返す関数）と組み合わせて柔軟な検索を行う</li><li>VLOOKUPでは不可能な左方向への検索を実現する</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Googleスプレッドシートではarea_num（区画番号）引数に対応していません。Excelから数式を移行する場合はご注意ください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">INDEX関数の書き方（構文と引数）</span></h2>



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



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



<pre class="wp-block-code"><code>=INDEX(参照, [行], [列])</code></pre>



<p class="wp-block-paragraph">引数は3つあります。行と列はどちらも省略できます。</p>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</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>A2:D5</td></tr><tr><td>行</td><td>省略可</td><td>範囲内の行番号（1から数える）</td><td>2</td></tr><tr><td>列</td><td>省略可</td><td>範囲内の列番号（1から数える）</td><td>3</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">行と列にはそれぞれ特殊な指定方法があります。</p>



<ul class="wp-block-list"><li><strong>0を指定した場合</strong>: 行に0を指定すると列全体、列に0を指定すると行全体を配列として返します</li><li><strong>省略した場合</strong>: 省略すると1が指定されたものとして扱われます</li></ul>



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



<h3 class="wp-block-heading"><span id="toc6">行番号と列番号を指定して値を取得する</span></h3>



<p class="wp-block-paragraph">次の社員管理表を例に見てみましょう。A1:D5にデータが入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>社員番号</th><th>名前</th><th>部署</th><th>内線番号</th></tr></thead><tbody><tr><td>1001</td><td>田中</td><td>営業部</td><td>3001</td></tr><tr><td>1002</td><td>佐藤</td><td>経理部</td><td>3002</td></tr><tr><td>1003</td><td>鈴木</td><td>人事部</td><td>3003</td></tr><tr><td>1004</td><td>高橋</td><td>総務部</td><td>3004</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/spreadsheet-index-function/01_data_employee-table.png/">_images/spreadsheet-index-function/01_data_employee-table.png</a></p>



<p class="wp-block-paragraph">データ部分（A2:D5）から2行目・3列目の値を取得するにはこう書きます。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D5, 2, 3)</code></pre>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/02_formula_index-basic.png" alt="02 formula index basic" /></figure>



<p class="wp-block-paragraph">結果は「経理部」です。A2:D5の2行目は佐藤の行、3列目は部署の列なので、その交差する値が返ります。</p>



<p class="wp-block-paragraph">もう1つ試してみましょう。3行目・2列目を指定します。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D5, 3, 2)</code></pre>



<p class="wp-block-paragraph">結果は「鈴木」です。行と列の番号は範囲の左上を起点にカウントする点がポイントです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/03_result_index-basic.png" alt="03 result index basic" /></figure>



<h3 class="wp-block-heading"><span id="toc7">行番号・列番号に0を指定する</span></h3>



<p class="wp-block-paragraph">行番号に0を指定すると、指定した列全体が配列として返ります。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D5, 0, 2)</code></pre>



<p class="wp-block-paragraph">この数式は名前列（B列のデータ部分）を丸ごと返します。SUM関数やAVERAGE関数の引数として使うと便利です。</p>



<p class="wp-block-paragraph">同様に列番号に0を指定すると、指定した行全体が返ります。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D5, 1, 0)</code></pre>



<p class="wp-block-paragraph">結果は田中の行全体（1001, 田中, 営業部, 3001）です。</p>



<h2 class="wp-block-heading"><span id="toc8">INDEX+MATCHの組み合わせ（実践パターン）</span></h2>



<p class="wp-block-paragraph">INDEX関数の真価は、MATCH関数と組み合わせたときに発揮されます。MATCH関数は検索値が範囲内の何番目にあるかを返す関数です。</p>



<h3 class="wp-block-heading"><span id="toc9">INDEX+MATCHの基本パターン</span></h3>



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



<pre class="wp-block-code"><code>=INDEX(戻り値の範囲, MATCH(検索値, 検索範囲, 0))</code></pre>



<p class="wp-block-paragraph">MATCH関数の第3引数「0」は完全一致を意味します。</p>



<p class="wp-block-paragraph">先ほどの社員管理表で、社員番号1003の部署を取得してみましょう。</p>



<pre class="wp-block-code"><code>=INDEX(C2:C5, MATCH(1003, A2:A5, 0))</code></pre>



<p class="wp-block-paragraph">処理の流れを順に見ていきます。</p>



<ol class="wp-block-list"><li>MATCH(1003, A2:A5, 0) → A2:A5の中で1003は3番目 → 「3」を返す</li><li>INDEX(C2:C5, 3) → C2:C5の3番目 → 「人事部」を返す</li></ol>



<p class="wp-block-paragraph">VLOOKUPと似た動きですが、検索列と戻り値の列を別々に指定できるのが大きな違いです。</p>



<h3 class="wp-block-heading"><span id="toc10">左列への逆引き検索（VLOOKUPでは不可能）</span></h3>



<p class="wp-block-paragraph">INDEX+MATCHが最も活躍するのが、左方向への検索です。</p>



<p class="wp-block-paragraph">たとえば「経理部の社員番号を知りたい」とします。部署（C列）で検索して社員番号（A列）を返す、つまり右から左への検索です。<a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a>では左方向の検索ができないため、この場面ではINDEX+MATCHの出番です。</p>



<pre class="wp-block-code"><code>=INDEX(A2:A5, MATCH(&quot;経理部&quot;, C2:C5, 0))</code></pre>



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



<ol class="wp-block-list"><li>MATCH(&#8220;経理部&#8221;, C2:C5, 0) → C2:C5の中で経理部は2番目 → 「2」を返す</li><li>INDEX(A2:A5, 2) → A2:A5の2番目 → 「1002」を返す</li></ol>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/04_result_index-match-leftlookup.png" alt="04 result index match leftlookup" /></figure>



<p class="wp-block-paragraph">検索範囲と戻り値の範囲を自由に設定できるため、列の位置に制約がありません。</p>



<h3 class="wp-block-heading"><span id="toc11">2次元検索（行と列の両方をMATCHで検索）</span></h3>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、行と列の両方をMATCHで動的に指定することもできます。</p>



<p class="wp-block-paragraph">「社員番号1002の内線番号を取得したい」とします。行の位置も列の位置もMATCHで自動判定する数式です。</p>



<pre class="wp-block-code"><code>=INDEX(A2:D5, MATCH(1002, A2:A5, 0), MATCH(&quot;内線番号&quot;, A1:D1, 0))</code></pre>



<p class="wp-block-paragraph">処理の流れを見てみましょう。</p>



<ol class="wp-block-list"><li>MATCH(1002, A2:A5, 0) → 「2」（2行目）</li><li>MATCH(&#8220;内線番号&#8221;, A1:D1, 0) → 「4」（4列目）</li><li>INDEX(A2:D5, 2, 4) → 「3002」を返す</li></ol>



<p class="wp-block-paragraph">列の見出し名で検索するため、途中に列が追加されても数式が壊れません。大きな表を扱うときに重宝するパターンです。</p>



<h2 class="wp-block-heading"><span id="toc12">VLOOKUPとINDEX+MATCHの使い分け</span></h2>



<p class="wp-block-paragraph">どちらを使うべきか迷う方も多いと思います。比較表で整理しましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>特徴</th><th>VLOOKUP</th><th>INDEX+MATCH</th></tr></thead><tbody><tr><td>左方向検索</td><td>不可</td><td>可能</td></tr><tr><td>列追加への耐性</td><td>弱い（番号がズレる）</td><td>強い（列名で検索）</td></tr><tr><td>数式の読みやすさ</td><td>シンプル</td><td>やや複雑</td></tr><tr><td>処理速度（大量データ）</td><td>やや遅い</td><td>速い</td></tr><tr><td>デフォルトの一致方式</td><td>近似一致（TRUE）</td><td>完全一致（0指定）</td></tr><tr><td>複数列を一括で返す</td><td>不可</td><td>不可</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc13">どちらを選ぶべき？</span></h3>



<p class="wp-block-paragraph">判断基準はシンプルです。</p>



<ul class="wp-block-list"><li><strong>検索列が範囲の左端にある単純な表引き</strong> → VLOOKUPで十分</li><li><strong>左方向への検索が必要</strong> → INDEX+MATCHを使う</li><li><strong>列の追加・削除が頻繁にある表</strong> → INDEX+MATCHが安全</li><li><strong>大量データ（数万行以上）を扱う</strong> → INDEX+MATCHのほうが高速</li></ul>



<p class="wp-block-paragraph">なお、Googleスプレッドシートでは2022年以降、XLOOKUP関数（VLOOKUPより柔軟な検索関数）が使えます。左方向検索やエラー時の既定値指定など、INDEX+MATCHの利点の多くをカバーしています。新しく数式を作るならXLOOKUPも選択肢に入れてみてください。</p>



<p class="wp-block-paragraph">VLOOKUPの詳しい使い方は「<a href="https://mashukabu.com/spreadsheet-vlookup-function/">スプレッドシートのVLOOKUP関数の使い方</a>」で解説しています。横方向の検索が必要な場合は「<a href="https://mashukabu.com/spreadsheet-hlookup-function/">スプレッドシートのHLOOKUP関数の使い方</a>」も参考にしてください。</p>



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



<h3 class="wp-block-heading"><span id="toc15">#REF! エラー</span></h3>



<p class="wp-block-paragraph">行番号または列番号が範囲の大きさを超えているときに出ます。</p>



<p class="wp-block-paragraph">たとえばA2:D5は4行4列の範囲です。行番号に5以上、列番号に5以上を指定すると#REF!エラーになります。範囲のサイズと指定した番号を見直してください。</p>



<h3 class="wp-block-heading"><span id="toc16">#VALUE! エラー</span></h3>



<p class="wp-block-paragraph">行番号や列番号に負の数や文字列を指定すると発生します。</p>



<p class="wp-block-paragraph">MATCH関数の結果が正しく数値を返しているか確認しましょう。セル参照先が空白や文字列になっていないかもチェックポイントです。</p>



<h3 class="wp-block-heading"><span id="toc17">#N/A エラー（MATCH使用時）</span></h3>



<p class="wp-block-paragraph">INDEX+MATCHの組み合わせで起きやすいエラーです。MATCH関数が検索値を見つけられないときに発生します。</p>



<figure class="wp-block-table"><table><thead><tr><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>検索値がデータに存在しない</td><td>データを追加するか、IFERRORで対処</td></tr><tr><td>データ型の不一致（数値と文字列）</td><td>検索値と検索範囲のデータ型を揃える</td></tr><tr><td>余分なスペースが含まれている</td><td>TRIM関数で空白を除去する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">IFERROR関数（エラー時に別の値を返す関数）で囲めば、エラー表示を防げます。</p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(C2:C5, MATCH(1005, A2:A5, 0)), &quot;見つかりません&quot;)</code></pre>



<p class="wp-block-paragraph">社員番号1005はデータに存在しないため、「見つかりません」が表示されます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/05_error_na-iferror.png" alt="05 error na iferror" /></figure>



<h2 class="wp-block-heading"><span id="toc18">INDEX関数のまとめ</span></h2>



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



<ul class="wp-block-list"><li>構文は =INDEX(参照, 行, 列) の3引数。行と列は省略可</li><li>行・列番号は範囲の左上を起点に1から数える</li><li>MATCH関数と組み合わせると、VLOOKUPでは不可能な左方向検索ができる</li><li>2次元検索なら行・列の両方をMATCHで指定する</li><li>エラー対策にはIFERROR関数を組み合わせるのが定番</li></ul>



<p class="wp-block-paragraph">まずはINDEX+MATCHの基本パターンから試してみてください。一度覚えれば、VLOOKUPの制約に悩まされることがなくなります。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-vlookup-function/">スプレッドシートのVLOOKUP関数の使い方｜別シート参照・エラー対処まで解説</a></li><li><a href="https://mashukabu.com/spreadsheet-hlookup-function/">スプレッドシートのHLOOKUP関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方｜VLOOKUPとの違いも解説</a></li><li><a href="https://mashukabu.com/spreadsheet-filter-function/">スプレッドシートのFILTER関数の使い方｜条件に合うデータを自動抽出</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-index-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのMATCH関数の使い方｜INDEX+MATCHで左側も検索できる</title>
		<link>https://mashukabu.com/spreadsheet-match-function/</link>
					<comments>https://mashukabu.com/spreadsheet-match-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 15:13:07 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[INDEX+MATCH]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[VLOOKUP]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[検索関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4656</guid>

					<description><![CDATA[スプレッドシートのMATCH関数の使い方を実務目線で解説。基本の書き方から、INDEX+MATCHでVLOOKUPの左側制限を超えるテクニック、照合の種類0・1・-1の違い、#N/Aエラー対処法まで網羅。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「検索した値が表の何番目にあるか知りたい」。スプレッドシートでデータを扱っていると、そんな場面がよくありますよね。</p>



<p class="wp-block-paragraph">VLOOKUPで値を引っ張ることはできても、位置番号そのものは取得できません。検索列より左にある値を取りたいときも、VLOOKUPだけではお手上げです。</p>



<p class="wp-block-paragraph">そこで活躍するのがMATCH関数です。検索値が範囲の何番目にあるかを数値で返してくれます。この記事では、MATCH関数の基本から実践的な使い方まで解説します。INDEX関数との組み合わせで左側の列を検索する方法や、エラー対策もカバーしていきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-5" checked><label class="toc-title" for="toc-checkbox-5">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのMATCH関数とは？</a></li><li><a href="#toc2" tabindex="0">MATCH関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li><li><a href="#toc5" tabindex="0">検索の種類 0・1・-1 の違い</a></li></ol></li><li><a href="#toc6" tabindex="0">MATCH関数の基本的な使い方</a><ol><li><a href="#toc7" tabindex="0">完全一致で位置を取得する（検索の種類 0）</a></li><li><a href="#toc8" tabindex="0">ワイルドカードで部分一致検索する</a></li></ol></li><li><a href="#toc9" tabindex="0">実践的な使い方・応用例</a><ol><li><a href="#toc10" tabindex="0">INDEX+MATCHで左側の列を検索する（VLOOKUPの制限を超える）</a></li><li><a href="#toc11" tabindex="0">INDEX+MATCHでクロス検索する（行と列を同時に指定）</a></li><li><a href="#toc12" tabindex="0">IFERRORと組み合わせてエラーを防ぐ</a></li></ol></li><li><a href="#toc13" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc14" tabindex="0">MATCH関数とXMATCH関数の違い・使い分け</a><ol><li><a href="#toc15" tabindex="0">どちらを選ぶべき？</a></li></ol></li><li><a href="#toc16" tabindex="0">まとめ</a><ol><li><a href="#toc17" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのMATCH関数とは？</span></h2>



<p class="wp-block-paragraph">MATCH関数（読み方: マッチ関数）は、指定した値が範囲の中で何番目にあるかを返す関数です。名前はMatch（一致する）が由来で、「探している値の位置番号を教えてくれる」イメージです。</p>



<p class="wp-block-paragraph">MATCH関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>検索値が範囲の何番目にあるかを数値で返す</li><li>完全一致・近似一致（以下/以上）の3種類の検索モードに対応する</li><li>ワイルドカードを使った部分一致検索ができる</li><li><a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a>と組み合わせて柔軟な表引きを実現する</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>MATCH関数が返すのは値そのものではなく「位置番号」です。値を直接取得したい場合は、INDEX関数やVLOOKUP関数と組み合わせて使います。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">MATCH関数の書き方（構文と引数）</span></h2>



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



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



<pre class="wp-block-code"><code>=MATCH(検索キー, 範囲, [検索の種類])</code></pre>



<p class="wp-block-paragraph">引数は3つあります。検索の種類は省略できます。</p>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</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</td></tr><tr><td>範囲</td><td>必須</td><td>検索対象の1行または1列の範囲</td><td>A2:A6</td></tr><tr><td>検索の種類</td><td>省略可</td><td>検索モードの指定（0, 1, -1）</td><td>0</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">範囲には1行または1列のみ指定できます。2次元の範囲（A1:C5など）を指定すると#VALUE!エラーになるので注意してください。</p>



<h3 class="wp-block-heading"><span id="toc5">検索の種類 0・1・-1 の違い</span></h3>



<p class="wp-block-paragraph">検索の種類は3つのモードから選べます。</p>



<figure class="wp-block-table"><table><thead><tr><th>検索の種類</th><th>動作</th><th>データの並び順</th></tr></thead><tbody><tr><td>0</td><td>完全一致。値がぴったり一致する位置を返す</td><td>不問</td></tr><tr><td>1（省略時のデフォルト）</td><td>検索キー以下の最大値の位置を返す</td><td>昇順が必須</td></tr><tr><td>-1</td><td>検索キー以上の最小値の位置を返す</td><td>降順が必須</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">実務では完全一致（0）を使うケースがほとんどです。省略すると1（近似一致・昇順）になるため、意図しない結果を防ぐためにも明示的に0を指定するのがおすすめです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>WARNING</strong></p><p>検索の種類を1または-1にするときは、データが正しくソートされている必要があります。ソートされていないと正しい結果が返りません。</p></blockquote>



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



<h3 class="wp-block-heading"><span id="toc7">完全一致で位置を取得する（検索の種類 0）</span></h3>



<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>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/spreadsheet-sumif-function_01_data_sample-table.png" alt="01 data sample table" /></figure>



<p class="wp-block-paragraph">部署列（C2:C6）の中で「総務部」が何番目にあるか調べるにはこう書きます。</p>



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



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/02_formula_match-basic.png" alt="02 formula match basic" /></figure>



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



<p class="wp-block-paragraph">もう1つ試してみましょう。氏名列（B2:B6）の中で「高橋健一」の位置を調べます。</p>



<pre class="wp-block-code"><code>=MATCH(&quot;高橋健一&quot;, B2:B6, 0)</code></pre>



<p class="wp-block-paragraph">結果は「5」です。範囲の先頭から1始まりで数える点がポイントです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/03_result_match-basic.png" alt="03 result match basic" /></figure>



<p class="wp-block-paragraph">なお、MATCH関数は大文字と小文字を区別しません。社員番号で検索する場合、「e003」と入力しても「E003」と同じ結果が返ります。</p>



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



<p class="wp-block-paragraph">検索の種類を0にすると、ワイルドカードが使えます。名前の一部だけで検索したいときに便利です。</p>



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



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



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



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



<p class="wp-block-paragraph">複数一致する場合は最初に見つかった位置が返ります。たとえば「営業部」が2つあるデータで検索すると、先頭側の位置が返る仕組みです。</p>



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



<h3 class="wp-block-heading"><span id="toc10">INDEX+MATCHで左側の列を検索する（VLOOKUPの制限を超える）</span></h3>



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



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a>は検索列が範囲の左端にある必要があります。しかしINDEX+MATCHなら、検索列と戻り値の列を自由に指定できます。</p>



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



<p class="wp-block-paragraph">まずは、部署列から「営業部」の位置を取得するシンプルな例を見てみましょう。</p>



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



<p class="wp-block-paragraph">処理の流れを順に見ていきます。</p>



<ol class="wp-block-list"><li>MATCH(&#8220;営業部&#8221;, C2:C6, 0) → C2:C6の中で「営業部」は1番目 → 「1」を返す</li><li>INDEX(A2:A6, 1) → A2:A6の1番目 → 「E001」を返す</li></ol>



<p class="wp-block-paragraph">検索範囲（C列）と戻り値の範囲（A列）を別々に指定できるため、左方向の検索も問題ありません。VLOOKUPでは実現できない逆引き検索です。</p>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/spreadsheet-match-function/04_result_index-match-leftlookup.png/">_images/spreadsheet-match-function/04_result_index-match-leftlookup.png</a></p>



<h3 class="wp-block-heading"><span id="toc11">INDEX+MATCHでクロス検索する（行と列を同時に指定）</span></h3>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、やっていることはシンプルです。行と列の両方をMATCHで動的に指定することで、クロス検索ができます。</p>



<p class="wp-block-paragraph">「社員番号E003の役職を取得したい」とします。行の位置も列の位置もMATCHで自動判定する数式です。</p>



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



<p class="wp-block-paragraph">処理の流れを見てみましょう。</p>



<ol class="wp-block-list"><li>MATCH(&#8220;E003&#8221;, A2:A6, 0) → 「3」（3行目）</li><li>MATCH(&#8220;役職&#8221;, A1:D1, 0) → 「4」（4列目）</li><li>INDEX(A2:D6, 3, 4) → 「部長」を返す</li></ol>



<p class="wp-block-paragraph">列の見出し名で検索するため、途中に列が追加されても数式が壊れません。大きな表を扱うときに重宝するパターンです。</p>



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



<p class="wp-block-paragraph">MATCH関数は検索値が見つからないと#N/Aエラーを返します。IFERROR関数（エラー時に別の値を返す関数）で囲めば、エラー表示を防げます。</p>



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



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



<p class="wp-block-paragraph">INDEX+MATCHと組み合わせる場合は、全体をIFERRORで囲みます。</p>



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



<p class="wp-block-paragraph">社員番号E010はデータに存在しないため、「見つかりません」が表示されます。共有シートなど他の人が使う表では、IFERRORを付けておくのがおすすめです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/06/05_result_iferror.png" alt="05 result iferror" /></figure>



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



<p class="wp-block-paragraph">MATCH関数で発生しやすいエラーとその原因をまとめます。</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>検索の種類1/-1でデータが正しくソートされていない</td><td>データを昇順/降順に並べ替えるか、検索の種類を0にする</td></tr><tr><td>#N/A</td><td>データ型の不一致（数値と文字列の混在）</td><td>検索値と範囲のデータ型を揃える</td></tr><tr><td>#VALUE!</td><td>範囲に2次元の範囲を指定した（例: A1:C5）</td><td>1行または1列の範囲に変更する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特にありがちなのが、データ型の不一致です。セルの見た目は同じ数字でも、片方が数値・もう片方が文字列だとMATCH関数は一致と判定しません。</p>



<p class="wp-block-paragraph">確認するにはセルを選択して、数式バーの表示をチェックしてください。文字列として入力された数字には左寄せ表示になる特徴があります。VALUE関数（文字列を数値に変換する関数）で型を揃えると解決します。</p>



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



<p class="wp-block-paragraph">Googleスプレッドシートでは2022年以降、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>完全一致（0）</td></tr><tr><td>近似一致のソート要件</td><td>昇順/降順が必須</td><td>ソート不要</td></tr><tr><td>逆方向検索（末尾から検索）</td><td>不可</td><td>可能（検索モード-1）</td></tr><tr><td>ワイルドカード</td><td>検索の種類0で使用可</td><td>ワイルドカードモード（2）で使用可</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">XMATCHの大きなメリットは2つあります。</p>



<ul class="wp-block-list"><li><strong>デフォルトが完全一致</strong>。検索の種類を省略しても正確な結果が返ります</li><li><strong>逆方向検索ができる</strong>。同じ値が複数ある場合、末尾側の位置を取得できます</li></ul>



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



<p class="wp-block-paragraph">上の数式はMATCH関数で書くと次のようになります。</p>



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



<p class="wp-block-paragraph">XMATCHのほうが引数を省略できる分、シンプルに書けます。</p>



<h3 class="wp-block-heading"><span id="toc15">どちらを選ぶべき？</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の逆方向検索を使う</li></ul>



<p class="wp-block-paragraph">なお、ExcelファイルをGoogleスプレッドシートで開く場合、XMATCHはExcel 2021以降でしか対応していません。互換性が気になるならMATCH関数を使っておくのが安心です。</p>



<h2 class="wp-block-heading"><span id="toc16">まとめ</span></h2>



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



<ul class="wp-block-list"><li>構文は =MATCH(検索キー, 範囲, 検索の種類) の3引数。検索の種類は省略可</li><li>検索の種類は0（完全一致）を明示するのがおすすめ。省略時は1（近似一致）</li><li>戻り値は「位置番号」。値そのものを取得するにはINDEX関数と組み合わせる</li><li>INDEX+MATCHで<a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP関数</a>では不可能な左方向の検索ができる</li><li>ワイルドカード（*、?）を使えば部分一致検索にも対応</li><li>エラー対策にはIFERROR関数を組み合わせるのが定番</li></ul>



<p class="wp-block-paragraph">まずは=MATCH(&#8220;検索値&#8221;, 範囲, 0)の完全一致パターンから試してみてください。位置番号の仕組みがわかれば、INDEX+MATCHの応用もスムーズに進みます。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方｜行列指定で値を取得する方法</a></li><li><a href="https://mashukabu.com/spreadsheet-vlookup-function/">スプレッドシートのVLOOKUP関数の使い方｜別シート参照・エラー対処まで解説</a></li><li><a href="https://mashukabu.com/spreadsheet-hlookup-function/">スプレッドシートのHLOOKUP関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-match-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VLOOKUP・XLOOKUP・INDEX MATCH使い分け完全ガイド｜もう迷わない選び方フロー付き</title>
		<link>https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/</link>
					<comments>https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 12:29:57 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[VLOOKUP関数]]></category>
		<category><![CDATA[XLOOKUP関数]]></category>
		<category><![CDATA[検索関数]]></category>
		<category><![CDATA[関数比較]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4029</guid>

					<description><![CDATA[VLOOKUP・XLOOKUP・INDEX/MATCHの違いをバージョン互換性・検索方向・エラー処理・処理速度の4軸で比較。あなたのExcel環境に合った関数が一目でわかる選び方フローチャート付き。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「VLOOKUPとXLOOKUPって何が違うの？」と迷ったことはありませんか。「INDEX+MATCHのほうがいい」なんて声も聞きますよね。</p>



<p class="wp-block-paragraph">Excelの検索関数は選択肢が多いぶん、どれを覚えるべきか迷いますよね。間違った関数を選ぶと、あとから数式を全部書き直すハメになることも。</p>



<p class="wp-block-paragraph">この記事では、3つの検索関数の違いを4つの比較軸で整理します。記事の最後には「あなたが今日から使うべき関数」がわかる選び方フローも用意しました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>この記事は次のような人におすすめ</strong><br>&#8211; VLOOKUPしか使ったことがない人<br>&#8211; XLOOKUPに乗り換えるべきか迷っている人<br>&#8211; INDEX+MATCHの実力を知りたい人</p></blockquote>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VLOOKUP・XLOOKUP・INDEX/MATCHの違い【結論から】</a><ol><li><a href="#toc2" tabindex="0">3関数の機能比較表</a></li><li><a href="#toc3" tabindex="0">今日から使うべき検索関数がわかる選び方フロー</a></li></ol></li><li><a href="#toc4" tabindex="0">VLOOKUP関数の特徴とメリット・デメリット</a><ol><li><a href="#toc5" tabindex="0">VLOOKUPの基本構文</a></li><li><a href="#toc6" tabindex="0">VLOOKUPのメリット</a></li><li><a href="#toc7" tabindex="0">VLOOKUPのデメリット</a></li></ol></li><li><a href="#toc8" tabindex="0">XLOOKUP関数の特徴とメリット・デメリット</a><ol><li><a href="#toc9" tabindex="0">XLOOKUPの基本構文</a></li><li><a href="#toc10" tabindex="0">XLOOKUPのメリット</a></li><li><a href="#toc11" tabindex="0">XLOOKUPのデメリット</a></li></ol></li><li><a href="#toc12" tabindex="0">INDEX/MATCH関数の特徴とメリット・デメリット</a><ol><li><a href="#toc13" tabindex="0">INDEX/MATCHの基本構文</a></li><li><a href="#toc14" tabindex="0">INDEX/MATCHのメリット</a></li><li><a href="#toc15" tabindex="0">INDEX/MATCHのデメリット</a></li></ol></li><li><a href="#toc16" tabindex="0">4つの比較軸で徹底比較</a><ol><li><a href="#toc17" tabindex="0">比較1: バージョン互換性</a></li><li><a href="#toc18" tabindex="0">比較2: 検索方向（左方向検索への対応）</a></li><li><a href="#toc19" tabindex="0">比較3: エラー処理の手間</a></li><li><a href="#toc20" tabindex="0">比較4: 処理速度（大量データ時の違い）</a></li></ol></li><li><a href="#toc21" tabindex="0">よくある失敗パターンと対処法</a><ol><li><a href="#toc22" tabindex="0">パターン1: #N/Aエラーが出る</a></li><li><a href="#toc23" tabindex="0">パターン2: VLOOKUPの列番号ずれを防ぐ方法</a></li><li><a href="#toc24" tabindex="0">パターン3: XLOOKUPが使えないときの代替策</a></li></ol></li><li><a href="#toc25" tabindex="0">まとめ</a><ol><li><a href="#toc26" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VLOOKUP・XLOOKUP・INDEX/MATCHの違い【結論から】</span></h2>



<p class="wp-block-paragraph">最初に結論をお伝えします。3つの関数の使い分けは次のとおりです。</p>



<ul class="wp-block-list"><li><strong>Microsoft 365 または Excel 2021 を使っている</strong> → XLOOKUPが最適</li><li><strong>Excel 2019以前、または古いバージョンとファイルを共有する</strong> → INDEX+MATCH が安心</li><li><strong>シンプルな右方向の検索だけ</strong> → VLOOKUPでも十分</li></ul>



<h3 class="wp-block-heading"><span id="toc2">3関数の機能比較表</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>VLOOKUP</th><th>XLOOKUP</th><th>INDEX+MATCH</th></tr></thead><tbody><tr><td>対応バージョン</td><td>全バージョン</td><td>Excel 2021 / 365</td><td>全バージョン</td></tr><tr><td>検索方向</td><td>右方向のみ</td><td>左右どちらも</td><td>左右どちらも</td></tr><tr><td>エラー処理</td><td>IFERRORが必要</td><td>第4引数で指定可</td><td>IFERRORが必要</td></tr><tr><td>列挿入への耐性</td><td>弱い（列番号ずれ）</td><td>強い</td><td>強い</td></tr><tr><td>構文の長さ</td><td>短い（4引数）</td><td>短い（実質3引数）</td><td>長い（2関数ネスト）</td></tr><tr><td>学習コスト</td><td>低い</td><td>低い</td><td>やや高い</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc3">今日から使うべき検索関数がわかる選び方フロー</span></h3>



<p class="wp-block-paragraph">自分の環境に合った関数を判定してみてください。</p>



<p class="wp-block-paragraph"><strong>ステップ1: Excelのバージョンを確認</strong></p>



<p class="wp-block-paragraph">お使いのExcelはMicrosoft 365またはExcel 2021ですか？</p>



<ul class="wp-block-list"><li><strong>はい</strong> → ステップ2へ</li><li><strong>いいえ（Excel 2019以前）</strong> → ステップ3へ</li><li><strong>わからない</strong> → 「ファイル」→「アカウント」で確認できます</li></ul>



<p class="wp-block-paragraph"><strong>ステップ2: ファイルを共有する相手のバージョン</strong></p>



<p class="wp-block-paragraph">古いバージョンのExcelを使う人とファイルを共有しますか？</p>



<ul class="wp-block-list"><li><strong>共有しない、または相手もMicrosoft 365</strong> → <strong>XLOOKUPを使いましょう</strong></li><li><strong>共有する（相手がExcel 2019以前）</strong> → ステップ3へ</li></ul>



<p class="wp-block-paragraph"><strong>ステップ3: 検索方向の確認</strong></p>



<p class="wp-block-paragraph">検索値より左側の列から値を取得する必要がありますか？</p>



<ul class="wp-block-list"><li><strong>はい（左方向の検索が必要）</strong> → <strong>INDEX+MATCHを使いましょう</strong></li><li><strong>いいえ（右方向だけでOK）</strong> → <strong>VLOOKUPでも対応できます</strong></li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>「今からExcelを本気で学ぶなら、まずどれ？」と聞かれたら、答えはXLOOKUPです。Microsoft 365の普及率は年々上がっています。ただし社内の環境がExcel 2019以前の場合は、INDEX+MATCHを覚えておくと安心です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc4">VLOOKUP関数の特徴とメリット・デメリット</span></h2>



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



<pre class="wp-block-code"><code>=VLOOKUP(検索値, 範囲, 列番号, [検索の型])</code></pre>



<p class="wp-block-paragraph">たとえば、社員番号「A003」の名前を取得したい場合です。</p>



<pre class="wp-block-code"><code>=VLOOKUP(&quot;A003&quot;, A1:C10, 3, FALSE)</code></pre>



<p class="wp-block-paragraph">A1:C10の範囲でA列から「A003」を探します。見つかったら同じ行の3列目の値を返します。</p>



<h3 class="wp-block-heading"><span id="toc6">VLOOKUPのメリット</span></h3>



<ul class="wp-block-list"><li><strong>知名度が圧倒的</strong>: Excel入門書やネット記事で最も情報が多い</li><li><strong>全バージョンで動く</strong>: Excel 2007以降ならどの環境でも使える</li><li><strong>構文がシンプル</strong>: 引数4つで覚えやすい</li></ul>



<h3 class="wp-block-heading"><span id="toc7">VLOOKUPのデメリット</span></h3>



<p class="wp-block-paragraph">VLOOKUPには2つの弱点があります。</p>



<p class="wp-block-paragraph"><strong>1. 左方向に検索できない</strong></p>



<p class="wp-block-paragraph">VLOOKUPは範囲の一番左の列で検索します。検索列より左の値は取得できません。</p>



<p class="wp-block-paragraph">たとえばB列の商品コードで検索してA列の商品名を取得する、ということができません。この場合は列の並びを変えるか、別の関数を使う必要があります。</p>



<p class="wp-block-paragraph"><strong>2. 列番号がハードコードでずれやすい</strong></p>



<p class="wp-block-paragraph">第3引数の列番号は「何列目を返すか」を数値で指定します。あとから列を挿入すると番号がずれてしまいます。</p>



<p class="wp-block-paragraph">数式を100個コピーしたあとに列を追加すると、100個すべて修正が必要です。大きな表ほどリスクが高くなります。</p>



<p class="wp-block-paragraph">詳しくは「<a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数の使い方</a>」をご覧ください。</p>



<h2 class="wp-block-heading"><span id="toc8">XLOOKUP関数の特徴とメリット・デメリット</span></h2>



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



<pre class="wp-block-code"><code>=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])</code></pre>



<p class="wp-block-paragraph">同じく社員番号「A003」の名前を取得する場合です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;A003&quot;, A1:A10, C1:C10)</code></pre>



<p class="wp-block-paragraph">VLOOKUPとの違いが一目でわかりますよね。列番号ではなく「どの列を返すか」を直接指定しています。</p>



<h3 class="wp-block-heading"><span id="toc10">XLOOKUPのメリット</span></h3>



<ul class="wp-block-list"><li><strong>左方向の検索ができる</strong>: 検索範囲と戻り範囲を自由に指定可</li><li><strong>エラー処理が組み込み</strong>: 第4引数に「見つからないときの値」を直接指定可</li><li><strong>列番号がないのでずれない</strong>: 列の挿入・削除に強い</li></ul>



<p class="wp-block-paragraph">XLOOKUPでエラー処理を組み込む例です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;A003&quot;, A1:A10, C1:C10, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">見つからない場合は「該当なし」と表示されます。VLOOKUPのようにIFERROR関数で囲む必要がありません。</p>



<h3 class="wp-block-heading"><span id="toc11">XLOOKUPのデメリット</span></h3>



<p class="wp-block-paragraph"><strong>1. 対応バージョンが限られる</strong></p>



<p class="wp-block-paragraph">XLOOKUPはExcel 2021およびMicrosoft 365専用です。Excel 2019以前では <code>#NAME?</code> エラーになります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>社内でExcelのバージョンが混在している場合は要注意です。XLOOKUPで作ったファイルを古いバージョンで開くと、数式がすべてエラーになります。</p></blockquote>



<p class="wp-block-paragraph"><strong>2. ネット上の情報がまだ少ない</strong></p>



<p class="wp-block-paragraph">VLOOKUPと比べると解説記事や質問サイトの情報量が少なめです。困ったときに検索で解決しにくい場面があります。</p>



<p class="wp-block-paragraph">詳しくは「<a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数の使い方</a>」をご覧ください。</p>



<h2 class="wp-block-heading"><span id="toc12">INDEX/MATCH関数の特徴とメリット・デメリット</span></h2>



<h3 class="wp-block-heading"><span id="toc13">INDEX/MATCHの基本構文</span></h3>



<p class="wp-block-paragraph">INDEX関数とMATCH関数を組み合わせて使います。</p>



<pre class="wp-block-code"><code>=INDEX(戻り範囲, MATCH(検索値, 検索範囲, 0))</code></pre>



<p class="wp-block-paragraph">社員番号「A003」の名前を取得する場合です。</p>



<pre class="wp-block-code"><code>=INDEX(C1:C10, MATCH(&quot;A003&quot;, A1:A10, 0))</code></pre>



<p class="wp-block-paragraph">MATCH関数がA列から「A003」の行位置を取得します。INDEX関数がC列の同じ行の値を返します。</p>



<h3 class="wp-block-heading"><span id="toc14">INDEX/MATCHのメリット</span></h3>



<ul class="wp-block-list"><li><strong>全バージョン対応</strong>: Excel 2007以降ならどこでも動く</li><li><strong>左方向の検索ができる</strong>: 検索範囲と戻り範囲が独立</li><li><strong>列の挿入・削除に強い</strong>: 列番号を使わないのでずれない</li><li><strong>処理速度が速い</strong>: 大量データではVLOOKUPより高速</li></ul>



<h3 class="wp-block-heading"><span id="toc15">INDEX/MATCHのデメリット</span></h3>



<p class="wp-block-paragraph"><strong>1. 数式が長くなる</strong></p>



<p class="wp-block-paragraph">2つの関数をネストするので、数式が長くなります。慣れるまでは書き方に戸惑うかもしれません。</p>



<p class="wp-block-paragraph"><strong>2. 学習コストがやや高い</strong></p>



<p class="wp-block-paragraph">INDEX関数とMATCH関数の2つを理解する必要があります。VLOOKUPやXLOOKUPが1つの関数で完結するのに対し、少しハードルが上がります。</p>



<p class="wp-block-paragraph">それぞれの詳しい使い方は以下の記事で解説しています。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-match/">MATCH関数の使い方</a></li></ul>



<h2 class="wp-block-heading"><span id="toc16">4つの比較軸で徹底比較</span></h2>



<p class="wp-block-paragraph">ここからは、3つの関数を4つの軸で詳しく比較していきます。</p>



<h3 class="wp-block-heading"><span id="toc17">比較1: バージョン互換性</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>Excel 2016</th><th>Excel 2019</th><th>Excel 2021</th><th>Microsoft 365</th></tr></thead><tbody><tr><td>VLOOKUP</td><td>使える</td><td>使える</td><td>使える</td><td>使える</td></tr><tr><td>XLOOKUP</td><td>使えない</td><td>使えない</td><td>使える</td><td>使える</td></tr><tr><td>INDEX+MATCH</td><td>使える</td><td>使える</td><td>使える</td><td>使える</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">XLOOKUPだけがExcel 2021以降に限定されています。社内でバージョンが統一されていない場合は、VLOOKUPかINDEX+MATCHを選んでください。</p>



<h3 class="wp-block-heading"><span id="toc18">比較2: 検索方向（左方向検索への対応）</span></h3>



<p class="wp-block-paragraph">VLOOKUPは範囲の最左列で検索し、右方向にしか値を返せません。</p>



<p class="wp-block-paragraph">たとえば次のような表があるとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>A列（商品名）</th><th>B列（商品コード）</th><th>C列（価格）</th></tr></thead><tbody><tr><td>りんご</td><td>F001</td><td>150</td></tr><tr><td>バナナ</td><td>F002</td><td>100</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「商品コード F001 の商品名を知りたい」場合です。VLOOKUPではB列で検索してA列（左側）を返せません。</p>



<ul class="wp-block-list"><li><strong>VLOOKUP</strong>: 不可（補助列の追加が必要）</li><li><strong>XLOOKUP</strong>: <code>=XLOOKUP("F001", B:B, A:A)</code> で簡単にできる</li><li><strong>INDEX+MATCH</strong>: <code>=INDEX(A:A, MATCH("F001", B:B, 0))</code> でできる</li></ul>



<h3 class="wp-block-heading"><span id="toc19">比較3: エラー処理の手間</span></h3>



<p class="wp-block-paragraph">検索値が見つからない場合の動作を比較します。</p>



<p class="wp-block-paragraph"><strong>VLOOKUPの場合（IFERROR関数が必要）</strong></p>



<pre class="wp-block-code"><code>=IFERROR(VLOOKUP(&quot;A999&quot;, A1:C10, 3, FALSE), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph"><strong>XLOOKUPの場合（第4引数で指定）</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;A999&quot;, A1:A10, C1:C10, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph"><strong>INDEX+MATCHの場合（IFERROR関数が必要）</strong></p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(C1:C10, MATCH(&quot;A999&quot;, A1:A10, 0)), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">XLOOKUPが最もシンプルです。エラー処理を関数内で完結できるのは大きなメリットです。</p>



<h3 class="wp-block-heading"><span id="toc20">比較4: 処理速度（大量データ時の違い）</span></h3>



<p class="wp-block-paragraph">数万行を超えるデータで検索する場合、処理速度に差が出ます。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>速度の傾向</th><th>理由</th></tr></thead><tbody><tr><td>VLOOKUP</td><td>やや遅い</td><td>範囲全体を保持するためメモリ効率が低い</td></tr><tr><td>XLOOKUP</td><td>速い</td><td>検索範囲と戻り範囲が分離しており効率的</td></tr><tr><td>INDEX+MATCH</td><td>速い</td><td>MATCHが行位置だけを返すため軽量</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">体感できるほどの差が出るのは、数万行以上の表で大量に数式を使う場合です。数百行程度なら速度差はほぼ気になりません。</p>



<h2 class="wp-block-heading"><span id="toc21">よくある失敗パターンと対処法</span></h2>



<p class="wp-block-paragraph">3つの関数で起きやすいトラブルをまとめました。</p>



<h3 class="wp-block-heading"><span id="toc22">パターン1: #N/Aエラーが出る</span></h3>



<p class="wp-block-paragraph">3つの関数に共通する、最も多いエラーです。</p>



<figure class="wp-block-table"><table><thead><tr><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>検索値のスペルミス</td><td>検索値と表の値を目視で確認する</td></tr><tr><td>余分なスペースが入っている</td><td><a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a>で空白を除去する</td></tr><tr><td>全角・半角の不一致</td><td>ASC関数で半角に統一する</td></tr><tr><td>検索の型がTRUE（近似一致）</td><td>FALSEまたは0を指定して完全一致にする</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">エラー処理には<a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数</a>が便利です。#N/Aだけ処理したい場合は<a href="https://mashukabu.com/excel-function-howto-use-ifna/">IFNA関数</a>もおすすめです。</p>



<h3 class="wp-block-heading"><span id="toc23">パターン2: VLOOKUPの列番号ずれを防ぐ方法</span></h3>



<p class="wp-block-paragraph">VLOOKUPの第3引数に数値を直接書くと、列の追加でずれます。MATCH関数を使って列番号を自動取得する方法があります。</p>



<pre class="wp-block-code"><code>=VLOOKUP(&quot;A003&quot;, A1:E10, MATCH(&quot;価格&quot;, A1:E1, 0), FALSE)</code></pre>



<p class="wp-block-paragraph">ヘッダー行から「価格」列の位置を自動で取得しています。列を挿入しても数式がずれません。</p>



<p class="wp-block-paragraph">ただしここまでするなら、INDEX+MATCHに切り替えるほうが合理的です。</p>



<h3 class="wp-block-heading"><span id="toc24">パターン3: XLOOKUPが使えないときの代替策</span></h3>



<p class="wp-block-paragraph">Excel 2019以前で <code>#NAME?</code> エラーが出る場合です。XLOOKUPの代わりにINDEX+MATCHを使いましょう。</p>



<p class="wp-block-paragraph">XLOOKUP → INDEX+MATCHの書き換え例です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;A003&quot;, A1:A10, C1:C10, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">上の数式はINDEX+MATCHで書くとこうなります。</p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(C1:C10, MATCH(&quot;A003&quot;, A1:A10, 0)), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">機能は同じです。XLOOKUPのほうが短いですが、INDEX+MATCHなら全バージョンで動きます。</p>



<h2 class="wp-block-heading"><span id="toc25">まとめ</span></h2>



<p class="wp-block-paragraph">VLOOKUP・XLOOKUP・INDEX/MATCHの違いを振り返ります。</p>



<figure class="wp-block-table"><table><thead><tr><th>選ぶ基準</th><th>おすすめの関数</th></tr></thead><tbody><tr><td>Excel 2021 / 365 でシンプルに使いたい</td><td>XLOOKUP</td></tr><tr><td>全バージョン対応 + 左方向検索が必要</td><td>INDEX+MATCH</td></tr><tr><td>シンプルな右方向検索だけ</td><td>VLOOKUP</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">迷ったらまずXLOOKUPを試してみてください。もしバージョンの制約がある場合は、INDEX+MATCHを覚えておけば困ることはありません。VLOOKUPは既存の数式を読み解くためにも知っておくと安心です。</p>



<p class="wp-block-paragraph">3つとも「表からデータを探す」という目的は同じです。環境と用途に合った関数を選んでいきましょう。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方｜引数・エラー対処・INDEX+MATCHとの使い分けまで</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-xlookup/">ExcelのXLOOKUP関数の使い方｜VLOOKUPとの違い・エラー対処まで解説</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-match/">ExcelのMATCH関数の使い方｜検索値の位置を取得する方法</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-xmatch/">XMATCH関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-ifna/">IFNA関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Excel】INDEX関数とは？使い方・MATCH連携・エラー対処を解説</title>
		<link>https://mashukabu.com/excel-function-howto-use-index/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-index/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 22 May 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[検索・行列関数]]></category>
		<category><![CDATA[配列]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2303</guid>

					<description><![CDATA[ExcelのINDEX関数の使い方を基本から応用まで解説。構文・引数の意味、MATCH関数との組み合わせ、VLOOKUP・XLOOKUPとの使い分け、よくあるエラーの対処法まで、実務で使える具体例つきで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelのINDEX関数は、表の中から「何行目・何列目」を指定して値を取り出す関数です。</p>



<p class="wp-block-paragraph">「VLOOKUPだと左側の列を検索できない」「もっと柔軟にデータを取り出したい」と思ったことはありませんか？ INDEX関数を覚えると、こうした悩みをスッキリ解決できます。</p>



<p class="wp-block-paragraph">この記事では、INDEX関数の基本構文から、MATCH関数との組み合わせ方、VLOOKUP・XLOOKUPとの使い分け、よくあるエラーの対処法まで、実務で使える具体例をまじえて解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-7" checked><label class="toc-title" for="toc-checkbox-7">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">INDEX関数とは？</a><ol><li><a href="#toc2" tabindex="0">読み方と語源</a></li><li><a href="#toc3" tabindex="0">INDEX関数でできること</a></li><li><a href="#toc4" tabindex="0">配列形式とセル参照形式</a></li></ol></li><li><a href="#toc5" tabindex="0">INDEX関数の書き方（構文と引数）</a><ol><li><a href="#toc6" tabindex="0">基本構文</a></li><li><a href="#toc7" tabindex="0">引数の詳細</a></li></ol></li><li><a href="#toc8" tabindex="0">INDEX関数の基本的な使い方</a><ol><li><a href="#toc9" tabindex="0">指定した行・列の値を取得する</a></li><li><a href="#toc10" tabindex="0">行番号・列番号に0を指定して行全体・列全体を返す</a></li></ol></li><li><a href="#toc11" tabindex="0">INDEX関数とMATCH関数の組み合わせ</a><ol><li><a href="#toc12" tabindex="0">INDEX+MATCHの基本パターン</a></li><li><a href="#toc13" tabindex="0">2方向のINDEX+MATCH（クロス検索）</a></li><li><a href="#toc14" tabindex="0">VLOOKUPとの違い・使い分け</a></li><li><a href="#toc15" tabindex="0">XLOOKUPとの使い分け</a></li></ol></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc17" tabindex="0">#REF! エラー</a></li><li><a href="#toc18" tabindex="0">#VALUE! エラー</a></li><li><a href="#toc19" tabindex="0">#N/A エラー（INDEX+MATCH連携時）</a></li></ol></li><li><a href="#toc20" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">INDEX関数とは？</span></h2>



<h3 class="wp-block-heading"><span id="toc2">読み方と語源</span></h3>



<p class="wp-block-paragraph">読み方は「インデックス関数」です。英語の「index」は「索引・目次」を意味します。表の中から目次のように位置を指定してデータを引っ張ってくる、というイメージですね。</p>



<h3 class="wp-block-heading"><span id="toc3">INDEX関数でできること</span></h3>



<p class="wp-block-paragraph">INDEX関数は、<strong>指定した行番号・列番号の位置にあるセルの値を返す関数</strong>です。</p>



<p class="wp-block-paragraph">たとえば「売上管理表の3行目・2列目の値を取り出したい」というケースで活躍します。VLOOKUPのように検索値を使うのではなく、行と列の番号をダイレクトに指定するのが特徴です。</p>



<p class="wp-block-paragraph">対応環境は、Excel for Microsoft 365、Excel 2024、Excel 2021、Excel 2019、Excel 2016、Excel for the web、Excel for Macです。幅広いバージョンで使えるので安心してください。</p>



<h3 class="wp-block-heading"><span id="toc4">配列形式とセル参照形式</span></h3>



<p class="wp-block-paragraph">実はINDEX関数には「配列形式」と「セル参照形式」の2種類があります。</p>



<ul class="wp-block-list"><li><strong>配列形式</strong>: <code>=INDEX(配列, 行番号, [列番号])</code> — 通常使うのはこちら</li><li><strong>セル参照形式</strong>: <code>=INDEX(参照, 行番号, [列番号], [領域番号])</code> — 複数の離れた範囲を切り替えて扱いたいときに使う</li></ul>



<p class="wp-block-paragraph">実務ではほぼ配列形式で事足りるので、この記事では配列形式を中心に解説します。</p>



<h2 class="wp-block-heading"><span id="toc5">INDEX関数の書き方（構文と引数）</span></h2>



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



<p class="wp-block-paragraph">INDEX関数の構文は次のとおりです。</p>



<pre class="wp-block-code"><code>=INDEX(配列, 行番号, [列番号])</code></pre>



<p class="wp-block-paragraph">引数は3つありますが、列番号は省略できます。配列が1列だけの場合は、行番号だけで値を取り出せるということですね。</p>



<h3 class="wp-block-heading"><span id="toc7">引数の詳細</span></h3>



<p class="wp-block-paragraph">各引数の意味を表にまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>配列</td><td>必須</td><td>値を取り出す対象のセル範囲、または配列定数を指定します</td></tr><tr><td>行番号</td><td>必須（※）</td><td>配列の中で値を取り出したい行の位置を数値で指定します</td></tr><tr><td>列番号</td><td>任意</td><td>配列の中で値を取り出したい列の位置を数値で指定します</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">※列番号を指定する場合は、行番号に <code>0</code> を指定することで省略に相当する扱いになります。</p>



<p class="wp-block-paragraph">ポイントを補足しておきます。</p>



<ul class="wp-block-list"><li><strong>行番号に「0」を指定</strong>すると、列全体の値を配列として返します</li><li><strong>列番号に「0」を指定</strong>すると、行全体の値を配列として返します</li><li>行番号・列番号に配列の範囲外の数値を指定すると、<code>#REF!</code> エラーになります</li></ul>



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



<h3 class="wp-block-heading"><span id="toc9">指定した行・列の値を取得する</span></h3>



<p class="wp-block-paragraph">まずは一番シンプルな使い方です。次のような社員名簿があるとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>1</td><td>名前</td><td>部署</td><td>内線番号</td></tr><tr><td>2</td><td>田中</td><td>営業部</td><td>1001</td></tr><tr><td>3</td><td>佐藤</td><td>経理部</td><td>2001</td></tr><tr><td>4</td><td>鈴木</td><td>人事部</td><td>3001</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ここから「佐藤の内線番号（2行目・3列目）」を取得するには、次のように書きます。</p>



<pre class="wp-block-code"><code>=INDEX(A2:C4, 2, 3)</code></pre>



<p class="wp-block-paragraph">結果は <code>2001</code> が返ります。配列 <code>A2:C4</code> の2行目・3列目、つまりセルC3の値を取り出しているわけです。</p>



<p class="wp-block-paragraph">もうひとつ例を見てみましょう。配列が1列だけの場合は、列番号を省略できます。</p>



<pre class="wp-block-code"><code>=INDEX(A2:A4, 3)</code></pre>



<p class="wp-block-paragraph">この場合は「鈴木」が返ります。1列の範囲から3番目の値を取り出す、というシンプルな使い方です。</p>



<h3 class="wp-block-heading"><span id="toc10">行番号・列番号に0を指定して行全体・列全体を返す</span></h3>



<p class="wp-block-paragraph">行番号または列番号に「0」を指定すると、行全体や列全体の値を配列として取得できます。</p>



<pre class="wp-block-code"><code>=INDEX(A2:C4, 0, 2)</code></pre>



<p class="wp-block-paragraph">この数式は、2列目（B列）の全データ、つまり「営業部」「経理部」「人事部」を配列として返します。SUM関数やAVERAGE関数と組み合わせると便利ですよ。</p>



<pre class="wp-block-code"><code>=SUM(INDEX(A2:C4, 0, 3))</code></pre>



<p class="wp-block-paragraph">こうすると、3列目（内線番号）の合計を返します。ちょっとむずかしく見えますが、やっていることはシンプルです。「0」は「全部ちょうだい」という意味だと覚えておけばOKです。</p>



<h2 class="wp-block-heading"><span id="toc11">INDEX関数とMATCH関数の組み合わせ</span></h2>



<p class="wp-block-paragraph">INDEX関数の真価は、MATCH関数と組み合わせたときに発揮されます。ここが一番実務で役立つパートなので、しっかり押さえておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc12">INDEX+MATCHの基本パターン</span></h3>



<p class="wp-block-paragraph">MATCH関数は、指定した値が範囲内の何番目にあるかを返す関数です。この「何番目か」をINDEX関数の行番号に渡すことで、検索値に対応するデータを柔軟に取り出せます。</p>



<p class="wp-block-paragraph">基本パターンはこちらです。</p>



<pre class="wp-block-code"><code>=INDEX(取り出したい範囲, MATCH(検索値, 検索する範囲, 0))</code></pre>



<p class="wp-block-paragraph">先ほどの社員名簿で、「佐藤」の内線番号を検索値から取得する場合はこうなります。</p>



<pre class="wp-block-code"><code>=INDEX(C2:C4, MATCH(&quot;佐藤&quot;, A2:A4, 0))</code></pre>



<p class="wp-block-paragraph">処理の流れを分解すると、次のようになります。</p>



<ol class="wp-block-list"><li><code>MATCH("佐藤", A2:A4, 0)</code> → 「佐藤」はA2:A4の2番目なので <code>2</code> を返す</li><li><code>INDEX(C2:C4, 2)</code> → C2:C4の2番目の値 <code>2001</code> を返す</li></ol>



<p class="wp-block-paragraph">MATCH関数の第3引数「0」は完全一致を意味します。ほとんどの場合は「0」を指定すると覚えておいてください。</p>



<p class="wp-block-paragraph">MATCH関数の詳しい使い方は、こちらの記事で解説しています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-match/">MATCH関数で範囲内から値を検索し、相対的な位置を取得する</a></p>



<h3 class="wp-block-heading"><span id="toc13">2方向のINDEX+MATCH（クロス検索）</span></h3>



<p class="wp-block-paragraph">MATCH関数を行番号と列番号の両方に入れると、「縦軸と横軸から交差するセルを取り出す」クロス検索ができます。</p>



<p class="wp-block-paragraph">たとえば、商品×月のマトリクス表から「商品B」の「3月」の売上を取り出すには、こう書きます。</p>



<pre class="wp-block-code"><code>=INDEX(B2:D5, MATCH(&quot;商品B&quot;, A2:A5, 0), MATCH(&quot;3月&quot;, B1:D1, 0))</code></pre>



<p class="wp-block-paragraph">行方向と列方向、どちらの検索も柔軟にできるのがINDEX+MATCHの強みです。XLOOKUPが使えない環境でも、この組み合わせなら同じことが実現できます。</p>



<h3 class="wp-block-heading"><span id="toc14">VLOOKUPとの違い・使い分け</span></h3>



<p class="wp-block-paragraph">「VLOOKUPがあるならINDEX+MATCHは要らないのでは？」と思うかもしれません。実は、INDEX+MATCHにはVLOOKUPにない大きなメリットがあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>VLOOKUP</th><th>INDEX+MATCH</th></tr></thead><tbody><tr><td>検索方向</td><td>左端列のみ検索可能</td><td>どの列でも検索可能</td></tr><tr><td>列の挿入・削除</td><td>列番号がずれてエラーの原因になる</td><td>範囲指定なので影響を受けにくい</td></tr><tr><td>処理速度</td><td>データ量が多いと遅くなりやすい</td><td>VLOOKUPより高速な場合がある</td></tr><tr><td>数式の読みやすさ</td><td>シンプルで直感的</td><td>慣れるまでやや複雑</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に重要なのが<strong>検索方向</strong>です。VLOOKUPは検索値が左端列にないと使えませんが、INDEX+MATCHなら検索列と取得列を自由に指定できます。</p>



<p class="wp-block-paragraph">たとえば「内線番号から名前を逆引きしたい」という場合、VLOOKUPでは対応できませんが、INDEX+MATCHなら簡単です。</p>



<pre class="wp-block-code"><code>=INDEX(A2:A4, MATCH(2001, C2:C4, 0))</code></pre>



<p class="wp-block-paragraph">結果は「佐藤」が返ります。検索列が右側にあっても問題なく動くのが、INDEX+MATCHの強みです。</p>



<p class="wp-block-paragraph">VLOOKUPの詳しい使い方はこちらの記事で解説しています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数を徹底解説！初心者でも使いこなせる完全ガイド</a></p>



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



<p class="wp-block-paragraph">Excel for Microsoft 365やExcel 2021以降をお使いなら、XLOOKUP関数という新しい選択肢もあります。VLOOKUPの制限を解消した後継関数で、左方向の検索もスピルにも対応しています。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>対応バージョン</th><th>左方向検索</th><th>数式のシンプルさ</th></tr></thead><tbody><tr><td>VLOOKUP</td><td>全バージョン</td><td>×</td><td>〇</td></tr><tr><td>INDEX+MATCH</td><td>全バージョン</td><td>〇</td><td>△</td></tr><tr><td>XLOOKUP</td><td>365 / 2021以降</td><td>〇</td><td>◎</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">使い分けの目安は次のとおりです。</p>



<ul class="wp-block-list"><li><strong>Excel 2021以降 or Microsoft 365</strong> → XLOOKUPを第一候補に</li><li><strong>Excel 2019以前も含めて使うファイル</strong> → INDEX+MATCHが安全</li><li><strong>シンプルな左端検索だけ</strong> → VLOOKUPでもOK</li></ul>



<p class="wp-block-paragraph">XLOOKUPの詳しい使い方はこちらで解説しています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数を徹底解説！基本から応用まで完全マスター</a></p>



<p class="wp-block-paragraph">3つの関数をまとめて比較したい場合は、こちらの記事もあわせてどうぞ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX+MATCHを徹底比較</a></p>



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



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



<h3 class="wp-block-heading"><span id="toc17">#REF! エラー</span></h3>



<p class="wp-block-paragraph"><code>#REF!</code> エラーは、<strong>行番号や列番号が配列の範囲を超えている</strong>ときに発生します。</p>



<pre class="wp-block-code"><code>=INDEX(A2:C4, 5, 1)</code></pre>



<p class="wp-block-paragraph">この例では、A2:C4は3行しかないのに行番号に「5」を指定しているため、<code>#REF!</code> エラーになります。</p>



<p class="wp-block-paragraph"><strong>対処法:</strong> 配列の行数・列数を確認してください。ROWS関数やCOLUMNS関数で範囲のサイズを確認すると安心です。</p>



<pre class="wp-block-code"><code>=ROWS(A2:C4)    → 3（行数）
=COLUMNS(A2:C4) → 3（列数）</code></pre>



<h3 class="wp-block-heading"><span id="toc18">#VALUE! エラー</span></h3>



<p class="wp-block-paragraph"><code>#VALUE!</code> エラーは、<strong>行番号や列番号に数値以外の値（文字列など）を指定した</strong>場合に発生します。</p>



<pre class="wp-block-code"><code>=INDEX(A2:C4, &quot;二&quot;, 1)</code></pre>



<p class="wp-block-paragraph"><strong>対処法:</strong> 行番号・列番号には必ず数値を指定してください。セル参照を使っている場合は、参照先のセルが数値になっているか確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc19">#N/A エラー（INDEX+MATCH連携時）</span></h3>



<p class="wp-block-paragraph">INDEX単体ではあまり出ませんが、MATCHと組み合わせたときに <code>#N/A</code> が出ることがあります。これはMATCH側で検索値が見つからなかったサインです。</p>



<pre class="wp-block-code"><code>=INDEX(C2:C4, MATCH(&quot;高橋&quot;, A2:A4, 0))</code></pre>



<p class="wp-block-paragraph">A列に「高橋」がいなければ、MATCHが <code>#N/A</code> を返し、そのままINDEXにも伝わってしまいます。</p>



<p class="wp-block-paragraph"><strong>対処法:</strong> IFERROR関数でラップして、見つからなかった場合のメッセージを指定しておくと実務で使いやすくなります。</p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(C2:C4, MATCH(&quot;高橋&quot;, A2:A4, 0)), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">エラー値の種類と対処方法の詳細は、こちらの記事でまとめています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-error-value-list/">セルに表示されるエラーの種類と原因、対処方法を解説</a></p>



<h2 class="wp-block-heading"><span id="toc20">まとめ</span></h2>



<p class="wp-block-paragraph">この記事では、ExcelのINDEX関数について解説しました。ポイントを振り返っておきましょう。</p>



<ul class="wp-block-list"><li><strong>INDEX関数</strong>は、行番号と列番号を指定して表から値を取り出す関数</li><li>基本構文は <code>=INDEX(配列, 行番号, [列番号])</code></li><li><strong>MATCH関数との組み合わせ</strong>で、検索値に対応するデータを柔軟に取得できる</li><li>2方向のINDEX+MATCHなら、クロス表からの検索も可能</li><li>VLOOKUPでは対応できない「左方向の検索」や「逆引き」も可能</li><li>Excel 2021以降なら、より簡潔なXLOOKUPも選択肢に</li><li><code>#REF!</code> は範囲外、<code>#VALUE!</code> は数値以外、<code>#N/A</code> はMATCH側の検索失敗が主な原因</li></ul>



<p class="wp-block-paragraph">INDEX+MATCHは最初はちょっと複雑に感じるかもしれませんが、パターンを覚えてしまえば応用が利く強力な組み合わせです。ぜひ実際のデータで試してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-index/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのXMATCH関数の使い方｜MATCHとの違いを解説</title>
		<link>https://mashukabu.com/excel-function-howto-use-xmatch/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-xmatch/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 07:33:10 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[XMATCH関数]]></category>
		<category><![CDATA[ワイルドカード]]></category>
		<category><![CDATA[完全一致]]></category>
		<category><![CDATA[検索関数]]></category>
		<category><![CDATA[逆順検索]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2418</guid>

					<description><![CDATA[ExcelのXMATCH関数の使い方を解説。MATCH関数との違いを比較表で整理し、一致モード4種・検索モード4種の使い分けをわかりやすく紹介。ワイルドカード検索・逆順検索の実務活用例、INDEX+XMATCHの組み合わせ技まで収録。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelでMATCH関数を使っていて、「逆順に検索できたらいいのに」と感じたことはありませんか？ データが増えるほど、検索の柔軟性が欲しくなりますよね。</p>



<p class="wp-block-paragraph">XMATCH関数なら、その悩みをまるっと解決できます。 逆順検索やワイルドカード検索など、MATCHにはない機能が使えるんです。 この記事では、XMATCH関数の使い方を基本から実務活用まで解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</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">MATCHとXMATCHの違い一覧（比較表）</a></li></ol></li><li><a href="#toc4" tabindex="0">XMATCH関数の使い方：書式と引数</a><ol><li><a href="#toc5" tabindex="0">各引数の意味と省略時の挙動</a></li></ol></li><li><a href="#toc6" tabindex="0">一致モード4種の使い分け</a><ol><li><a href="#toc7" tabindex="0">完全一致（デフォルト・0）</a></li><li><a href="#toc8" tabindex="0">以下で一致（-1）／以上で一致（1）</a></li><li><a href="#toc9" tabindex="0">ワイルドカード一致（2）の実用例</a></li></ol></li><li><a href="#toc10" tabindex="0">検索モード4種の使い分け</a><ol><li><a href="#toc11" tabindex="0">先頭から検索（デフォルト・1）</a></li><li><a href="#toc12" tabindex="0">末尾から逆順検索（-1）の実務ユースケース</a></li><li><a href="#toc13" tabindex="0">バイナリサーチ（2・-2）の使いどき</a></li></ol></li><li><a href="#toc14" tabindex="0">INDEX+XMATCHで表引きをもっと柔軟に</a><ol><li><a href="#toc15" tabindex="0">VLOOKUPより優れている理由</a></li><li><a href="#toc16" tabindex="0">INDEX+XMATCHの実務サンプル</a></li></ol></li><li><a href="#toc17" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc18" tabindex="0">#N/Aが出るケースと回避方法</a></li></ol></li><li><a href="#toc19" tabindex="0">まとめ｜XMATCHはMATCHの上位互換</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">XMATCH関数とは？MATCHとの違いを比較表で整理</span></h2>



<p class="wp-block-paragraph">XMATCH関数は、検索範囲から指定した値を探し出し、その位置（何番目か）を数値で返す関数です。 読み方は「エックスマッチ」。「X」は Extended（拡張）を意味し、MATCH関数を強化した拡張版であることを示しています。 従来の<a href="https://mashukabu.com/excel-function-howto-use-match/">MATCH関数</a>の上位互換にあたります。</p>



<p class="wp-block-paragraph">「位置を返す」というのがポイントです。 値そのものではなく、「上から何番目にあるか」を教えてくれます。 この位置情報を<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>と組み合わせると、強力な表引きができます。</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>Microsoft 365（Windows / Mac）</li><li>Excel 2024（Windows / Mac）</li><li>Excel 2021（Windows / Mac）</li><li>Excel for the web（Web版）</li></ul>



<p class="wp-block-paragraph">Excel 2019以前では使えません。 その場合はMATCH関数で代用してください。</p>



<h3 class="wp-block-heading"><span id="toc3">MATCHとXMATCHの違い一覧（比較表）</span></h3>



<p class="wp-block-paragraph">「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>できる（search_mode=-1）</strong></td></tr><tr><td>255文字の制限</td><td>あり</td><td><strong>なし</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に大きいのは「デフォルトが完全一致」になった点です。 MATCH関数は引数を省略すると近似一致になり、意図しない結果を返すことがありました。 XMATCHなら引数を省略しても完全一致で検索してくれます。</p>



<h2 class="wp-block-heading"><span id="toc4">XMATCH関数の使い方：書式と引数</span></h2>



<p class="wp-block-paragraph">XMATCH関数の基本構文は次のとおりです。</p>



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



<h3 class="wp-block-heading"><span id="toc5">各引数の意味と省略時の挙動</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須</th><th>説明</th><th>省略時</th></tr></thead><tbody><tr><td>検索値（lookup_value）</td><td>○</td><td>探したい値</td><td>—</td></tr><tr><td>検索範囲（lookup_array）</td><td>○</td><td>検索する1行または1列の範囲</td><td>—</td></tr><tr><td>一致モード（match_mode）</td><td>×</td><td>一致の判定方法を指定</td><td>0（完全一致）</td></tr><tr><td>検索モード（search_mode）</td><td>×</td><td>検索する方向を指定</td><td>1（先頭から検索）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">第3・第4引数は省略可能です。 省略すると「先頭から完全一致で検索」という最もシンプルな動作になります。</p>



<h2 class="wp-block-heading"><span id="toc6">一致モード4種の使い分け</span></h2>



<p class="wp-block-paragraph">一致モード（match_mode）は、検索値と範囲内の値をどう照合するかを決めます。 4種類あるので、用途に合わせて選びましょう。</p>



<h3 class="wp-block-heading"><span id="toc7">完全一致（デフォルト・0）</span></h3>



<p class="wp-block-paragraph">最も基本的なモードです。 検索値と完全に一致するセルだけを探します。</p>



<p class="wp-block-paragraph">たとえば、社員名簿から「佐藤」の位置を調べる場合はこうなります。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;佐藤&quot;, A2:A10)</code></pre>



<p class="wp-block-paragraph">一致モードを省略しても「0（完全一致）」になります。 見つからなければ <code>#N/A</code> エラーが返ります。</p>



<h3 class="wp-block-heading"><span id="toc8">以下で一致（-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">たとえば、点数テーブルで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番目だからです。</p>



<p class="wp-block-paragraph">MATCH関数の近似一致ではデータの並べ替えが必須でした。 XMATCHなら並べ替え不要で近似一致ができます。 これは地味ですが、実務では大きなメリットです。</p>



<h3 class="wp-block-heading"><span id="toc9">ワイルドカード一致（2）の実用例</span></h3>



<p class="wp-block-paragraph">部分一致で検索したいときは、一致モード「2」を使います。 <code>*</code>（任意の文字列）と <code>?</code>（任意の1文字）、<code>~</code>（ワイルドカード文字そのものを検索するエスケープ）が使えます。</p>



<p class="wp-block-paragraph">たとえば、「田中」を含む名前を探す場合はこう書きます。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;*田中*&quot;, A2:A20, 2)</code></pre>



<p class="wp-block-paragraph">これで「田中太郎」「田中花子」など、「田中」を含む最初のセルの位置を返します。 商品名や部署名のあいまい検索に便利ですよ。</p>



<h2 class="wp-block-heading"><span id="toc10">検索モード4種の使い分け</span></h2>



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



<h3 class="wp-block-heading"><span id="toc11">先頭から検索（デフォルト・1）</span></h3>



<p class="wp-block-paragraph">上から順に検索し、最初に見つかった位置を返します。 省略時はこのモードになるので、通常はそのままでOKです。</p>



<h3 class="wp-block-heading"><span id="toc12">末尾から逆順検索（-1）の実務ユースケース</span></h3>



<p class="wp-block-paragraph">XMATCH関数の目玉機能ともいえるのが、逆順検索です。 search_mode に「-1」を指定すると、末尾から先頭に向かって検索します。</p>



<p class="wp-block-paragraph">これが活躍するのは「追記型の台帳」です。 たとえば、日報や作業ログのように下へ追記していくシートがあるとします。 同じ担当者名が複数行にあるとき、最新（最後）のエントリの位置を取得できます。</p>



<pre class="wp-block-code"><code>=XMATCH(&quot;佐藤&quot;, A2:A100, 0, -1)</code></pre>



<p class="wp-block-paragraph">MATCH関数では逆順検索ができなかったため、回りくどい数式が必要でした。 XMATCHなら引数ひとつで解決です。</p>



<h3 class="wp-block-heading"><span id="toc13">バイナリサーチ（2・-2）の使いどき</span></h3>



<p class="wp-block-paragraph">データが大量（数万行以上）で、すでに並べ替え済みの場合に使います。</p>



<ul class="wp-block-list"><li><strong>2</strong>: 昇順ソート済みデータに対して二分探索</li><li><strong>-2</strong>: 降順ソート済みデータに対して二分探索</li></ul>



<p class="wp-block-paragraph">通常の検索より高速ですが、データが正しくソートされていないと誤った結果を返します。 少量データなら通常検索で十分なので、無理に使う必要はありません。</p>



<h2 class="wp-block-heading"><span id="toc14">INDEX+XMATCHで表引きをもっと柔軟に</span></h2>



<p class="wp-block-paragraph">XMATCH関数の真価は、INDEX関数との組み合わせで発揮されます。</p>



<h3 class="wp-block-heading"><span id="toc15">VLOOKUPより優れている理由</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>は便利ですが、いくつかの制約があります。</p>



<ul class="wp-block-list"><li>検索列が範囲の左端にないと使えない</li><li>列番号を数値で指定するため、列の挿入でズレる</li></ul>



<p class="wp-block-paragraph">INDEX+XMATCHなら、これらの制約がありません。 検索列が右にあっても左にあっても自在に表引きできます。</p>



<p class="wp-block-paragraph">さらに詳しく知りたい方は、<a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX MATCH使い分け完全ガイド</a>もあわせてご覧ください。</p>



<p class="wp-block-paragraph">なお、<a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数</a>が使える環境なら、XLOOKUPのほうがシンプルに書けます。 INDEX+XMATCHは「縦横同時検索」が必要なケースで特に威力を発揮します。</p>



<h3 class="wp-block-heading"><span id="toc16">INDEX+XMATCHの実務サンプル</span></h3>



<p class="wp-block-paragraph">下の表から「商品名」と「月」を指定して売上を取得する例です。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>4月</th><th>5月</th><th>6月</th></tr></thead><tbody><tr><td>商品A</td><td>100</td><td>150</td><td>200</td></tr><tr><td>商品B</td><td>80</td><td>120</td><td>160</td></tr><tr><td>商品C</td><td>200</td><td>250</td><td>300</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">セルB3に商品名、C3に月名を入力しておくと、次の数式で交差セルの値を取得できます。</p>



<pre class="wp-block-code"><code>=INDEX(C6:E8, XMATCH(B3, B6:B8), XMATCH(C3, C5:E5))</code></pre>



<p class="wp-block-paragraph">ちょっとむずかしく見えますが、やっていることはシンプルです。</p>



<ol class="wp-block-list"><li><code>XMATCH(B3, B6:B8)</code> → 商品名の行番号を取得</li><li><code>XMATCH(C3, C5:E5)</code> → 月名の列番号を取得</li><li><code>INDEX</code> → 行と列が交差するセルの値を返す</li></ol>



<p class="wp-block-paragraph">このように、XMATCHを2つ使って縦横同時検索ができます。 VLOOKUPでは実現できない柔軟な表引きです。</p>



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



<h3 class="wp-block-heading"><span id="toc18">#N/Aが出るケースと回避方法</span></h3>



<p class="wp-block-paragraph">XMATCH関数で最もよく見るエラーが <code>#N/A</code> です。 「一致する値が見つからない」ときに発生します。</p>



<p class="wp-block-paragraph">主な原因は次の3つです。</p>



<ul class="wp-block-list"><li><strong>スペルミスや余分なスペース</strong>: 検索値と範囲内の値が微妙に違う</li><li><strong>データ型の不一致</strong>: 検索値が数値なのに範囲内が文字列として保存されている（またはその逆）</li><li><strong>検索範囲の指定ミス</strong>: 意図した列と違う範囲を選んでいる</li></ul>



<p class="wp-block-paragraph">データ型の問題は見落としがちです。 セルの表示が同じでも、数値と文字列では一致しません。 数式バーで「&#8217;123」のようにシングルクォートがついていたら、文字列として保存されているサインです。</p>



<p class="wp-block-paragraph">エラーを非表示にしたい場合は、IFERROR関数で囲みます。</p>



<pre class="wp-block-code"><code>=IFERROR(XMATCH(&quot;佐藤&quot;, A2:A10), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">ただし、IFERRORで隠すとデータの問題に気づきにくくなります。 まずは原因を特定してから対処するのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc19">まとめ｜XMATCHはMATCHの上位互換</span></h2>



<p class="wp-block-paragraph">XMATCH関数の使い方を振り返りましょう。</p>



<ul class="wp-block-list"><li>デフォルトが完全一致なので、引数の指定ミスが起きにくい</li><li>逆順検索（search_mode=-1）で最新データの位置を簡単に取得できる</li><li>近似一致で並べ替え不要になり、手間が減った</li><li>ワイルドカード一致で部分一致検索もカバー</li><li>255文字の制限がなくなり、長いテキストの検索にも対応</li><li>INDEX関数と組み合わせれば、縦横同時検索が可能</li></ul>



<p class="wp-block-paragraph">MATCH関数を使っている方は、XMATCHに切り替えるだけで検索がグッと楽になりますよ。 対応バージョン（Microsoft 365 / Excel 2024 / Excel 2021）をお使いなら、ぜひ試してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-xmatch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのMATCH関数の使い方｜検索値の位置を取得する方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-match/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-match/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 07:21:50 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[INDEX MATCH]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<category><![CDATA[位置取得]]></category>
		<category><![CDATA[検索]]></category>
		<category><![CDATA[関数比較]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2416</guid>

					<description><![CDATA[ExcelのMATCH関数で範囲内から値の位置番号を取得する方法を解説。完全一致・近似値の照合の型や、INDEX関数との組み合わせパターン、VLOOKUPとの使い分けを整理しています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「この値、表の何番目にあるんだろう？」と手作業で数えた経験はありませんか。データが数十行、数百行になると、目で追いかけるのは正直しんどいですよね。</p>



<p class="wp-block-paragraph">MATCH関数を使えば、範囲の中から値の位置番号を一発で取得できます。さらにINDEX関数と組み合わせると、VLOOKUPでは難しかった「左方向の検索」も自由自在です。</p>



<p class="wp-block-paragraph">この記事では、MATCH関数の基本から照合の型の使い分けまで解説していきます。INDEX+MATCHの黄金パターンやエラーの対処法も実例つきで紹介します。</p>



<p class="wp-block-paragraph">この記事は次のような人におすすめ</p>



<ul class="wp-block-list"><li>指定した範囲の中から値が何番目にあるか知りたい</li><li>INDEX+MATCHの組み合わせをマスターしたい</li><li>VLOOKUPの左方向検索問題を解決したい</li></ul>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-9" checked><label class="toc-title" for="toc-checkbox-9">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MATCH関数とは？</a></li><li><a href="#toc2" tabindex="0">MATCH関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li><li><a href="#toc5" tabindex="0">照合の型の詳細</a></li></ol></li><li><a href="#toc6" tabindex="0">MATCH関数の基本的な使い方</a><ol><li><a href="#toc7" tabindex="0">完全一致で位置を取得する（照合の型 0）</a></li><li><a href="#toc8" tabindex="0">以下の最大値で位置を取得する（照合の型 1）</a></li><li><a href="#toc9" tabindex="0">以上の最小値で位置を取得する（照合の型 -1）</a></li><li><a href="#toc10" tabindex="0">ワイルドカードを使った部分一致検索</a></li></ol></li><li><a href="#toc11" tabindex="0">INDEX+MATCH関数の黄金パターン</a><ol><li><a href="#toc12" tabindex="0">基本の書き方</a></li><li><a href="#toc13" tabindex="0">VLOOKUPの左方向検索問題を解決する</a></li><li><a href="#toc14" tabindex="0">行と列の両方をMATCHで検索する</a></li></ol></li><li><a href="#toc15" tabindex="0">MATCH関数の実務活用パターン</a><ol><li><a href="#toc16" tabindex="0">ランク分けの自動判定</a></li><li><a href="#toc17" tabindex="0">最終入力行の自動取得</a></li><li><a href="#toc18" tabindex="0">重複チェックでの活用</a></li><li><a href="#toc19" tabindex="0">IFERROR関数と組み合わせてエラーを防ぐ</a></li></ol></li><li><a href="#toc20" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc21" tabindex="0">VLOOKUP・XLOOKUP・INDEX+MATCHの違いと使い分け</a><ol><li><a href="#toc22" tabindex="0">どれを選べばいい？</a></li></ol></li><li><a href="#toc23" tabindex="0">まとめ</a><ol><li><a href="#toc24" tabindex="0">関連記事</a></li><li><a href="#toc25" tabindex="0">関数一覧</a></li><li><a href="#toc26" tabindex="0">エラー値について</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MATCH関数とは？</span></h2>



<p class="wp-block-paragraph">MATCH関数は、指定した範囲の中から検索値を探し、その<strong>相対的な位置番号</strong>を返す関数です。読み方は「マッチ関数」で、英語の match（一致する）が語源です。</p>



<p class="wp-block-paragraph">たとえば、A1:A5に商品名が5つ入っているとします。「バナナ」の位置を調べると<strong>3</strong>が返ります。セルのアドレスではなく「範囲の先頭から数えて何番目か」を返すのがポイントです。</p>



<p class="wp-block-paragraph">MATCH関数は単体で使うこともありますが、<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>と組み合わせて使うケースが実務では圧倒的に多いです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>MATCH関数はExcel 2007以降のすべてのバージョン、Microsoft 365、Googleスプレッドシートで使用できます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">MATCH関数の書き方（構文と引数）</span></h2>



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



<pre class="wp-block-code"><code>=MATCH(検査値, 検査範囲, [照合の型])</code></pre>



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



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th></tr></thead><tbody><tr><td>検査値</td><td>必須</td><td>検索したい値を指定します。数値・文字列・セル参照が使えます</td></tr><tr><td>検査範囲</td><td>必須</td><td>検索対象の範囲を指定します。1行または1列の範囲のみ有効です</td></tr><tr><td>照合の型</td><td>省略可</td><td>検索の方法を 1, 0, -1 のいずれかで指定します。省略すると 1 になります</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">検査範囲には<strong>1行または1列</strong>しか指定できません。複数行かつ複数列の範囲を指定するとエラーになるので注意してください。</p>



<h3 class="wp-block-heading"><span id="toc5">照合の型の詳細</span></h3>



<p class="wp-block-paragraph">照合の型は MATCH関数の動作を決める重要な引数です。3種類の指定方法があります。</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>検査値と完全に一致する値を検索します</td><td>並び順は問いません</td><td>商品コード・名前など正確な値を探すとき</td></tr><tr><td>1（以下の最大値）</td><td>検査値以下の最大の値を検索します</td><td><strong>昇順に並べておく必要あり</strong></td><td>価格帯・ランク分けなど範囲で区切るとき</td></tr><tr><td>-1（以上の最小値）</td><td>検査値以上の最小の値を検索します</td><td><strong>降順に並べておく必要あり</strong></td><td>在庫数や得点の上限判定をするとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">実務で最も使うのは <strong>照合の型 0（完全一致）</strong> です。迷ったらまず 0 を指定しておけば間違いありません。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>照合の型を省略すると 1（以下の最大値）になります。完全一致のつもりで省略すると意図しない結果になるので、明示的に 0 を書く習慣をつけてみてください。</p></blockquote>



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



<h3 class="wp-block-heading"><span id="toc7">完全一致で位置を取得する（照合の型 0）</span></h3>



<p class="wp-block-paragraph">商品リストから「バナナ」の位置を調べる例です。</p>



<p class="wp-block-paragraph">A列に商品名が入っているとき、次の数式で位置番号を取得できます。</p>



<pre class="wp-block-code"><code>=MATCH(&quot;バナナ&quot;, A1:A5, 0)</code></pre>



<p class="wp-block-paragraph">A1:A5が「りんご, みかん, バナナ, ぶどう, もも」なら、結果は <strong>3</strong> です。</p>



<p class="wp-block-paragraph">セル参照を使って検索値を指定することもできます。</p>



<pre class="wp-block-code"><code>=MATCH(D1, A1:A5, 0)</code></pre>



<p class="wp-block-paragraph">D1に入っている値をA1:A5から探して位置を返します。</p>



<h3 class="wp-block-heading"><span id="toc8">以下の最大値で位置を取得する（照合の型 1）</span></h3>



<p class="wp-block-paragraph">価格帯やランク分けに便利なのが照合の型 1 です。</p>



<p class="wp-block-paragraph">たとえばA1:A4に「0, 60, 70, 80」と昇順で入っているとします。得点が75のとき、次の数式を使います。</p>



<pre class="wp-block-code"><code>=MATCH(75, A1:A4, 1)</code></pre>



<p class="wp-block-paragraph">75以下の最大値は「70」なので、結果は <strong>3</strong>（3番目の位置）です。これを使えば得点に応じたランク分けが簡単にできます。</p>



<h3 class="wp-block-heading"><span id="toc9">以上の最小値で位置を取得する（照合の型 -1）</span></h3>



<p class="wp-block-paragraph">照合の型 -1 は降順データから検索するときに使います。</p>



<p class="wp-block-paragraph">A1:A4に「100, 80, 60, 40」と降順で入っている場合を考えます。</p>



<pre class="wp-block-code"><code>=MATCH(70, A1:A4, -1)</code></pre>



<p class="wp-block-paragraph">70以上の最小値は「80」なので、結果は <strong>2</strong> です。</p>



<h3 class="wp-block-heading"><span id="toc10">ワイルドカードを使った部分一致検索</span></h3>



<p class="wp-block-paragraph">照合の型 0 のときだけ、ワイルドカードが使えます。</p>



<figure class="wp-block-table"><table><thead><tr><th>ワイルドカード</th><th>意味</th><th>例</th></tr></thead><tbody><tr><td>*</td><td>任意の文字列（0文字以上）</td><td>&#8220;東京*&#8221; で「東京都」「東京支店」に一致</td></tr><tr><td>?</td><td>任意の1文字</td><td>&#8220;田?太郎&#8221; で「田中太郎」に一致</td></tr><tr><td>~</td><td>ワイルドカードのエスケープ</td><td>&#8220;~*&#8221; でアスタリスクそのものを検索</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=MATCH(&quot;東京*&quot;, A1:A10, 0)</code></pre>



<p class="wp-block-paragraph">「東京」で始まる最初の値の位置を返します。</p>



<h2 class="wp-block-heading"><span id="toc11">INDEX+MATCH関数の黄金パターン</span></h2>



<p class="wp-block-paragraph">MATCH関数が真価を発揮するのは、<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>との組み合わせです。INDEX関数は「行番号と列番号を指定して値を取り出す」関数です。ここにMATCH関数で取得した位置番号を渡すと、柔軟な検索ができるようになります。</p>



<h3 class="wp-block-heading"><span id="toc12">基本の書き方</span></h3>



<pre class="wp-block-code"><code>=INDEX(取り出す範囲, MATCH(検索値, 検索する範囲, 0))</code></pre>



<p class="wp-block-paragraph">具体例を見てみましょう。A列に商品コード、B列に商品名、C列に価格が入った表があるとします。</p>



<p class="wp-block-paragraph">商品コード「A003」の価格を取得するには、次のように書きます。</p>



<pre class="wp-block-code"><code>=INDEX(C1:C10, MATCH(&quot;A003&quot;, A1:A10, 0))</code></pre>



<p class="wp-block-paragraph">MATCH関数がA列から「A003」の位置を取得し、INDEX関数がC列の同じ行の値を返す仕組みです。</p>



<h3 class="wp-block-heading"><span id="toc13">VLOOKUPの左方向検索問題を解決する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>は便利な検索関数ですが、<strong>検索列より左側の列からは値を取得できない</strong>という制限があります。</p>



<p class="wp-block-paragraph">たとえば、A列に商品名、B列に商品コードが並んでいるとき、商品コードから商品名を調べたい場合です。VLOOKUPだと検索列（B列）の左にある商品名（A列）は取り出せません。</p>



<p class="wp-block-paragraph">INDEX+MATCHならこの制限がありません。</p>



<pre class="wp-block-code"><code>=INDEX(A1:A10, MATCH(&quot;A003&quot;, B1:B10, 0))</code></pre>



<p class="wp-block-paragraph">B列から「A003」の位置を取得し、A列（左側）の値を返しています。検索列と取得列の位置関係を気にしなくてよいのが大きなメリットです。</p>



<h3 class="wp-block-heading"><span id="toc14">行と列の両方をMATCHで検索する</span></h3>



<p class="wp-block-paragraph">INDEX関数に行番号と列番号の両方をMATCHで渡すと、クロス検索ができます。</p>



<pre class="wp-block-code"><code>=INDEX(B2:D10, MATCH(&quot;東京&quot;, A2:A10, 0), MATCH(&quot;4月&quot;, B1:D1, 0))</code></pre>



<p class="wp-block-paragraph">A列から「東京」の行位置を取得し、1行目から「4月」の列位置を取得します。交差するセルの値が結果です。大きな集計表から特定のデータを引き出すときに重宝します。</p>



<h2 class="wp-block-heading"><span id="toc15">MATCH関数の実務活用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc16">ランク分けの自動判定</span></h3>



<p class="wp-block-paragraph">得点に応じてランクを自動判定する例です。F列にランク境界値（0, 60, 70, 80, 90）を入れます。G列にランク名（E, D, C, B, A）を用意しておきます。</p>



<pre class="wp-block-code"><code>=INDEX(G1:G5, MATCH(B2, F1:F5, 1))</code></pre>



<p class="wp-block-paragraph">照合の型 1 で「得点以下の最大の境界値」の位置を取得し、対応するランク名を返します。IF関数をネストするより圧倒的にスッキリ書けます。</p>



<h3 class="wp-block-heading"><span id="toc17">最終入力行の自動取得</span></h3>



<p class="wp-block-paragraph">データの最後の行を自動で見つけたいときにも使えます。</p>



<pre class="wp-block-code"><code>=MATCH(9.99E+307, A:A, 1)</code></pre>



<p class="wp-block-paragraph">9.99E+307 はExcelで扱える最大の数値です。照合の型 1 で「最大値以下」を検索すると、数値データの最終行の位置が返ります。</p>



<p class="wp-block-paragraph">文字列データの場合は <a href="https://mashukabu.com/excel-function-howto-use-countif/">COUNTIF関数</a> などと組み合わせる方法もあります。</p>



<h3 class="wp-block-heading"><span id="toc18">重複チェックでの活用</span></h3>



<p class="wp-block-paragraph">同じ値が複数あるとき、MATCH関数は最初に見つかった位置を返します。この性質を利用して重複チェックに使えます。</p>



<pre class="wp-block-code"><code>=MATCH(A2, A:A, 0)&lt;&gt;ROW(A2)</code></pre>



<p class="wp-block-paragraph">MATCH関数が返す位置と現在の行番号が一致しない場合、その値は上のほうで既に出現しています。結果がTRUEなら重複データです。</p>



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



<p class="wp-block-paragraph">MATCH関数は検索値が見つからないと #N/A エラーを返します。<a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数</a>で囲んでおくと安心です。</p>



<pre class="wp-block-code"><code>=IFERROR(INDEX(B1:B10, MATCH(D1, A1:A10, 0)), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">検索値が見つからない場合に「該当なし」を表示します。</p>



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



<p class="wp-block-paragraph">MATCH関数で発生しやすいエラーと、その原因・対処法をまとめました。</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>照合の型 1 で昇順になっていない</td><td>データを昇順に並べ替えるか、照合の型 0 に変更</td></tr><tr><td>#N/A</td><td>照合の型 -1 で降順になっていない</td><td>データを降順に並べ替えるか、照合の型 0 に変更</td></tr><tr><td>#N/A</td><td>文字列の前後にスペースが混入</td><td><a href="https://mashukabu.com/excel-function-howto-use-trim/">TRIM関数</a>で空白を除去してから検索</td></tr><tr><td>#VALUE!</td><td>検査範囲が複数行かつ複数列</td><td>1行または1列の範囲に修正</td></tr><tr><td>#REF!</td><td>INDEX+MATCHで取得範囲がずれている</td><td>INDEX関数の範囲とMATCHの範囲の行数が一致しているか確認</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">#N/A エラーが最も多いトラブルです。「値が合っているはずなのに #N/A が出る」ときは、次の点をチェックしてみてください。</p>



<ul class="wp-block-list"><li>全角と半角が混在していないか（<a href="https://mashukabu.com/excel-function-howto-use-substitute/">SUBSTITUTE関数</a>やASC関数で統一）</li><li>数値が文字列として入力されていないか（セルの左上に緑の三角が出ていたら文字列格納の可能性）</li><li>前後に余計なスペースが入っていないか</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LEN関数でセルの文字数を確認すると、見えないスペースが混入しているかどうかを判別できます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc21">VLOOKUP・XLOOKUP・INDEX+MATCHの違いと使い分け</span></h2>



<p class="wp-block-paragraph">検索関数はどれを使えばいいか迷いますよね。3つの主要な検索方法を比較してみましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>VLOOKUP</th><th>INDEX+MATCH</th><th>XLOOKUP</th></tr></thead><tbody><tr><td>検索方向</td><td>左端列のみ</td><td>自由（左右どちらも可）</td><td>自由（左右どちらも可）</td></tr><tr><td>列の追加・削除への強さ</td><td>列番号がずれる場合あり</td><td>列番号に依存しない</td><td>列番号に依存しない</td></tr><tr><td>近似値検索</td><td>第4引数で対応</td><td>照合の型 1 / -1 で対応</td><td>一致モードで対応</td></tr><tr><td>複数条件の検索</td><td>補助列が必要</td><td>配列数式で対応可</td><td>補助列が必要</td></tr><tr><td>対応バージョン</td><td>すべてのバージョン</td><td>すべてのバージョン</td><td>Microsoft 365 / Excel 2021以降</td></tr><tr><td>数式の読みやすさ</td><td>シンプル</td><td>やや長い</td><td>シンプル</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc22">どれを選べばいい？</span></h3>



<ul class="wp-block-list"><li><strong>シンプルに左から右へ検索したい</strong> → <a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>でOK</li><li><strong>左方向の検索が必要、または古いExcelを使っている</strong> → INDEX+MATCHが最適</li><li><strong>Microsoft 365 / Excel 2021を使っている</strong> → <a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数</a>が最も便利</li></ul>



<p class="wp-block-paragraph">INDEX+MATCHは対応バージョンの広さと柔軟性が最大の強みです。XLOOKUPが使えない環境では、INDEX+MATCHを覚えておけば困ることはありません。</p>



<h2 class="wp-block-heading"><span id="toc23">まとめ</span></h2>



<p class="wp-block-paragraph">MATCH関数は、範囲内の値の位置番号を取得する関数です。この記事で紹介したポイントを振り返ります。</p>



<ul class="wp-block-list"><li><strong>照合の型 0（完全一致）</strong> を基本にする。省略すると 1 になるので明示的に指定する</li><li><strong>INDEX+MATCHの組み合わせ</strong> で、VLOOKUPの左方向検索制限を解消できる</li><li><strong>#N/A エラー</strong> が出たら、全角半角・スペース混入・並び順を確認する</li><li>XLOOKUPが使えない環境では INDEX+MATCH が最強の検索パターン</li></ul>



<p class="wp-block-paragraph">まずは照合の型 0 の完全一致検索から試してみてください。INDEX+MATCHの組み合わせに慣れると、データ検索の幅がぐっと広がりますよ。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-countif/">COUNTIF関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数の使い方</a></li></ul>



<h3 class="wp-block-heading"><span id="toc25">関数一覧</span></h3>



<p class="wp-block-paragraph">Excel関数の一覧は下記の記事でまとめています。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-alphabetical-order/">【Excel】アルファベット順 関数一覧</a></li><li><a href="https://mashukabu.com/excel-function-list-by-function/">【Excel】機能別のエクセル関数一覧</a></li></ul>



<h3 class="wp-block-heading"><span id="toc26">エラー値について</span></h3>



<p class="wp-block-paragraph">Excelのエラー値の種類と対処法は、下記の記事で詳しく解説しています。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-error-value-list/">【Excel】セルに表示されるエラーの種類と原因、対処方法を解説</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-match/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ADDRESS関数の使い方｜文字列が返る理由とINDIRECT連携で値を取る方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-address/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-address/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 04 Jun 2022 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[ADDRESS関数]]></category>
		<category><![CDATA[INDEX関数]]></category>
		<category><![CDATA[INDIRECT関数]]></category>
		<category><![CDATA[MATCH関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2156</guid>

					<description><![CDATA[ExcelのADDRESS関数は行番号・列番号からセル番地の文字列を作る関数です。なぜ値が取れないのか、INDIRECT連携で値を取る方法、MATCH・MAXと組み合わせた動的参照パターン、INDEX関数で十分なケースの見分け方までを実務例で解説します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「ADDRESS関数を使ってみたら、値じゃなくて文字列が出てきた」<br>そんな経験はありませんか。</p>



<p class="wp-block-paragraph">ExcelのADDRESS関数は、行番号と列番号から「セル番地」を作る関数です。<br>ただし返ってくるのは番地の「文字列」であって、そのセルの「値」ではありません。<br>ここでつまずく人がとても多いんです。</p>



<p class="wp-block-paragraph">この記事では、ADDRESS関数の使い方を「文字列しか返らない理由」から整理します。<br>そのうえで、INDIRECT関数と組み合わせて値を取る方法を解説しますね。<br>さらにMATCHを加えた動的参照、最終行の値を取るパターン、INDEXとの使い分けまで進みます。<br>読み終わるころには、「いつADDRESSを使い、いつ使わないか」がはっきりわかりますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ADDRESS関数とは？返るのは「文字列」であって「値」ではない</a><ol><li><a href="#toc2" tabindex="0">ADDRESS単体 vs INDIRECT(ADDRESS()) の2行比較</a></li><li><a href="#toc3" tabindex="0">ADDRESS関数でできること・できないこと</a></li></ol></li><li><a href="#toc4" tabindex="0">ADDRESS関数の基本構文と5つの引数</a><ol><li><a href="#toc5" tabindex="0">参照の種類（abs_num）1〜4の使い分け判断表</a></li><li><a href="#toc6" tabindex="0">参照形式（A1形式 vs R1C1形式）</a></li><li><a href="#toc7" tabindex="0">別シート・別ブックの指定方法</a></li></ol></li><li><a href="#toc8" tabindex="0">ADDRESS だけでは値を取れない――INDIRECT との連携が必須</a><ol><li><a href="#toc9" tabindex="0">INDIRECT(ADDRESS()) の基本パターン</a></li><li><a href="#toc10" tabindex="0">シート名を動的に切り替える実務パターン</a></li><li><a href="#toc11" tabindex="0">MATCH+ADDRESS+INDIRECT で行を動的に特定する</a></li></ol></li><li><a href="#toc12" tabindex="0">ADDRESS が不要なケース――INDEX で十分な場面を整理する</a><ol><li><a href="#toc13" tabindex="0">同一シート内の値取得は INDEX+MATCH が正解</a></li><li><a href="#toc14" tabindex="0">ADDRESS+INDIRECT が必要な唯一の場面（シート名の動的切り替え）</a></li></ol></li><li><a href="#toc15" tabindex="0">列番号をアルファベットに変換する（abs_num=4 の使いどころ）</a><ol><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ADDRESS関数とは？返るのは「文字列」であって「値」ではない</span></h2>



<p class="wp-block-paragraph">ExcelのADDRESS関数は、行番号と列番号を渡すとセル番地を返す関数です。<br>たとえば <code>=ADDRESS(3,2)</code> と入力すると、<code>$B$3</code> が返ります。<br>B列（2列目）の3行目という意味の番地ですね。</p>



<p class="wp-block-paragraph">ここで一番大事なポイントを最初に押さえましょう。<br>返ってくる <code>$B$3</code> は、ただの<strong>文字列</strong>です。<br>B3セルに入っている値ではありません。</p>



<p class="wp-block-paragraph">つまりADDRESS単体では、目的のセルの中身を取り出せないんです。<br>「ADDRESSを使ったのに値が取れない」と感じるのは、仕様どおりの動作です。<br>故障でも数式ミスでもありませんよ。</p>



<p class="wp-block-paragraph">なお「ADDRESS」は「アドレス」と読みます。<br>英語の address（住所・所在地）が語源で、セルの「住所」を文字で表す関数だと考えるとイメージしやすいですね。</p>



<h3 class="wp-block-heading"><span id="toc2">ADDRESS単体 vs INDIRECT(ADDRESS()) の2行比較</span></h3>



<p class="wp-block-paragraph">「文字列しか返らない」の正体を、次の表で直感的につかんでください。<br>B3セルに <code>1000</code> という値が入っている前提です。</p>



<figure class="wp-block-table"><table><thead><tr><th>数式</th><th>返り値</th><th>正体</th></tr></thead><tbody><tr><td><code>=ADDRESS(3,2)</code></td><td><code>$B$3</code></td><td>セル番地の<strong>文字列</strong></td></tr><tr><td><code>=INDIRECT(ADDRESS(3,2))</code></td><td><code>1000</code></td><td>B3セルの<strong>値</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">違いは1関数だけです。<br>ADDRESSの外側を<a href="https://mashukabu.com/excel-function-howto-use-indirect/">INDIRECT関数</a>で包むと、文字列がセル参照に変わり、値が取れます。</p>



<p class="wp-block-paragraph">INDIRECT関数は「文字列で書かれた番地を、本物のセル参照として読み直す」関数です。<br>ADDRESSが番地を「書き」、INDIRECTがそれを「読む」。<br>この2段構えが、ADDRESS活用の基本形だと覚えてください。</p>



<h3 class="wp-block-heading"><span id="toc3">ADDRESS関数でできること・できないこと</span></h3>



<p class="wp-block-paragraph">役割を整理しておきましょう。</p>



<ul class="wp-block-list"><li>できること：行番号・列番号から番地の文字列を組み立てる</li><li>できること：別シート名つきの番地を作る（後述）</li><li>できないこと：そのセルの値を直接取得する</li><li>できないこと：番地から逆に「行・列番号」を取り出す</li></ul>



<p class="wp-block-paragraph">値を取りたいならINDIRECT、番地を文字列のまま使いたいならADDRESS単体。<br>この線引きが、これ以降のすべてのパターンの土台になります。</p>



<h2 class="wp-block-heading"><span id="toc4">ADDRESS関数の基本構文と5つの引数</span></h2>



<p class="wp-block-paragraph">ADDRESS関数の構文は次のとおりです。</p>



<pre class="wp-block-code"><code>=ADDRESS(行番号, 列番号, [参照の種類], [参照形式], [シート名])</code></pre>



<p class="wp-block-paragraph">必ず指定するのは「行番号」と「列番号」の2つだけです。<br>残り3つは省略できます。<br>それぞれの役割を表で確認しましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>内容</th></tr></thead><tbody><tr><td>行番号</td><td>必須</td><td>セルの行番号（1以上の整数）</td></tr><tr><td>列番号</td><td>必須</td><td>セルの列番号（A=1、B=2…）</td></tr><tr><td>参照の種類（abs_num）</td><td>省略可</td><td>絶対参照／相対参照を1〜4で指定</td></tr><tr><td>参照形式（a1）</td><td>省略可</td><td>TRUE=A1形式、FALSE=R1C1形式</td></tr><tr><td>シート名</td><td>省略可</td><td>別シート参照時にシート名を文字列で指定</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">行番号・列番号だけ渡した場合、参照の種類は「1」になります。<br>つまり省略すると完全な絶対参照（行も列も <code>$</code> 付き）です。</p>



<h3 class="wp-block-heading"><span id="toc5">参照の種類（abs_num）1〜4の使い分け判断表</span></h3>



<p class="wp-block-paragraph">第3引数の <code>abs_num</code> は、絶対参照（<code>$</code>で固定）と相対参照（固定なし）を切り替えます。<br>絶対参照はコピーしても番地がずれない参照、相対参照はコピー方向にずれる参照ですね。</p>



<p class="wp-block-paragraph"><code>=ADDRESS(3,2,□)</code> の□に1〜4を入れたときの出力は、次のとおり検証済みです。</p>



<figure class="wp-block-table"><table><thead><tr><th>abs_num</th><th>行</th><th>列</th><th><code>ADDRESS(3,2,n)</code> の出力</th><th>主な使いどころ</th></tr></thead><tbody><tr><td>1（省略時）</td><td>絶対</td><td>絶対</td><td><code>$B$3</code></td><td>番地を固定したいとき</td></tr><tr><td>2</td><td>絶対</td><td>相対</td><td><code>B$3</code></td><td>横方向コピーで行だけ固定</td></tr><tr><td>3</td><td>相対</td><td>絶対</td><td><code>$B3</code></td><td>縦方向コピーで列だけ固定</td></tr><tr><td>4</td><td>相対</td><td>相対</td><td><code>B3</code></td><td>列名変換など <code>$</code> を消したいとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">判断軸はシンプルです。<br>「コピーしたときに、行と列のどちらをずらしたくないか」で選びます。</p>



<p class="wp-block-paragraph">実務で意外と出番が多いのが <code>abs_num=4</code>（相対参照）です。<br><code>$</code> が一切付かない <code>B3</code> 形式が返るので、後で文字を加工しやすいんですね。<br>列番号をアルファベットに変換する場面で活躍します（後述）。</p>



<h3 class="wp-block-heading"><span id="toc6">参照形式（A1形式 vs R1C1形式）</span></h3>



<p class="wp-block-paragraph">第4引数の <code>a1</code> は、番地の表記スタイルを決めます。</p>



<figure class="wp-block-table"><table><thead><tr><th>a1</th><th>形式</th><th><code>ADDRESS(3,4,1,a1)</code> の出力</th></tr></thead><tbody><tr><td>TRUE（省略時）</td><td>A1形式</td><td><code>$D$3</code></td></tr><tr><td>FALSE</td><td>R1C1形式</td><td><code>R3C4</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">R1C1形式は「行3・列4」のように番号で表す書き方です。<br>主にVBA・マクロ開発で使われます。<br>普通のワークシートではA1形式を使うので、この引数は省略でかまいません。</p>



<p class="wp-block-paragraph">なお、INDIRECTと組み合わせてR1C1形式を使う場合は注意が必要です。<br><code>=INDIRECT(ADDRESS(3,4,1,FALSE), FALSE)</code> のように、INDIRECT側の第2引数もFALSEにそろえてください。<br>片方だけR1C1にすると参照がかみ合わず、エラーになります。</p>



<h3 class="wp-block-heading"><span id="toc7">別シート・別ブックの指定方法</span></h3>



<p class="wp-block-paragraph">第5引数にシート名を渡すと、シート名つきの番地が返ります。</p>



<pre class="wp-block-code"><code>=ADDRESS(1, 1, 1, TRUE, &quot;1月&quot;)</code></pre>



<p class="wp-block-paragraph">この結果は <code>'1月'!$A$1</code> です。<br>シート名が <code>'1月'</code> とシングルクォートで囲まれている点に注目してください。<br>ADDRESS関数は、必要に応じてクォートを自動で付けてくれます。</p>



<p class="wp-block-paragraph">別ブックを参照したいときは、シート名を <code>"[Book2.xlsx]Sheet1"</code> の形式で渡します。<br>ただしADDRESSはあくまで「文字列」を作るだけです。<br>この文字列から実際に値を取るには、やはりINDIRECTが必要になります。</p>



<h2 class="wp-block-heading"><span id="toc8">ADDRESS だけでは値を取れない――INDIRECT との連携が必須</span></h2>



<p class="wp-block-paragraph">ここからが本題です。<br>ADDRESSが作った番地の文字列を、INDIRECTで「値」に変えていきます。</p>



<h3 class="wp-block-heading"><span id="toc9">INDIRECT(ADDRESS()) の基本パターン</span></h3>



<p class="wp-block-paragraph">セルA1に行番号「5」、B1に列番号「3」が入っているとします。<br>この2つを使ってC5セルの値を取りたい、という場面です。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(A1, B1))</code></pre>



<p class="wp-block-paragraph">処理は3ステップで進みます。</p>



<ol class="wp-block-list"><li><code>ADDRESS(5, 3)</code> が <code>$C$5</code> という文字列を作る</li><li><code>INDIRECT("$C$5")</code> がその文字列をセル参照に読み直す</li><li>C5セルの値が返る</li></ol>



<p class="wp-block-paragraph">A1やB1の数字を書き換えるだけで、参照先がその場で切り替わります。<br>番地を計算で組み立てられるのが、この組み合わせの強みですね。</p>



<h3 class="wp-block-heading"><span id="toc10">シート名を動的に切り替える実務パターン</span></h3>



<p class="wp-block-paragraph">INDIRECT＋ADDRESSが本当に光るのは、シート名を変数化したいときです。<br>月別シート（1月、2月…）から、選んだ月のデータを取りたい場面を考えましょう。<br>セルC1にシート名「1月」、A1に行番号、B1に列番号が入っているとします。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(A1, B1, 1, TRUE, C1))</code></pre>



<p class="wp-block-paragraph">C1を「2月」「3月」と変えるだけで、取得先シートが丸ごと切り替わります。<br>ADDRESSが <code>'2月'!$C$5</code> のような番地を作り、INDIRECTが値を取ってくる流れです。</p>



<p class="wp-block-paragraph">これは通常の参照では作りにくい仕組みです。<br>セルの値でシートを切り替えられる点が、後述するINDEXとの決定的な違いになります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>INDIRECTは「揮発性関数」です。<br>揮発性とは、シート上で何か変更があるたびに再計算される性質のこと。<br>そのため数千セル単位で多用すると、ブックが重くなります。<br>同一シート内の単純な値取得なら、後述のINDEXを使うほうが軽快ですよ。<br>INDIRECTの揮発性については<a href="https://mashukabu.com/excel-function-howto-use-indirect/">INDIRECT関数の記事</a>で詳しく解説しています。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc11">MATCH+ADDRESS+INDIRECT で行を動的に特定する</span></h3>



<p class="wp-block-paragraph">実務では「検索値から該当行を探し、その値を取る」パターンが頻出します。<br><a href="https://mashukabu.com/excel-function-howto-use-match/">MATCH関数</a>を加えると、これが実現できます。<br>MATCHは「検索値が範囲の何番目にあるか」を番号で返す関数です。</p>



<p class="wp-block-paragraph">3関数の役割分担は次のとおりです。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>役割</th></tr></thead><tbody><tr><td>MATCH</td><td>検索値が何行目かを返す</td></tr><tr><td>ADDRESS</td><td>行番号・列番号から番地を作る</td></tr><tr><td>INDIRECT</td><td>番地の文字列から値を取る</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">月次集計表から当月データを抽出する</h4>



<p class="wp-block-paragraph">A列に月名（1月〜12月）、B列に売上が入った集計表があるとします。<br>セルD1に「3月」と入れて、その売上を取り出してみましょう。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(MATCH(D1, A:A, 0), 2))</code></pre>



<p class="wp-block-paragraph">流れを分解します。</p>



<ol class="wp-block-list"><li><code>MATCH(D1, A:A, 0)</code> がA列で「3月」の行番号を返す（仮に4行目なら <code>4</code>）</li><li><code>ADDRESS(4, 2)</code> が <code>$B$4</code> を作る</li><li><code>INDIRECT("$B$4")</code> がB4の売上値を返す</li></ol>



<p class="wp-block-paragraph">D1を「4月」に変えれば、参照行が自動でずれて値が切り替わります。<br>「探す→番地を作る→値を取る」の3ステップだと考えれば、難しくありませんね。</p>



<h4 class="wp-block-heading">MAX+MATCH+ADDRESS+INDIRECT で最終行の値を常に取得する</h4>



<p class="wp-block-paragraph">「リストの一番下に追加した最新データを、いつも自動で表示したい」。<br>そんなときは、最終行を計算で特定するパターンが便利です。</p>



<p class="wp-block-paragraph">まず、データが連続している（途中に空白がない）場合はCOUNTAが使えます。<br>B列の最終行の値を取る数式はこうです。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(COUNTA(B:B), 2))</code></pre>



<p class="wp-block-paragraph"><code>COUNTA(B:B)</code> がB列の入力済みセル数を数え、それがそのまま最終行番号になります。<br>ただし見出し行を含めてカウントするので、データの行数と最終行番号がずれないか確認してください。</p>



<p class="wp-block-paragraph">途中に空白行が混じる場合は、MAXとIFで「値が入っている最後の行」を探します。<br>こちらは配列数式です。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(MAX(IF(B:B&lt;&gt;&quot;&quot;, ROW(B:B))), 2))</code></pre>



<p class="wp-block-paragraph">仕組みを分解しましょう。</p>



<ol class="wp-block-list"><li><code>IF(B:B<>"", ROW(B:B))</code> が、値のある行だけ行番号を返す</li><li><code>MAX(...)</code> がその中で一番大きい行番号、つまり最終行を取り出す</li><li><code>ADDRESS(最終行, 2)</code> が番地を作り、<code>INDIRECT</code> が値を取る</li></ol>



<p class="wp-block-paragraph">この数式は配列として処理されます。<br>スピル対応のExcel（Microsoft 365など）ではそのまま確定できます。<br>古いバージョンでは <code>Ctrl+Shift+Enter</code> で確定してください。</p>



<p class="wp-block-paragraph">新しい行を追加するたびに、表示が自動で最新値に追従します。<br>最終行を手で書き換える手間がなくなりますよ。</p>



<h2 class="wp-block-heading"><span id="toc12">ADDRESS が不要なケース――INDEX で十分な場面を整理する</span></h2>



<p class="wp-block-paragraph">ここで正直にお伝えします。<br>ADDRESS＋INDIRECTは便利ですが、「使わなくていい場面」も多いんです。<br>多くの解説はこの組み合わせを推しますが、過剰になりやすい点は知っておくべきです。</p>



<h3 class="wp-block-heading"><span id="toc13">同一シート内の値取得は INDEX+MATCH が正解</span></h3>



<p class="wp-block-paragraph">「行番号と列番号から値を取る」だけなら、<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>で完結します。<br>先ほどの月次集計の例は、INDEX＋MATCHでこう書けます。</p>



<pre class="wp-block-code"><code>=INDEX(B:B, MATCH(D1, A:A, 0))</code></pre>



<p class="wp-block-paragraph">INDIRECT＋ADDRESS版と結果は同じです。<br>しかし違いは小さくありません。</p>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>INDEX+MATCH</th><th>INDIRECT+ADDRESS</th></tr></thead><tbody><tr><td>処理速度</td><td>高速（参考値：約0.001秒）</td><td>低速（参考値：約5.2秒）</td></tr><tr><td>揮発性</td><td>なし（必要時だけ再計算）</td><td>あり（変更のたび再計算）</td></tr><tr><td>数式の読みやすさ</td><td>シンプル</td><td>やや複雑</td></tr><tr><td>別シートの動的切り替え</td><td>不可</td><td>可能</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">速度の参考値には大きな差があります（およそ5,000倍）。<br>測定環境による参考値ですが、傾向としてINDEXが軽いのは確かです。<br>同一シート内のデータ取得なら、迷わずINDEX＋MATCHを選んでください。</p>



<h3 class="wp-block-heading"><span id="toc14">ADDRESS+INDIRECT が必要な唯一の場面（シート名の動的切り替え）</span></h3>



<p class="wp-block-paragraph">ではADDRESS＋INDIRECTの出番はどこか。<br>答えはほぼ1つ、「シート名をセルの値で切り替えたいとき」です。</p>



<p class="wp-block-paragraph">INDEX関数は、参照範囲のシートを変数で差し替えられません。<br>「1月」シートと「2月」シートを、セルの入力で切り替える――これはINDEXには無理です。<br>ここだけはINDIRECT＋ADDRESSの独壇場になります。</p>



<p class="wp-block-paragraph">判断はこの一言で済みます。<br>「シート名を動的に変えたい？」がYesならINDIRECT＋ADDRESS、NoならINDEX。<br>迷ったらまずINDEXを試す、と覚えておくと失敗しませんよ。</p>



<h2 class="wp-block-heading"><span id="toc15">列番号をアルファベットに変換する（abs_num=4 の使いどころ）</span></h2>



<p class="wp-block-paragraph">最後に、ADDRESSならではの便利ワザを紹介します。<br>「列番号5をアルファベットの『E』で表示したい」といった変換です。<br>ここで <code>abs_num=4</code>（相対参照）が効いてきます。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(ADDRESS(1, 5, 4), &quot;1&quot;, &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">この数式は <code>E</code> を返します。<br>仕組みは2ステップです。</p>



<ol class="wp-block-list"><li><code>ADDRESS(1, 5, 4)</code> が <code>E1</code>（<code>$</code>なしの相対参照）を作る</li><li><code>SUBSTITUTE(..., "1", "")</code> が「1」を消し、列名 <code>E</code> だけが残る</li></ol>



<p class="wp-block-paragraph">第1引数を「1」に固定しているのがコツです。<br>行番号を1にしておけば、消すべき数字が必ず行番号の「1」だけになります。<br>列名のアルファベットには数字が含まれないので、SUBSTITUTEで「1」を消せば列名がきれいに残るわけです。</p>



<p class="wp-block-paragraph">2桁の列にも対応します。<br>列番号28なら、<code>ADDRESS(1, 28, 4)</code> が <code>AB1</code> を作り、結果は <code>AB</code> です。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(ADDRESS(1, 28, 4), &quot;1&quot;, &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">今いるセルの列名を知りたいときは、<a href="https://mashukabu.com/excel-function-howto-use-column/">COLUMN関数</a>と組み合わせます。</p>



<pre class="wp-block-code"><code>=SUBSTITUTE(ADDRESS(1, COLUMN(), 4), &quot;1&quot;, &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">列番号からアルファベットへの変換は、ほかの方法もあります。<br><a href="https://mashukabu.com/excel-function-howto-get-column-alphabet/">列番号をアルファベットに変換する方法</a>で、別アプローチも含めて詳しく解説していますよ。</p>



<p class="wp-block-paragraph">なお、Googleスプレッドシートでも同じ5引数構文でADDRESSが使えます。<br>Sheetsで使いたい方は<a href="https://mashukabu.com/spreadsheet-address-function/">スプレッドシートのADDRESS関数</a>を参照してください。</p>



<h3 class="wp-block-heading"><span id="toc16">よくあるエラーと対処法</span></h3>



<p class="wp-block-paragraph">ADDRESSとINDIRECT連携で出やすいエラーを2つ整理します。</p>



<p class="wp-block-paragraph"><strong>#VALUE!エラー</strong>は、ADDRESSの引数自体に問題があるサインです。</p>



<figure class="wp-block-table"><table><thead><tr><th>原因</th><th>対処</th></tr></thead><tbody><tr><td>行番号・列番号が0以下</td><td>1以上の整数を指定する</td></tr><tr><td>行番号・列番号が数値でない</td><td>文字列が混入していないか確認する</td></tr><tr><td>abs_numが1〜4以外</td><td>1〜4のいずれかを指定する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば <code>=ADDRESS(0, 3)</code> は #VALUE! になります。<br>行番号は必ず1以上にしてください。</p>



<p class="wp-block-paragraph"><strong>#REF!エラー</strong>は、INDIRECTと組み合わせたときに出ます。<br>ADDRESS単体は正しくても、参照先が見つからないと発生します。<br>主な原因は2つです。</p>



<ul class="wp-block-list"><li>存在しないシート名を参照している（スペルミス・削除済みシート）</li><li>シート名にスペースや記号があり、クォートで囲めていない</li></ul>



<p class="wp-block-paragraph">ADDRESSの第5引数でシート名を渡せば、クォートは自動で付きます。<br>一方、自分で文字列結合して番地を作っている場合は要注意です。<br>クォートを手で付け忘れると #REF! になります。<br>エラー時はまず「シート名が本当に存在するか」を確認してくださいね。</p>



<h2 class="wp-block-heading"><span id="toc17">まとめ</span></h2>



<p class="wp-block-paragraph">ADDRESS関数は、行番号と列番号から「セル番地の文字列」を作る関数です。<br>返るのは文字列であって値ではない、という一点を押さえれば迷いません。</p>



<p class="wp-block-paragraph">この記事の要点をおさらいします。</p>



<ul class="wp-block-list"><li><code>=ADDRESS(3,2)</code> は <code>$B$3</code>、つまり番地の<strong>文字列</strong>を返す</li><li>値を取るには <code>INDIRECT(ADDRESS(...))</code> で文字列を参照に変える</li><li><code>abs_num</code> 1〜4は「コピー方向で何を固定したいか」で選ぶ</li><li>MATCHを足すと検索値から動的に値を取れる</li><li>MAX+IFを足せば、空白混じりでも最終行の値を取得できる</li><li>同一シート内ならINDEX＋MATCHが高速で正解</li><li>ADDRESS＋INDIRECTの出番は「シート名の動的切り替え」にほぼ限られる</li><li><code>abs_num=4</code> とSUBSTITUTEで列番号をアルファベットに変換できる</li></ul>



<p class="wp-block-paragraph">ADDRESSは単体ではなく、<a href="https://mashukabu.com/excel-function-howto-use-indirect/">INDIRECT関数</a>や<a href="https://mashukabu.com/excel-function-howto-use-match/">MATCH関数</a>と組み合わせてこそ真価を発揮します。<br>ただし、なんでもADDRESS＋INDIRECTにせず、同一シートなら<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>を優先する。<br>この使い分けができれば、あなたの数式は速くて読みやすいものになりますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-address/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
