<?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>別シート参照 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/%e5%88%a5%e3%82%b7%e3%83%bc%e3%83%88%e5%8f%82%e7%85%a7/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 15 Aug 2026 13:15:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>別シート参照 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スプレッドシートのINDIRECT関数の使い方｜文字列からセル参照</title>
		<link>https://mashukabu.com/spreadsheet-indirect-function/</link>
					<comments>https://mashukabu.com/spreadsheet-indirect-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 15:13:12 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[IMPORTRANGE]]></category>
		<category><![CDATA[INDIRECT関数]]></category>
		<category><![CDATA[スプレッドシート関数]]></category>
		<category><![CDATA[セル参照]]></category>
		<category><![CDATA[別シート参照]]></category>
		<category><![CDATA[動的参照]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4658</guid>

					<description><![CDATA[スプレッドシートのINDIRECT関数の使い方を解説。別シート・別ファイルへの動的参照、IMPORTRANGE連携、#REF!エラーの対処法まで実例つきで紹介します。]]></description>
										<content:encoded><![CDATA[

  <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">スプレッドシートのINDIRECT関数とは？</a><ol><li><a href="#toc2" tabindex="0">読み方・語源</a></li><li><a href="#toc3" tabindex="0">INDIRECT関数でできること</a></li></ol></li><li><a href="#toc4" tabindex="0">スプレッドシートのINDIRECT関数の書き方（構文・引数）</a><ol><li><a href="#toc5" tabindex="0">基本構文</a></li><li><a href="#toc6" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc7" tabindex="0">INDIRECT関数の基本的な使い方</a><ol><li><a href="#toc8" tabindex="0">同じシート内のセルを文字列で参照する</a></li><li><a href="#toc9" tabindex="0">別シートのセルを動的に参照する</a></li><li><a href="#toc10" tabindex="0">セル番地を文字列で組み立てて参照する</a></li></ol></li><li><a href="#toc11" tabindex="0">スプレッドシートならではの実践活用パターン</a><ol><li><a href="#toc12" tabindex="0">パターン1: プルダウンで参照先シートを切り替える</a></li><li><a href="#toc13" tabindex="0">パターン2: IMPORTRANGE+INDIRECTで別ファイルを動的に切り替える</a></li><li><a href="#toc14" tabindex="0">パターン3: INDEX/MATCHと組み合わせた検索</a></li><li><a href="#toc15" tabindex="0">パターン4: 名前付き範囲をINDIRECTで呼び出す</a></li></ol></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc17" tabindex="0">似た関数との違い・使い分け</a></li><li><a href="#toc18" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">「シート名をセルで切り替えたい」「プルダウンの選択に応じて参照先を変えたい」――そんな場面、ありませんか？</p>



<p class="wp-block-paragraph">手作業でいちいち数式を書き換えるのは面倒ですし、シートが増えるたびに修正が必要になります。</p>



<p class="wp-block-paragraph">スプレッドシートの<strong>INDIRECT関数</strong>を使えば、文字列をセル参照に変換できます。参照先を動的に切り替える仕組みが、数式ひとつで作れますよ。</p>



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



<p class="wp-block-paragraph">INDIRECT関数は「<strong>インダイレクト関数</strong>」と読みます。英語の「indirect」は「間接的な」という意味です。</p>



<p class="wp-block-paragraph">セル番地を直接指定するのではなく、<strong>文字列を経由して間接的に参照する</strong>。この動きがそのまま関数名になっています。</p>



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



<p class="wp-block-paragraph">INDIRECT関数を使うと、次のようなことができます。</p>



<ul class="wp-block-list"><li>文字列で指定したセル番地の値を取得する</li><li>プルダウンの選択値に応じて参照先シートを切り替える</li><li>IMPORTRANGE（別ファイルのデータを取り込む関数）と組み合わせて、参照先ファイルを動的に変更する</li><li>セル番地を文字列の結合で組み立てて参照する</li></ul>



<p class="wp-block-paragraph">ポイントは「<strong>参照先を固定しない</strong>」ことです。セルの値や数式の結果に応じて、どこを見に行くかを自在に変えられます。</p>



<h2 class="wp-block-heading"><span id="toc4">スプレッドシートのINDIRECT関数の書き方（構文・引数）</span></h2>



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



<pre class="wp-block-code"><code>=INDIRECT(セル参照の文字列, [A1形式にする])</code></pre>



<h3 class="wp-block-heading"><span id="toc6">引数の説明</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>A1形式にする</td><td>省略可</td><td>TRUE（またはデフォルト）= A1形式。FALSE = R1C1形式</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">第1引数には<code>"A1"</code>のような文字列リテラルだけでなく、セル参照も渡せます。たとえばA1セルに「B3」と入力されていれば、<code>=INDIRECT(A1)</code>でB3セルの値を取得します。</p>



<p class="wp-block-paragraph">第2引数は、ほとんどの場合は省略してOKです。R1C1形式を使いたいときだけFALSEを指定してください。</p>



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



<h3 class="wp-block-heading"><span id="toc8">同じシート内のセルを文字列で参照する</span></h3>



<p class="wp-block-paragraph">もっともシンプルな使い方です。文字列でセル番地を指定して、その値を取得します。</p>



<p class="wp-block-paragraph">たとえばB2セルに「100」と入っているとします。</p>



<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>=INDIRECT(&quot;B2&quot;)</code></pre>



<p class="wp-block-paragraph">結果は「100」です。<code>"B2"</code>という文字列が、B2セルへの参照に変換されます。</p>



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



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



<p class="wp-block-paragraph">「それなら<code>=B2</code>と書けばいいのでは？」と思いますよね。そのとおりです。この使い方だけなら、INDIRECT関数を使うメリットはありません。</p>



<p class="wp-block-paragraph">「それなら<code>=B2</code>と書けばいいのでは？」と思いますよね。そのとおりです。この使い方だけなら、INDIRECT関数を使うメリットはありません。</p>



<p class="wp-block-paragraph">真価を発揮するのは、参照先を<strong>動的に変えたい</strong>ときです。</p>



<h3 class="wp-block-heading"><span id="toc9">別シートのセルを動的に参照する</span></h3>



<p class="wp-block-paragraph">A1セルに「売上データ」というシート名が入っているとします。「売上データ」シートのB2セルの値を取得するには、次のように書きます。</p>



<pre class="wp-block-code"><code>=INDIRECT(A1&amp;&quot;!B2&quot;)</code></pre>



<p class="wp-block-paragraph">A1の値と<code>"!B2"</code>を結合して、<code>"売上データ!B2"</code>という文字列を作っています。INDIRECT関数がこれをセル参照に変換してくれます。</p>



<p class="wp-block-paragraph">A1セルの値を「経費データ」に変えれば、参照先は自動で「経費データ!B2」に切り替わります。数式を書き換える必要はありません。</p>



<p class="wp-block-paragraph"><strong>注意点</strong>: シート名にスペースや記号が含まれる場合は、シングルクォーテーションで囲む必要があります。</p>



<p class="wp-block-paragraph"><strong>注意点</strong>: シート名にスペースや記号が含まれる場合は、シングルクォーテーションで囲む必要があります。</p>



<pre class="wp-block-code"><code>=INDIRECT(&quot;'&quot;&amp;A1&amp;&quot;'!B2&quot;)</code></pre>



<h3 class="wp-block-heading"><span id="toc10">セル番地を文字列で組み立てて参照する</span></h3>



<p class="wp-block-paragraph">行番号や列名をセルに持たせて、参照先を組み立てることもできます。</p>



<p class="wp-block-paragraph">A1セルに「B」、B1セルに「5」と入っているとします。</p>



<pre class="wp-block-code"><code>=INDIRECT(A1&amp;B1)</code></pre>



<p class="wp-block-paragraph"><code>"B"</code>と<code>"5"</code>が結合されて<code>"B5"</code>になり、B5セルの値を取得します。</p>



<p class="wp-block-paragraph">ADDRESS関数（行番号と列番号からセル番地の文字列を生成する関数）と組み合わせる方法もあります。</p>



<pre class="wp-block-code"><code>=INDIRECT(ADDRESS(3,2))</code></pre>



<p class="wp-block-paragraph">ADDRESS(3,2)は<code>"$B$3"</code>を返します。これをINDIRECT関数がB3セルへの参照に変換し、B3の値が取得されます。</p>



<h2 class="wp-block-heading"><span id="toc11">スプレッドシートならではの実践活用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc12">パターン1: プルダウンで参照先シートを切り替える</span></h3>



<p class="wp-block-paragraph">月別にシートを分けている場合を考えてみましょう。「1月」「2月」「3月」というシートがあるとします。</p>



<p class="wp-block-paragraph">A1セルにプルダウンを作成し、シート名を選べるようにします。B2セルに次の数式を入力します。</p>



<pre class="wp-block-code"><code>=INDIRECT(A1&amp;&quot;!B2&quot;)</code></pre>



<p class="wp-block-paragraph">プルダウンで「2月」を選ぶと、2月シートのB2が参照されます。「3月」に切り替えれば、3月シートのB2に変わります。</p>



<p class="wp-block-paragraph">月次レポートの集計など、同じ構成のシートを切り替えて見たいときに便利です。</p>



<p class="wp-block-paragraph">範囲全体を参照したい場合は、次のように書きます。</p>



<pre class="wp-block-code"><code>=SUM(INDIRECT(A1&amp;&quot;!B2:B10&quot;))</code></pre>



<p class="wp-block-paragraph">これでプルダウンの選択に応じたシートのB2:B10が合計されます。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン2: IMPORTRANGE+INDIRECTで別ファイルを動的に切り替える</span></h3>



<p class="wp-block-paragraph">これはスプレッドシートならではの使い方です。Excelではできません。</p>



<p class="wp-block-paragraph">IMPORTRANGE関数は、別のスプレッドシートファイルからデータを取り込む関数です。通常はURLを直接指定しますが、INDIRECT関数と組み合わせると参照先ファイルを動的に切り替えられます。</p>



<p class="wp-block-paragraph">A1セルにスプレッドシートのURLが入っているとします。</p>



<pre class="wp-block-code"><code>=IMPORTRANGE(INDIRECT(A1),&quot;Sheet1!A1:D10&quot;)</code></pre>



<p class="wp-block-paragraph">INDIRECT(A1)がA1セルのURL文字列を返し、IMPORTRANGEがそのファイルのデータを取り込みます。</p>



<p class="wp-block-paragraph">A1のURLを変えるだけで、別ファイルのデータに切り替わります。部署ごとにファイルが分かれている場合などに活用できます。</p>



<p class="wp-block-paragraph"><strong>注意点</strong>: IMPORTRANGEは初回使用時にアクセス許可が必要です。URLを切り替えるたびに、新しいファイルへの許可が求められる場合があります。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン3: INDEX/MATCHと組み合わせた検索</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>（検索キーの位置を返す関数）にINDIRECT関数を組み合わせると、検索対象の範囲自体を動的に切り替えられます。</p>



<p class="wp-block-paragraph">A1セルにシート名「商品マスタ」が入っているとします。</p>



<pre class="wp-block-code"><code>=INDEX(INDIRECT(A1&amp;&quot;!C2:C100&quot;),MATCH(&quot;りんご&quot;,INDIRECT(A1&amp;&quot;!B2:B100&quot;),0))</code></pre>



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



<ol class="wp-block-list"><li>MATCH関数が「りんご」の行番号を探す</li><li>INDEX関数がその行のC列の値を返す</li><li>INDIRECT関数が検索範囲のシートを動的に決めている</li></ol>



<p class="wp-block-paragraph">シート名を変えるだけで、別のマスタから同じ検索ができます。</p>



<p class="wp-block-paragraph">ただし、参照先が固定で決まっている場合はINDIRECT関数を使う必要はありません。<a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a>とMATCH関数だけで十分です。「参照先を切り替えたい」ときにINDIRECT関数を足す、と覚えておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc15">パターン4: 名前付き範囲をINDIRECTで呼び出す</span></h3>



<p class="wp-block-paragraph">スプレッドシートでは「名前付き範囲」を設定できます。たとえば「売上合計」という名前でA1:A10を定義しているとします。</p>



<pre class="wp-block-code"><code>=SUM(INDIRECT(&quot;売上合計&quot;))</code></pre>



<p class="wp-block-paragraph">名前付き範囲の名称を文字列として渡すと、その範囲を参照できます。</p>



<p class="wp-block-paragraph">セルに名前付き範囲の名称を入れておけば、動的な切り替えも可能です。</p>



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



<p class="wp-block-paragraph">A1に「売上合計」と入力すれば売上合計の範囲が、「経費合計」と入力すれば経費合計の範囲が参照されます。</p>



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



<p class="wp-block-paragraph">INDIRECT関数で発生するエラーと、その原因・対処法をまとめます。</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>#REF!</code></td><td>セル参照の文字列が空</td><td>参照元のセルが空でないか確認する</td></tr><tr><td><code>#REF!</code></td><td>不正なセルアドレス（例: <code>"ZZZ1"</code>）</td><td>セル番地の文字列が正しいか確認する</td></tr><tr><td><code>#REF!</code></td><td>IMPORTRANGE連携でURLが無効</td><td>URLが正しいか、アクセス許可があるか確認する</td></tr><tr><td><code>#VALUE!</code></td><td>第2引数にTRUE/FALSE以外を指定した</td><td>第2引数を省略するか、TRUE/FALSEを指定する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">もっとも多いのは<code>#REF!</code>エラーです。INDIRECT関数に渡している文字列が、有効なセル参照になっているかを確認しましょう。</p>



<p class="wp-block-paragraph">デバッグのコツは、INDIRECT関数を外して<strong>引数の文字列だけを確認する</strong>ことです。たとえば<code>=INDIRECT(A1&"!B2")</code>でエラーが出たら、<code>=A1&"!B2"</code>だけをセルに入力してみてください。出力される文字列を目視で確認するのが一番早いです。</p>



<p class="wp-block-paragraph">デバッグのコツは、INDIRECT関数を外して<strong>引数の文字列だけを確認する</strong>ことです。たとえば<code>=INDIRECT(A1&"!B2")</code>でエラーが出たら、<code>=A1&"!B2"</code>だけをセルに入力してみてください。出力される文字列を目視で確認するのが一番早いです。</p>



<h2 class="wp-block-heading"><span id="toc17">似た関数との違い・使い分け</span></h2>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>特徴</th><th>使いどころ</th></tr></thead><tbody><tr><td>INDIRECT</td><td>文字列をセル参照に変換する</td><td>参照先を動的に切り替えたいとき</td></tr><tr><td>ADDRESS</td><td>行番号・列番号からセル番地の文字列を生成する</td><td>INDIRECTに渡す文字列を組み立てるとき</td></tr><tr><td>INDEX</td><td>範囲から行番号・列番号で直接値を取得する</td><td>参照先が固定なら、INDIRECTより高速でシンプル</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP</a></td><td>検索キーに一致する行の値を返す</td><td>単純な縦方向の検索にはVLOOKUPが手軽</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>INDIRECTとINDEXの使い分けが特に重要です。</strong></p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a>は行番号と列番号を指定して値を取得します。参照先が計算で確定するなら、INDEX関数のほうが適しています。</p>



<p class="wp-block-paragraph">INDIRECT関数は<strong>揮発性関数</strong>です。シートの値が変更されるたびに再計算されます。大量に使うとスプレッドシートの動作が重くなる可能性があります。</p>



<p class="wp-block-paragraph">「参照先のシートやファイルを動的に切り替えたい」ならINDIRECT関数。「範囲内の特定の位置から値を取りたい」ならINDEX関数。この基準で選んでみてください。</p>



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



<p class="wp-block-paragraph">スプレッドシートのINDIRECT関数は、文字列をセル参照に変換する関数です。</p>



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



<ul class="wp-block-list"><li>構文は<code>=INDIRECT(セル参照の文字列, [A1形式にする])</code></li><li>文字列を「間接的に」セル参照として使える</li><li>プルダウンと組み合わせて参照先シートを切り替えられる</li><li>IMPORTRANGE+INDIRECTで別ファイルの動的切り替えができる（スプレッドシート限定）</li><li>揮発性関数なので、大量使用には注意が必要</li><li>参照先が固定なら<a href="https://mashukabu.com/spreadsheet-index-function/">INDEX関数</a>のほうがシンプルで高速</li></ul>



<p class="wp-block-paragraph">「どのシートを見るか」「どのファイルから取るか」をセルの値で制御したいとき、INDIRECT関数はとても頼りになります。ぜひ活用してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-indirect-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのVLOOKUP関数の使い方｜別シート参照・エラー対処まで解説</title>
		<link>https://mashukabu.com/spreadsheet-vlookup-function/</link>
					<comments>https://mashukabu.com/spreadsheet-vlookup-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 15:12:53 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[VLOOKUP]]></category>
		<category><![CDATA[XLOOKUP]]></category>
		<category><![CDATA[エラー対処]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[別シート参照]]></category>
		<category><![CDATA[検索関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4650</guid>

					<description><![CDATA[スプレッドシートのVLOOKUP関数の使い方を基本から丁寧に解説。構文・引数の意味、別シート参照、#N/Aエラーの対処法、XLOOKUP・INDEX+MATCHとの使い分けまで実務で使えるサンプルつきで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「商品コードを入れたら商品名を自動で表示したい」。スプレッドシートを使っていると、こんな場面によく出会いますよね。</p>



<p class="wp-block-paragraph">手作業で1つずつ探していたら時間がかかりますし、コピペミスも起きがちです。</p>



<p class="wp-block-paragraph">そんなときに活躍するのが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-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">スプレッドシートのVLOOKUP関数とは？</a></li><li><a href="#toc2" tabindex="0">VLOOKUP関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li><li><a href="#toc5" tabindex="0">「並べ替え済み」（FALSE / TRUE）の使い分け</a></li></ol></li><li><a href="#toc6" tabindex="0">VLOOKUP関数の基本的な使い方</a><ol><li><a href="#toc7" tabindex="0">同じシート内でデータを検索する</a></li><li><a href="#toc8" tabindex="0">別シートのデータを参照する</a></li><li><a href="#toc9" tabindex="0">範囲を固定するコツ（絶対参照）</a></li></ol></li><li><a href="#toc10" tabindex="0">VLOOKUP関数の実務活用パターン</a><ol><li><a href="#toc11" tabindex="0">IFERROR関数と組み合わせてエラーを防ぐ</a></li><li><a href="#toc12" tabindex="0">近似一致（TRUE）で料金ランク判定する</a></li><li><a href="#toc13" tabindex="0">ワイルドカードで部分一致検索する</a></li><li><a href="#toc14" tabindex="0">IMPORTRANGE関数と組み合わせて別ファイルを参照する</a></li><li><a href="#toc15" tabindex="0">複数条件で検索する（補助列の活用）</a></li></ol></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc17" tabindex="0">#N/Aエラー</a></li><li><a href="#toc18" tabindex="0">#REF!エラー</a></li><li><a href="#toc19" tabindex="0">間違った値が返る</a></li></ol></li><li><a href="#toc20" tabindex="0">VLOOKUP関数と他の検索関数の使い分け</a><ol><li><a href="#toc21" tabindex="0">VLOOKUPの3つの制約</a></li><li><a href="#toc22" tabindex="0">VLOOKUP / XLOOKUP / INDEX+MATCH 比較表</a></li><li><a href="#toc23" tabindex="0">どの関数を選べばいい？</a></li></ol></li><li><a href="#toc24" tabindex="0">まとめ</a><ol><li><a href="#toc25" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">VLOOKUP関数（読み方: ブイルックアップ関数）は、範囲の先頭列を縦方向に検索する関数です。一致した行から、指定した列の値を返してくれます。</p>



<p class="wp-block-paragraph">名前はVertical（垂直）+ Lookup（検索）が由来です。「商品コードから商品名を引っ張る」「社員番号から部署名を取得する」。こうした「表引き」作業を数式1つで片付けてくれます。</p>



<p class="wp-block-paragraph">ポイントは<strong>検索する列が範囲の先頭（左端）にある</strong>ことです。左端以外の列で検索したい場合は、<a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a>を検討してください。</p>



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



<ul class="wp-block-list"><li>マスタ表から名前・価格・区分などを自動取得する</li><li>別シートや別ファイルのデータを参照する</li><li>近似一致で料金ランク・成績判定を行う</li><li>ワイルドカードで部分一致検索をする</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>VLOOKUP関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。</p></blockquote>



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



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



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



<pre class="wp-block-code"><code>=VLOOKUP(検索キー, 範囲, 番号, [並べ替え済み])</code></pre>



<p class="wp-block-paragraph">引数は4つあります。最後の「並べ替え済み」だけ省略できます。</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</td></tr><tr><td>範囲</td><td>必須</td><td>検索対象の表。先頭列に検索キーを含むこと</td><td>B2:E100</td></tr><tr><td>番号</td><td>必須</td><td>範囲の左端から数えて何列目を返すか（1以上）</td><td>3</td></tr><tr><td>並べ替え済み</td><td>省略可</td><td>FALSE = 完全一致 / TRUE = 近似一致</td><td>FALSE</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Excelでは「検索値・列番号・検索の型」と呼びますが、スプレッドシートでは「検索キー・番号・並べ替え済み」です。動作は同じなので、Excel経験者はそのまま読み替えてください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc5">「並べ替え済み」（FALSE / TRUE）の使い分け</span></h3>



<p class="wp-block-paragraph">ここがVLOOKUPで一番つまずきやすい部分です。</p>



<p class="wp-block-paragraph"><strong>FALSE（完全一致）</strong> は、検索キーとぴったり一致するデータだけを探します。実務の9割はこちらです。一致しなければ#N/Aエラーになります。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, B2:D100, 2, FALSE)</code></pre>



<p class="wp-block-paragraph"><strong>TRUE（近似一致）</strong> は、検索キー以下の最大値を返します。料金表やランク判定に使います。ただし先頭列が昇順ソートされていることが前提です。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, F2:G10, 2, TRUE)</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>「並べ替え済み」を省略するとデフォルトはTRUEです。「なぜか変な値が返る」の原因は、たいていこの省略です。迷ったらFALSEを明示してください。</p></blockquote>



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



<h3 class="wp-block-heading"><span id="toc7">同じシート内でデータを検索する</span></h3>



<p class="wp-block-paragraph">商品コードから商品名を取得する例で見てみましょう。</p>



<p class="wp-block-paragraph">A列〜C列に商品マスタがあるとします。A列が商品コード、B列が商品名、C列が価格です。</p>



<p class="wp-block-paragraph">E2に入力したコードから商品名を取得するにはこう書きます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(E2, A2:C100, 2, FALSE)</code></pre>



<p class="wp-block-paragraph">各引数の意味は次のとおりです。</p>



<ul class="wp-block-list"><li>E2: 検索キー（入力した商品コード）</li><li>A2:C100: 範囲（商品マスタ全体）</li><li>2: 範囲の左から2列目（商品名）を返す</li><li>FALSE: 完全一致で検索</li></ul>



<p class="wp-block-paragraph">E2に「P-001」と入力すると、A列から「P-001」を探し、同じ行のB列の値を返します。</p>



<h3 class="wp-block-heading"><span id="toc8">別シートのデータを参照する</span></h3>



<p class="wp-block-paragraph">実務では検索先が別シートにあることがほとんどです。シート名のあとに「!」をつけて範囲を指定します。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, マスタ!A:D, 3, FALSE)</code></pre>



<p class="wp-block-paragraph">シート名に空白を含む場合はシングルクォーテーションで囲みます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, '商品 マスタ'!A:D, 3, FALSE)</code></pre>



<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="toc9">範囲を固定するコツ（絶対参照）</span></h3>



<p class="wp-block-paragraph">VLOOKUPを下方向にコピーすると、範囲がズレることがあります。範囲は絶対参照で固定しましょう。</p>



<p class="wp-block-paragraph">セル参照を選択した状態でF4キーを押すと「$」がつきます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, $B$2:$D$100, 2, FALSE)</code></pre>



<p class="wp-block-paragraph">検索キーのA2は相対参照のまま、範囲だけ固定するのが正解です。</p>



<p class="wp-block-paragraph">なお、列全体を参照する書き方（A:Dなど）ならコピーしてもズレません。ただしデータ量が多いと処理が遅くなる場合があります。</p>



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



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



<p class="wp-block-paragraph">VLOOKUPは検索キーが見つからないと#N/Aエラーを返します。資料として見栄えが悪いですし、後続の計算にも影響します。</p>



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



<pre class="wp-block-code"><code>=IFERROR(VLOOKUP(A2, マスタ!A:D, 3, FALSE), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">実務では「該当なし」や空文字「&#8221;&#8221;」を指定するケースが多いです。</p>



<h3 class="wp-block-heading"><span id="toc12">近似一致（TRUE）で料金ランク判定する</span></h3>



<p class="wp-block-paragraph">売上金額からランクを判定する場面では、近似一致が便利です。</p>



<p class="wp-block-paragraph">ランク表が次のようになっているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>下限金額</th><th>ランク</th></tr></thead><tbody><tr><td>0</td><td>C</td></tr><tr><td>100000</td><td>B</td></tr><tr><td>300000</td><td>A</td></tr><tr><td>500000</td><td>S</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この表がF2:G5にあるとします。B2の金額に対してランクを返すにはこう書きます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(B2, $F$2:$G$5, 2, TRUE)</code></pre>



<p class="wp-block-paragraph">B2が250,000なら「B」が返ります。250,000以下の最大値は100,000なので、その行のランクが返る仕組みです。</p>



<p class="wp-block-paragraph">近似一致を使うときは下限金額を必ず昇順で並べてください。</p>



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



<p class="wp-block-paragraph">「並べ替え済み」をFALSEにした状態でワイルドカードが使えます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(&quot;*東京*&quot;, A2:C100, 2, FALSE)</code></pre>



<p class="wp-block-paragraph">「*」は任意の文字列にマッチします。「東京」を含む最初のデータを探したいときに使えます。</p>



<p class="wp-block-paragraph">セル参照を使う場合は「&#038;」で連結します。</p>



<pre class="wp-block-code"><code>=VLOOKUP(&quot;*&quot;&amp;E2&amp;&quot;*&quot;, A2:C100, 2, FALSE)</code></pre>



<h3 class="wp-block-heading"><span id="toc14">IMPORTRANGE関数と組み合わせて別ファイルを参照する</span></h3>



<p class="wp-block-paragraph">スプレッドシートならではの活用法です。IMPORTRANGE関数（別ファイルのデータを取得する関数）で取り込んだ範囲をVLOOKUPの検索対象にできます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2, IMPORTRANGE(&quot;スプレッドシートURL&quot;, &quot;マスタ!A:D&quot;), 3, FALSE)</code></pre>



<p class="wp-block-paragraph">初回はアクセス許可の確認が表示されます。「アクセスを許可」を押せば、以降は自動的にデータを参照できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>IMPORTRANGEは共有ドライブの大規模マスタなどで重宝します。ただしファイルが重くなりやすいので、必要な列だけに絞ると安心です。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc15">複数条件で検索する（補助列の活用）</span></h3>



<p class="wp-block-paragraph">VLOOKUPは検索キーを1つしか指定できません。「部署」と「役職」の2条件で検索したい場合は、補助列を作ります。</p>



<p class="wp-block-paragraph">補助列に2つの値を「&#038;」で連結した値を入れます。</p>



<pre class="wp-block-code"><code>=A2&amp;&quot;-&quot;&amp;B2</code></pre>



<p class="wp-block-paragraph">VLOOKUPの検索キーも同じ形式で連結します。</p>



<pre class="wp-block-code"><code>=VLOOKUP(E2&amp;&quot;-&quot;&amp;F2, 補助列を含む範囲, 列番号, FALSE)</code></pre>



<p class="wp-block-paragraph">補助列を使いたくない場合は、<a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a>やFILTER関数も検討してみてください。</p>



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



<h3 class="wp-block-heading"><span id="toc17">#N/Aエラー</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>データを追加するかIFERRORで対処</td></tr><tr><td>データ型の不一致</td><td>数値と文字列が混在していないか</td><td><a href="https://mashukabu.com/spreadsheet-value-function/">VALUE関数</a>で型を統一</td></tr><tr><td>余分なスペース</td><td>見えない空白が入っていないか</td><td><a href="https://mashukabu.com/spreadsheet-trim-function/">TRIM関数</a>で除去</td></tr><tr><td>範囲がズレている</td><td>絶対参照をつけ忘れていないか</td><td>F4キーで$をつける</td></tr></tbody></table></figure>



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



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



<p class="wp-block-paragraph">たとえば範囲がA:Cの3列なのに、番号に4を指定した場合です。列を削除した直後にも起こりやすいので、範囲と番号の対応を確認してください。</p>



<h3 class="wp-block-heading"><span id="toc19">間違った値が返る</span></h3>



<p class="wp-block-paragraph">エラーにはならないのに期待と違う値が返る。これが一番やっかいなケースです。</p>



<p class="wp-block-paragraph">最も多い原因は「並べ替え済みを省略してTRUEになっている」パターンです。FALSEを明示すれば解決します。</p>



<p class="wp-block-paragraph">もう1つは範囲の先頭列が検索対象と一致していないケースです。範囲の開始列を見直してみてください。</p>



<h2 class="wp-block-heading"><span id="toc20">VLOOKUP関数と他の検索関数の使い分け</span></h2>



<p class="wp-block-paragraph">VLOOKUPは便利ですが、万能ではありません。場面に応じた関数選びのポイントを整理します。</p>



<h3 class="wp-block-heading"><span id="toc21">VLOOKUPの3つの制約</span></h3>



<ol class="wp-block-list"><li><strong>左方向に検索できない</strong>: 範囲の先頭列でしか検索できません</li><li><strong>列番号がハードコード</strong>: 列の挿入や削除で番号がズレます</li><li><strong>最初の一致しか返さない</strong>: 重複があっても先頭の1件だけです</li></ol>



<h3 class="wp-block-heading"><span id="toc22">VLOOKUP / XLOOKUP / INDEX+MATCH 比較表</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>可能</td><td>可能</td></tr><tr><td>列追加への耐性</td><td>弱い</td><td>強い</td><td>強い</td></tr><tr><td>エラー時の既定値</td><td>IFERROR必要</td><td>引数で指定可</td><td>IFERROR必要</td></tr><tr><td>デフォルトの一致方式</td><td>近似一致</td><td>完全一致</td><td>完全一致（0指定）</td></tr><tr><td>複数列を一括で返す</td><td>不可</td><td>可能</td><td>不可</td></tr><tr><td>数式の読みやすさ</td><td>シンプル</td><td>シンプル</td><td>やや複雑</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc23">どの関数を選べばいい？</span></h3>



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



<ul class="wp-block-list"><li><strong>左方向の値を取りたい</strong> → <a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a>がベスト</li><li><strong>複数列の結果を一括で返したい</strong> → XLOOKUP関数がベスト</li><li><strong>条件に合う複数行を抽出したい</strong> → <a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER関数</a>の出番</li><li><strong>シンプルな右方向の表引き</strong> → VLOOKUPで十分</li></ul>



<p class="wp-block-paragraph">VLOOKUPは「古い関数」と言われることもあります。ただ、構文がシンプルで直感的なのは大きなメリットです。左方向検索が不要な場面ではVLOOKUPのほうが読みやすい数式になります。</p>



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



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



<ul class="wp-block-list"><li>構文は <code>=VLOOKUP(検索キー, 範囲, 番号, 並べ替え済み)</code> の4引数</li><li>「並べ替え済み」は省略せずFALSEを明示するのが安全</li><li>範囲の絶対参照とIFERRORの組み合わせは実務の必須テクニック</li><li>#N/Aエラーは「データ型の不一致」や「余分なスペース」を疑う</li><li>左方向検索が必要なら<a href="https://mashukabu.com/spreadsheet-xlookup/">XLOOKUP関数</a>を検討</li></ul>



<p class="wp-block-paragraph">まずは基本の完全一致検索からはじめてみてください。IFERROR関数やワイルドカードを組み合わせれば、実務のほとんどの場面に対応できます。</p>



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方｜VLOOKUPとの違いも解説</a></li><li><a href="https://mashukabu.com/spreadsheet-filter-function/">スプレッドシートのFILTER関数の使い方｜条件に合うデータを自動抽出</a></li><li><a href="https://mashukabu.com/spreadsheet-value-function/">スプレッドシートのVALUE関数の使い方｜文字列を数値に変換</a></li><li><a href="https://mashukabu.com/spreadsheet-trim-function/">スプレッドシートのTRIM関数の使い方｜余分なスペースを一括削除</a></li><li><a href="https://mashukabu.com/spreadsheet-sumif-function/">スプレッドシートのSUMIF関数の使い方｜条件付き合計</a></li><li><a href="https://mashukabu.com/spreadsheet-countif-function/">スプレッドシートのCOUNTIF関数の使い方｜条件付きカウント</a></li><li><a href="https://mashukabu.com/spreadsheet-today-function/">スプレッドシートのTODAY関数の使い方｜今日の日付を自動入力</a></li><li><a href="https://mashukabu.com/spreadsheet-text-function/">スプレッドシートのTEXT関数の使い方｜数値を任意の書式で表示</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-vlookup-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのINDIRECT関数｜別シート参照と#REF!の5原因</title>
		<link>https://mashukabu.com/excel-function-howto-use-indirect/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-indirect/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 15 Mar 2025 13:25:55 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[INDIRECT関数]]></category>
		<category><![CDATA[エラー対処]]></category>
		<category><![CDATA[別シート参照]]></category>
		<category><![CDATA[名前の定義]]></category>
		<category><![CDATA[揮発性関数]]></category>
		<category><![CDATA[連動プルダウン]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=2274</guid>

					<description><![CDATA[ExcelのINDIRECT関数の使い方を、別シート参照の書き方から解説します。シート名をセルで切り替える式とクォートのルール、#REF!が消えない5つの原因と確認手順、閉じたブックを参照できないときの回避策3択まで整理しました。重くなる原因とINDEXへ置き換える判断基準もまとめています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「支店ごとにシートが分かれた表を、数式1つで切り替えて集計したい」。ExcelのINDIRECT関数にたどり着く方の多くは、ここからスタートしますよね。</p>



<p class="wp-block-paragraph">ところが実際に組んでみると、こんな壁にぶつかります。</p>



<ul class="wp-block-list"><li>別シートを参照した瞬間に <code>#REF!</code> が出る</li><li>式は合っているように見えるのに、どこが悪いのかわからない</li><li>おまけに、ファイルまで重くなってきた</li></ul>



<p class="wp-block-paragraph">つまずきの正体は、たいてい「文字列の組み立て方」と「揮発性（再計算が多い性質）」の2つ。この2点さえ押さえれば、怖い関数ではありません。</p>



<p class="wp-block-paragraph">この記事では、INDIRECT関数の使い方を別シート参照の書き方から整理しました。<code>#REF!</code> が消えない5つの原因と確認手順もセットで解説。「重い」ときにINDEXへ置き換える判断基準も、早見表にまとめました。</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">ExcelのINDIRECT関数とは？文字列をセル参照に変える関数</a><ol><li><a href="#toc2" tabindex="0">基本構文と引数（参照文字列／参照形式）</a></li><li><a href="#toc3" tabindex="0">=A1 と何が違う？最小例で確認する</a></li></ol></li><li><a href="#toc4" tabindex="0">INDIRECTで別シートを参照する書き方｜シート名をセルで切り替える</a><ol><li><a href="#toc5" tabindex="0">基本形｜シート名を入れたセルと「!セル番地」をつなぐ</a></li><li><a href="#toc6" tabindex="0">シート名にスペースや記号があるときはシングルクォートで囲む</a></li><li><a href="#toc7" tabindex="0">動かないときの1行デバッグ術｜INDIRECTを外して文字列だけ表示する</a></li><li><a href="#toc8" tabindex="0">SUM・VLOOKUPと組み合わせてシート別に集計する</a></li><li><a href="#toc9" tabindex="0">選択に連動するプルダウンを作る4ステップ</a></li></ol></li><li><a href="#toc10" tabindex="0">INDIRECTが#REF!になる5つの原因と直し方</a><ol><li><a href="#toc11" tabindex="0">症状別・原因の切り分け早見表</a></li><li><a href="#toc12" tabindex="0">原因1・2｜クォート漏れと不可視スペース</a></li><li><a href="#toc13" tabindex="0">原因3｜参照先のブックが閉じている（回避策3択）</a></li><li><a href="#toc14" tabindex="0">原因4｜名前の定義が未登録・表記ゆれ</a></li><li><a href="#toc15" tabindex="0">原因5｜シート名を後からリネームした</a></li></ol></li><li><a href="#toc16" tabindex="0">「重い」「使わない方がいい」の理由とINDIRECTをやめる判断基準</a><ol><li><a href="#toc17" tabindex="0">揮発性関数とは？INDIRECTが再計算を増やす仕組み</a></li><li><a href="#toc18" tabindex="0">INDIRECTを使わない代替早見表（用途×代替手段×揮発性）</a></li><li><a href="#toc19" tabindex="0">INDIRECTでしか書けない唯一のケース</a></li><li><a href="#toc20" tabindex="0">重くなったファイルを軽くする初手</a></li></ol></li><li><a href="#toc21" tabindex="0">よくある質問｜INDIRECT関数</a><ol><li><a href="#toc22" tabindex="0">Q. シート名を変えたら壊れました。追従させる方法はありますか？</a></li><li><a href="#toc23" tabindex="0">Q. Web版Excelでも使えますか？</a></li><li><a href="#toc24" tabindex="0">Q. Googleスプレッドシートでも同じ書き方ですか？</a></li><li><a href="#toc25" tabindex="0">Q. INDIRECTは何個までなら重くなりませんか？</a></li><li><a href="#toc26" tabindex="0">Q. OFFSETとINDIRECTはどちらを使うべきですか？</a></li><li><a href="#toc27" tabindex="0">Q. エラーを事前に防ぐ方法はありますか？</a></li></ol></li><li><a href="#toc28" tabindex="0">まとめ｜場面別のINDIRECT早見表</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ExcelのINDIRECT関数とは？文字列をセル参照に変える関数</span></h2>



<p class="wp-block-paragraph">INDIRECT関数とは、文字列で書かれたセル番地やシート名を、実際のセル参照に変える関数です。読み方は「インダイレクト」。英語の indirect（間接的な）が語源です。</p>



<p class="wp-block-paragraph">セルを直接指さず、文字列を経由して間接的に参照することが名前の由来。この「間接性」が便利さの源であり、エラーと重さの原因でもあります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>対応バージョン</strong>: INDIRECT関数そのものは Excel 2003 以降のすべてのバージョンで使えます。ただし外部ブック（別ファイル）への参照は Web版Excel（ブラウザ版）では新規作成できません。記事後半では FILTER などのスピル関数にも触れます。こちらは Microsoft 365 / Excel 2021 以降が対象です。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">基本構文と引数（参照文字列／参照形式）</span></h3>



<p class="wp-block-paragraph">構文はシンプルで、覚える引数は実質1つだけ。</p>



<pre class="wp-block-code"><code>=INDIRECT(参照文字列, [参照形式])</code></pre>



<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>TRUE（省略時の既定）＝A1形式で解釈。FALSE＝R1C1形式で解釈</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">第2引数は、ほとんどの場面で省略してかまいません。R1C1形式（行も列もアルファベットではなく数値で表す参照方式）を使う機会はまれ。基本は第1引数だけで十分です。</p>



<h3 class="wp-block-heading"><span id="toc3">=A1 と何が違う？最小例で確認する</span></h3>



<p class="wp-block-paragraph">普通の数式は <code>=B2</code> のように参照先を直接書きます。対してINDIRECTは、「B2」という<strong>文字</strong>を受け取ってからB2を参照する仕組み。</p>



<p class="wp-block-paragraph">セルA1に「B2」と入力し、別のセルに次の数式を入れてみてください。</p>



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



<p class="wp-block-paragraph">これでセルB2の値が返ります。A1を「C5」に書き換えれば、数式はそのままで参照先がC5に変わる。この「後から参照先を動かせる」点こそがINDIRECTの存在意義です。</p>



<p class="wp-block-paragraph">逆に言うと、切り替える必要のない参照にINDIRECTを使う理由はありません。</p>



<h2 class="wp-block-heading"><span id="toc4">INDIRECTで別シートを参照する書き方｜シート名をセルで切り替える</span></h2>



<p class="wp-block-paragraph">INDIRECTが本領を発揮するのは、支店別・部署別・月別にシートが分かれた表の集計です。同時に、ここがエラーの最大の発生源。クォートのルールを正確に押さえましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">基本形｜シート名を入れたセルと「!セル番地」をつなぐ</span></h3>



<p class="wp-block-paragraph">セルA1にシート名が入っている前提で見てみましょう。</p>



<pre class="wp-block-code"><code>=INDIRECT(A1&amp;&quot;!B2&quot;)</code></pre>



<p class="wp-block-paragraph">A1が「1月」なら、<code>A1&"!B2"</code> は「1月!B2」という文字列になります。INDIRECTがこれを参照に変換し、1月シートのB2の値を返します。</p>



<p class="wp-block-paragraph">A1を「2月」に変えるだけで、参照先も2月シートに切り替わる。数式は1文字も書き換えません。月次レポートで重宝するパターンですよ。</p>



<h3 class="wp-block-heading"><span id="toc6">シート名にスペースや記号があるときはシングルクォートで囲む</span></h3>



<p class="wp-block-paragraph">ここが最大の落とし穴。シート名にスペースやハイフンなどの記号が含まれていると、さきほどの書き方では <code>#REF!</code> になります。</p>



<p class="wp-block-paragraph">シート名が「売上 データ」のように空白を含むなら、正しくはこう書きます。</p>



<pre class="wp-block-code"><code>=INDIRECT(&quot;'&quot;&amp;A1&amp;&quot;'!B2&quot;)</code></pre>



<p class="wp-block-paragraph">分解すれば3ブロックだけ。</p>



<ul class="wp-block-list"><li><code>"'"</code> … 開きのシングルクォート1文字</li><li><code>A1</code> … シート名（例:「売上 データ」）</li><li><code>"'!B2"</code> … 閉じのシングルクォートと、セル番地</li></ul>



<p class="wp-block-paragraph">つながると <code>'売上 データ'!B2</code> になり、Excelの正式なシート参照の形と一致します。手入力ならExcelが自動で付けてくれるクォートを、INDIRECTでは自分で組み込むわけです。</p>



<p class="wp-block-paragraph">迷ったら<strong>常にクォート付きで書く</strong>のが安全。スペースのないシート名に付けても、問題なく動きますよ。</p>



<h3 class="wp-block-heading"><span id="toc7">動かないときの1行デバッグ術｜INDIRECTを外して文字列だけ表示する</span></h3>



<p class="wp-block-paragraph"><code>#REF!</code> が出たら、真っ先にやってほしい確認があります。空いているセルに、INDIRECTのカッコの中身だけを入力してみてください。</p>



<pre class="wp-block-code"><code>=&quot;'&quot;&amp;A1&amp;&quot;'!B2&quot;</code></pre>



<p class="wp-block-paragraph">すると <code>'売上 データ'!B2</code> のように、受け取っている文字列が画面に出ます。ここが正しい形なら、INDIRECT側は必ず正しく参照してくれるはず。</p>



<p class="wp-block-paragraph">先頭のクォートが抜けていたら、数式の <code>"'"</code> が欠けています。<strong>エラーの原因は、たいていこの文字列の組み立て方</strong>。1行足すだけで自己解決できますよ。</p>



<h3 class="wp-block-heading"><span id="toc8">SUM・VLOOKUPと組み合わせてシート別に集計する</span></h3>



<p class="wp-block-paragraph">INDIRECTは範囲も返せるので、SUM関数の引数にもそのまま入ります。</p>



<pre class="wp-block-code"><code>=SUM(INDIRECT(A1&amp;&quot;!B2:B10&quot;))</code></pre>



<p class="wp-block-paragraph">A1で選んだシートのB2:B10だけを合計する数式です。支店を切り替えるたびに数式を直す作業から解放されますね。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>（表を縦に検索して該当行の値を取り出す関数）の検索範囲も、同じ要領で切り替えられます。</p>



<pre class="wp-block-code"><code>=VLOOKUP(A2,INDIRECT(B1&amp;&quot;!A:C&quot;),2,0)</code></pre>



<p class="wp-block-paragraph">B1にシート名（部署名）を入れておきます。B1を変えるだけで、同じ数式のまま検索先が切り替わる。スペース入りのシート名なら、クォート付きの形に直してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc9">選択に連動するプルダウンを作る4ステップ</span></h3>



<p class="wp-block-paragraph">「大分類で『果物』を選ぶと、小分類に『リンゴ・ミカン・バナナ』だけが並ぶ」。この連動プルダウンも、INDIRECTの代表的な使い道です。</p>



<ol class="wp-block-list"><li>カテゴリごとに、選択肢を縦方向に並べておきます。</li><li>各範囲を選択し「数式」タブの「名前の定義」へ。カテゴリ名と完全一致する名前を付けます。</li><li>大分類のセル（例: B2）に「データの入力規則」でリストを設定します。ソースは「果物,野菜」とカンマ区切り。</li><li>小分類のセル（例: C2）の入力規則のソースに <code>=INDIRECT(B2)</code> と入力します。</li></ol>



<p class="wp-block-paragraph">B2で「果物」が選ばれると、INDIRECTはその文字列を<strong>名前の定義</strong>として解釈します。名前の定義とは、セル範囲に付けた呼び名のこと。登録された範囲が、そのまま小分類の選択肢になる仕組みです。</p>



<p class="wp-block-paragraph">つまずきやすいのは名前の付け方。名前の定義にはスペースが使えないため、カテゴリ名に空白が入ると登録できません。</p>



<pre class="wp-block-code"><code>=INDIRECT(SUBSTITUTE(B2,&quot; &quot;,&quot;_&quot;))</code></pre>



<p class="wp-block-paragraph">SUBSTITUTE関数（文字列の一部を別の文字に置き換える関数）を挟む形です。空白を <code>_</code> に変換してから、名前を呼び出します。</p>



<p class="wp-block-paragraph">名前の登録手順は<a href="https://mashukabu.com/excel-named-range/">Excelの名前の定義</a>、入力規則の操作は<a href="https://mashukabu.com/excel-dropdown-list/">Excelのプルダウン（ドロップダウンリスト）完全ガイド</a>へ。手が止まったら、あわせて読んでみてください。</p>



<h2 class="wp-block-heading"><span id="toc10">INDIRECTが#REF!になる5つの原因と直し方</span></h2>



<p class="wp-block-paragraph">INDIRECTのエラーは、ほぼ <code>#REF!</code> の一択です。<code>#REF!</code> は「参照先が見つからない」という意味のエラー値。ほかのエラー値との違いは<a href="https://mashukabu.com/excel-error-value-list/">Excelのエラー値一覧と対処法</a>にまとめています。</p>



<p class="wp-block-paragraph">やっかいなのは、同じ表示なのに原因が5通りある点。まずは早見表で、自分の症状がどれに当たるかを絞り込みましょう。</p>



<h3 class="wp-block-heading"><span id="toc11">症状別・原因の切り分け早見表</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>症状・心当たり</th><th>原因</th><th>1分でできる確認</th><th>対処</th></tr></thead><tbody><tr><td>シート名にスペース・記号がある</td><td>1. クォート漏れ</td><td><code>="'"&A1&"'!B2"</code> で文字列を目視</td><td><code>"'"&A1&"'!</code> の形に直す</td></tr><tr><td>他システムからコピーした値を参照</td><td>2. 不可視スペース</td><td><code>=LEN(A1)</code> で文字数を数える</td><td>TRIM／SUBSTITUTEで空白を削除</td></tr><tr><td>別ファイル（別ブック）を参照</td><td>3. ブックが閉じている</td><td>そのブックを開くと直るか試す</td><td>回避策3択（後述）</td></tr><tr><td>連動プルダウン・名前を参照</td><td>4. 名前が未登録・表記ゆれ</td><td>「名前の管理」で一覧と突合</td><td>名前を登録／表記を揃える</td></tr><tr><td>最近シート名を変更した</td><td>5. リネームに追従しない</td><td>数式内の文字列と実際の名前を比較</td><td>文字列を書き換える</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">上から順に見ていけば、たいてい数分で原因は特定できます。ここからは原因別に直し方を確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc12">原因1・2｜クォート漏れと不可視スペース</span></h3>



<p class="wp-block-paragraph">原因1は、シングルクォートの付け忘れ。シート名に空白・ハイフン・記号が含まれると、クォートなしでは参照が成立しません。</p>



<pre class="wp-block-code"><code>=INDIRECT(A1&amp;&quot;!B2&quot;)        ← シート名が「売上 データ」だと #REF!
=INDIRECT(&quot;'&quot;&amp;A1&amp;&quot;'!B2&quot;)   ← これが正解</code></pre>



<p class="wp-block-paragraph">前述の1行デバッグ術で文字列を表示すれば、クォートの有無はひと目で確認できます。</p>



<p class="wp-block-paragraph">原因2は、参照文字列に紛れ込んだ<strong>目に見えない空白</strong>です。他システムから貼り付けた値でよく起こります。「東京」のつもりが「東京 」（末尾に空白）なら、シート名と一致せずエラーに。</p>



<p class="wp-block-paragraph">切り分けは <code>=LEN(A1)</code> で文字数を数えるだけ。「東京」なら2のはず。3以上が返るなら、余計な文字が混ざっています。</p>



<pre class="wp-block-code"><code>=INDIRECT(TRIM(A1)&amp;&quot;!B2&quot;)</code></pre>



<p class="wp-block-paragraph">TRIM関数（文字列の前後にある余分な半角スペースを削除する関数）で挟めば、たいていは直ります。</p>



<p class="wp-block-paragraph">ただしTRIMが消せるのは半角スペースだけ。全角スペースや、Webからのコピーに多いCHAR(160)には効きません。その場合はSUBSTITUTEで半角スペースに変換してから渡しましょう。</p>



<pre class="wp-block-code"><code>=INDIRECT(TRIM(SUBSTITUTE(A1,&quot;　&quot;,&quot; &quot;))&amp;&quot;!B2&quot;)</code></pre>



<p class="wp-block-paragraph"><code>"　"</code> の中身には、全角スペースを直接入力してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc13">原因3｜参照先のブックが閉じている（回避策3択）</span></h3>



<p class="wp-block-paragraph">別のExcelファイルをINDIRECTで参照する場合、そのファイルを<strong>開いていないと <code>#REF!</code> になります</strong>。不具合ではなく仕様です。</p>



<p class="wp-block-paragraph">比べてみましょう。普通のリンク数式（<code>=[Book1.xlsx]Sheet1!A1</code> の形）なら、相手を閉じていても値が残ります。最後に取得した値をキャッシュとして保持するからです。</p>



<p class="wp-block-paragraph">一方のINDIRECTは、毎回文字列を評価して参照を組み立て直す仕組み。だからキャッシュが効きません。回避策は次の3つです。</p>



<figure class="wp-block-table"><table><thead><tr><th>回避策</th><th>手軽さ</th><th>自動更新</th><th>Web版Excel</th></tr></thead><tbody><tr><td>参照先ブックを開いたまま使う</td><td>設定は不要。2ファイルを同時に開く負担はある</td><td>開いている間はリアルタイム</td><td>外部ブック参照の新規作成ができない</td></tr><tr><td>通常のリンク数式に切り替える</td><td>数式を書き換えるだけ</td><td>閉じていても直近のキャッシュ値を表示。最新化は「データ」タブ→「リンクの編集」→「値の更新」</td><td>新規作成は不可（既存の参照は表示可）</td></tr><tr><td>Power Queryで統合する</td><td>初期構築の手間はやや大きい</td><td>更新ボタンや自動更新の設定で更新できる</td><td>2026年1月から利用可能に。クエリ編集まで使えるかはプランによる</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Power Query（Excelに標準搭載されたデータ取得・整形の機能）は、複数ブックの統合に強い選択肢。ただしWeb版での対応範囲はプラン次第なので、導入前に自分の環境で確かめてください。</p>



<p class="wp-block-paragraph">そもそもシート名を切り替えたいだけなら、<strong>1ファイル内にシートを集約する</strong>のが結局いちばんラクですよ。</p>



<h3 class="wp-block-heading"><span id="toc14">原因4｜名前の定義が未登録・表記ゆれ</span></h3>



<p class="wp-block-paragraph">連動プルダウンで多いのがこのパターン。<code>=INDIRECT(B2)</code> でB2が「果物」でも、名前「果物」が登録されていなければ <code>#REF!</code> です。</p>



<p class="wp-block-paragraph">確認は「数式」タブ→「名前の管理」から。ありがちなのは、全角と半角の違いや末尾スペースといった表記ゆれ。</p>



<ul class="wp-block-list"><li>名前が未登録 → 範囲を選び直して登録する</li><li>表記ゆれ → 選択肢側の文字列と名前を完全一致させる</li><li>カテゴリ名に空白がある → SUBSTITUTEで <code>_</code> に置換する（前述）</li></ul>



<p class="wp-block-paragraph">事前に防ぐならISREF関数（参照として有効かを判定する関数）が使えます。<code>=ISREF(INDIRECT(B2))</code> は、有効ならTRUE・無効ならFALSEを返す数式。IFERROR関数と組み合わせておくと安心ですよ。</p>



<h3 class="wp-block-heading"><span id="toc15">原因5｜シート名を後からリネームした</span></h3>



<p class="wp-block-paragraph">意外と見落とされがちなのが、これ。<strong>シート名を変更しても、INDIRECTの中の文字列は追従しません</strong>。</p>



<p class="wp-block-paragraph">普通の参照 <code>=Sheet1!A5</code> なら、シート名を「4月」に変えた瞬間にExcelが追従します。数式は <code>=4月!A5</code> へ自動で書き換わるので、こちらは何もしなくて大丈夫。</p>



<p class="wp-block-paragraph">ところがINDIRECTの引数は、Excelから見ればただの文字列。書き換えの対象にならず、リネーム後は <code>#REF!</code> になります。</p>



<p class="wp-block-paragraph">この挙動は、公式ドキュメントに明記されているわけではありません。ただし多くの実務現場で共通して確認されている動きです。シート名を触った直後のエラーなら、真っ先に疑ってください。</p>



<p class="wp-block-paragraph">対処は2択。シート名をセルで管理しているなら、そのセルの値を新しい名前に書き換えます。数式内に <code>"Sheet1!A5"</code> と直書きしているなら、文字列を修正しましょう。</p>



<p class="wp-block-paragraph">切り替えの必要がないなら、<code>=Sheet1!A5</code> という普通の参照に戻すのがいちばん確実。この事故のリスクごと消えますよ。</p>



<h2 class="wp-block-heading"><span id="toc16">「重い」「使わない方がいい」の理由とINDIRECTをやめる判断基準</span></h2>



<p class="wp-block-paragraph">INDIRECTには「重い」という評判がついて回ります。ここでは、その仕組みと使い続けてよい場面の線引きを見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc17">揮発性関数とは？INDIRECTが再計算を増やす仕組み</span></h3>



<p class="wp-block-paragraph">INDIRECTは<strong>揮発性関数</strong>（シートのどこかが変わるたびに再計算される関数）です。ここが「重い」と言われる理由のすべて。</p>



<p class="wp-block-paragraph">普通の関数は、自分が参照しているセルが変わったときだけ計算し直します。対して揮発性関数は、無関係なセルを1文字打っただけでも再計算が走ります。ファイルを開いた瞬間も同じ。</p>



<p class="wp-block-paragraph">同じ仲間には、TODAY・NOW・RAND・RANDBETWEEN、そして<a href="https://mashukabu.com/excel-function-howto-use-offset/">OFFSET関数</a>があります。</p>



<p class="wp-block-paragraph">やっかいなのは、再計算が連鎖する点です。INDIRECTの結果を使うVLOOKUPやSUMIFも、つられて毎回計算し直されます。</p>



<p class="wp-block-paragraph">数個なら体感は変わりません。しかし数百・数千セルに広がると、入力のたびに固まるファイルができあがります。</p>



<h3 class="wp-block-heading"><span id="toc18">INDIRECTを使わない代替早見表（用途×代替手段×揮発性）</span></h3>



<p class="wp-block-paragraph">「INDIRECTは使わない方がいい」という意見をよく見かけますよね。正確に言えば、<strong>代替できる用途では使わない方がいい</strong>、です。用途別に整理しました。</p>



<figure class="wp-block-table"><table><thead><tr><th>用途</th><th>INDIRECTでの書き方</th><th>代替手段</th><th>代替後の揮発性</th></tr></thead><tbody><tr><td>行・列を数値で指定する</td><td><code>=INDIRECT(ADDRESS(3,2))</code></td><td><code>=INDEX(A:Z,3,2)</code></td><td>非揮発性になる</td></tr><tr><td>列は固定・行だけ可変</td><td><code>=INDIRECT("B"&A1)</code></td><td><code>=INDEX(B:B,A1)</code></td><td>非揮発性になる</td></tr><tr><td>増減する表の範囲を追う</td><td><code>=INDIRECT("A2:A"&COUNTA(A:A))</code></td><td>テーブルの構造化参照</td><td>非揮発性になる</td></tr><tr><td>同一シート内の絞り込み</td><td>作業列＋INDIRECT</td><td>FILTER関数（365・2021以降）</td><td>非揮発性になる</td></tr><tr><td>別ブックのデータを取り込む</td><td><code>=INDIRECT("'[Book1.xlsx]Sheet1'!A1")</code></td><td>通常のリンク数式／Power Query</td><td>非揮発性になる</td></tr><tr><td>シート名を文字列で切り替える</td><td><code>=INDIRECT(A1&"!B2")</code></td><td><strong>代替なし</strong></td><td>揮発性のまま</td></tr><tr><td>名前の定義を動的に呼ぶ</td><td><code>=INDIRECT(B2)</code></td><td><strong>代替なし</strong></td><td>揮発性のまま</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">用語を2つ補足します。構造化参照とは、表をテーブル化して <code>テーブル1[金額]</code> のように列名で書く方式のこと。COUNTAは空白でないセルの個数を数える関数です。</p>



<p class="wp-block-paragraph">置き換えの王道は上の2行。<code>ADDRESS(3,2)</code> が作るのは「$B$3」なので、INDIRECTの参照先はB3です。<code>INDEX(A:Z,3,2)</code> も範囲A:Zの3行目2列目、つまりB3を指します。</p>



<p class="wp-block-paragraph">2行目も同じ理屈。A1が5なら <code>INDIRECT("B"&A1)</code> はB5、<code>INDEX(B:B,A1)</code> もB5を返します。戻り値は同じまま、揮発性だけが消えるわけです。</p>



<p class="wp-block-paragraph">ADDRESS関数（行番号と列番号からセル番地の文字列を作る関数）との組み合わせを見かけたら、<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>に置き換えられないか疑ってみてください。判断軸は1本だけ。</p>



<ul class="wp-block-list"><li>参照先を<strong>行番号・列番号の数値</strong>で決められる → INDEXに置き換えて軽量化する</li><li>参照先を<strong>シート名や名前（文字列）</strong>で決めたい → INDIRECTのまま使う</li></ul>



<h3 class="wp-block-heading"><span id="toc19">INDIRECTでしか書けない唯一のケース</span></h3>



<p class="wp-block-paragraph">代替なしの2行には共通点があります。どちらも「シート名や名前という<strong>文字列</strong>を、その場で参照に解決している」こと。</p>



<p class="wp-block-paragraph">INDEXの範囲引数は、実物のセル範囲を受け取る仕様です。「&#8221;1月&#8221;という文字からシートを探して」という指示は解釈できません。FILTERやXLOOKUPも同じで、扱えるのは<strong>指定した範囲の中</strong>の絞り込みだけ。</p>



<p class="wp-block-paragraph">つまりExcel 365の時代でも、役割分担は変わっていません。</p>



<ul class="wp-block-list"><li>同一シート内の条件絞り込み → FILTERなどのスピル関数（1つの数式で複数セルに結果が自動展開される関数）</li><li>シートをまたぐ動的な切り替え → INDIRECT</li></ul>



<p class="wp-block-paragraph">競合しているようで、実は守備範囲が違うんですね。無理に置き換えず、使う個数を抑える方向で付き合いましょう。</p>



<h3 class="wp-block-heading"><span id="toc20">重くなったファイルを軽くする初手</span></h3>



<p class="wp-block-paragraph">すでに重いファイルでも、全部を置き換える必要はありません。効果が出るのは、<strong>同じ数式が何百行も並んでいる箇所</strong>だけです。</p>



<ol class="wp-block-list"><li><code>Ctrl</code> + <code>F</code> を押して「INDIRECT」を検索します。検索場所は「数式」を選んでください。</li><li>数百セル以上に展開されている列を特定します。</li><li>その列だけ、上の早見表に沿ってINDEXやテーブル参照に置き換えましょう。</li></ol>



<p class="wp-block-paragraph">改善しないなら、原因はINDIRECT以外にあるかもしれません。条件付き書式の重複や不要な画像、巨大すぎる範囲指定も定番の犯人。<a href="https://mashukabu.com/excel-slow-freeze-save-fix/">Excelが重い・固まる・保存できないときの対処</a>で切り分け手順を確認してみてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc21">よくある質問｜INDIRECT関数</span></h2>



<h3 class="wp-block-heading"><span id="toc22">Q. シート名を変えたら壊れました。追従させる方法はありますか？</span></h3>



<p class="wp-block-paragraph">INDIRECTの引数は文字列なので、自動で追従させる方法はありません。現実的な対策は2つ。</p>



<p class="wp-block-paragraph">1つは、シート名をセルに入力しておき、そのセルの値だけを更新する運用にすること。もう1つは、切り替えが不要なら普通の <code>=Sheet1!A5</code> に戻すことです。通常の参照ならExcelが自動で追従してくれますよ。</p>



<h3 class="wp-block-heading"><span id="toc23">Q. Web版Excelでも使えますか？</span></h3>



<p class="wp-block-paragraph">INDIRECT関数そのものは、Web版Excel（ブラウザ版）でも使えます。同じブック内のシート切り替えなら問題ありません。</p>



<p class="wp-block-paragraph">ただし<strong>外部ブック（別ファイル）への参照はWeb版では新規作成できません</strong>。既存の参照は表示できますが、作成や更新設定の変更にはデスクトップ版が必要。別ファイル参照はデスクトップ版で組んでくださいね。</p>



<h3 class="wp-block-heading"><span id="toc24">Q. Googleスプレッドシートでも同じ書き方ですか？</span></h3>



<p class="wp-block-paragraph">はい、スプレッドシートにも同名のINDIRECT関数があり、構文はExcelとほぼ同じ。別シート参照でシングルクォートが必要な点も共通です。</p>



<p class="wp-block-paragraph">ただし別スプレッドシートを参照する仕組みは異なります。Sheets側の書き方は<a href="https://mashukabu.com/spreadsheet-indirect-function/">スプレッドシートのINDIRECT関数の使い方</a>を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc25">Q. INDIRECTは何個までなら重くなりませんか？</span></h3>



<p class="wp-block-paragraph">明確な上限はありません。体感で言えば数十個なら気になりませんが、数百・数千セルに展開すると入力のたびに待たされます。</p>



<p class="wp-block-paragraph">判断は個数より<strong>用途</strong>で。数値で参照先が決まる箇所をINDEXに置き換えれば、残りが多少あっても実用速度に戻せますよ。</p>



<h3 class="wp-block-heading"><span id="toc26">Q. OFFSETとINDIRECTはどちらを使うべきですか？</span></h3>



<p class="wp-block-paragraph">どちらも揮発性関数なので、速度面の優劣はほぼありません。使い分けは<strong>参照先の決め方</strong>で判断します。</p>



<ul class="wp-block-list"><li>基準セルから「何行下・何列右」で位置を決めたい → OFFSET</li><li>シート名や名前を文字列で組み立てたい → INDIRECT</li></ul>



<p class="wp-block-paragraph">なお、OFFSETの用途の多くはINDEXで置き換えられます。軽さを優先するなら、まずINDEXを検討するのが定石ですよ。</p>



<h3 class="wp-block-heading"><span id="toc27">Q. エラーを事前に防ぐ方法はありますか？</span></h3>



<p class="wp-block-paragraph">次の3つを習慣にすると、<code>#REF!</code> の大半は起きなくなります。</p>



<ul class="wp-block-list"><li>シート名は常にクォート付きで書く（<code>="'"&A1&"'!B2"</code> の形）</li><li>セルから受け取る文字列はTRIMで挟む</li><li>名前の定義は「名前の管理」の一覧と突合してから使う</li></ul>



<p class="wp-block-paragraph">そのうえでISREF関数の判定を挟むか、IFERROR関数で表示を整えておくと万全。出てから直すより、出さない作りの方が結局ラクですよね。</p>



<h2 class="wp-block-heading"><span id="toc28">まとめ｜場面別のINDIRECT早見表</span></h2>



<p class="wp-block-paragraph">INDIRECT関数は、文字列をセル参照に変える関数でした。強みは「参照先を後から動かせる」こと。弱点は「文字列が崩れると <code>#REF!</code> になる」ことと「揮発性で重くなる」ことです。</p>



<p class="wp-block-paragraph">最後に、場面別の結論を早見表で整理しておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>場面</th><th>結論</th></tr></thead><tbody><tr><td>別シート参照（スペースなし）</td><td><code>=INDIRECT(A1&"!B2")</code> で参照できる</td></tr><tr><td>別シート参照（スペース・記号あり）</td><td><code>=INDIRECT("'"&A1&"'!B2")</code> とクォートで囲む</td></tr><tr><td><code>#REF!</code> が出た</td><td>クォート漏れ／不可視スペース／閉じたブック／名前未登録／シート名リネーム の5点を順に確認</td></tr><tr><td>式が正しいか確かめたい</td><td>INDIRECTを外して <code>="'"&A1&"'!B2"</code> で文字列を目視</td></tr><tr><td>別ブックを参照したい</td><td>ブックを開いたまま使う。または通常のリンク数式かPower Queryへ</td></tr><tr><td>行・列を数値で決められる</td><td>INDEXに置き換えて軽量化する</td></tr><tr><td>シート名・名前を文字列で切り替える</td><td>INDIRECTが唯一の手段</td></tr><tr><td>同一シート内を絞り込みたい</td><td>FILTERなどのスピル関数を優先（365・2021以降）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">迷ったときの判断軸はシンプル。「文字列で参照先を切り替えたいか」だけです。イエスならINDIRECT、ノーならINDEXやテーブルの構造化参照を選んでください。</p>



<p class="wp-block-paragraph"><code>#REF!</code> に出くわしたら、まずは1行デバッグ術で文字列を目視。それだけで大半は自己解決できます。月別シートの切り替えから、気軽に試してみてくださいね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-indirect/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>6症状で直すXLOOKUP関数の使い方｜別シート参照・空白が0になる問題まで</title>
		<link>https://mashukabu.com/excel-function-howto-use-xlookup/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-xlookup/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 27 Mar 2022 12:47:30 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[VLOOKUP]]></category>
		<category><![CDATA[XLOOKUP関数]]></category>
		<category><![CDATA[エラー対処]]></category>
		<category><![CDATA[スピル]]></category>
		<category><![CDATA[別シート参照]]></category>
		<category><![CDATA[検索関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=1469</guid>

					<description><![CDATA[ExcelのXLOOKUP関数の使い方を、別シートのマスタ参照から実際に手を動かす順番で解説します。空欄のはずが0になる、日付が5桁の数字になる、古い行が返るなど「エラーは出ないのに結果が変」な6症状を症状別に切り分け、対処法の副作用まで比較。VLOOKUPからの書き換え4パターンとエラー別の対処も掲載しています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelでVLOOKUPからXLOOKUPに乗り換えてみたものの、途中で手が止まっていませんか。</p>



<ul class="wp-block-list"><li>別シートに置いたマスタを、どう指定すればいいのか分からない</li><li>値は返ってきたのに、空欄のはずのセルが「0」になる</li><li>入社日を引いたら「44105」という5桁の数字が出てきた</li></ul>



<p class="wp-block-paragraph">エラーが表示されるなら、まだ調べようがあります。やっかいなのは<strong>エラーが出ないまま結果だけが変</strong>なケース。数式は正しく見えるので、どこを直せばいいのか見当もつきません。</p>



<p class="wp-block-paragraph">この記事ではExcelのXLOOKUP関数の使い方を、別シートのマスタを参照するところまで通しで解説します。そのうえで「エラーは出ないのに結果が変」な6症状を切り分けていきましょう。症状 → 起きていること → 30秒でできる確認 → 対処の順に進めますよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>対応バージョン</strong>: XLOOKUP関数が使えるのは次の環境です。</p><p>&#8211; Excel for Microsoft 365 / Excel 2024 / Excel 2021（いずれもMac版を含む）<br>&#8211; Excel for the web / iPad版 / iPhone版 / Android版</p><p>Excel 2016 と Excel 2019 は非対応。入力しても <code>#NAME?</code> エラーになります。</p></blockquote>



<p class="wp-block-paragraph">そもそも「使えない」「<code>#NAME?</code> が出る」で止まっていませんか。その場合は<a href="https://mashukabu.com/excel-xlookup-filter-name-error-version/">ExcelのXLOOKUP・FILTERが使えない・#NAME?の原因と対処</a>が答えになります。本記事ではその原因を深掘りしません。</p>



<p class="wp-block-paragraph">Googleスプレッドシートをお使いなら、<a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方</a>のほうが近道ですよ。</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">ExcelのXLOOKUP関数とは？基本の書き方と必須の3引数</a><ol><li><a href="#toc2" tabindex="0">まずは1本書いてみる（社員番号から氏名を引く）</a></li><li><a href="#toc3" tabindex="0">6つの引数と、最初に覚えるべき3つ</a></li><li><a href="#toc4" tabindex="0">見つからないときの表示を決める（第4引数）</a></li></ol></li><li><a href="#toc5" tabindex="0">自分のシートで書く：範囲の指定はここでつまずく</a><ol><li><a href="#toc6" tabindex="0">同じシートのマスタを参照する</a></li><li><a href="#toc7" tabindex="0">別シートのマスタを参照する（シート名!範囲の書き方）</a></li><li><a href="#toc8" tabindex="0">シート名にスペースや記号が入っているとき</a></li><li><a href="#toc9" tabindex="0">別ブックのマスタを参照するときの注意</a></li><li><a href="#toc10" tabindex="0">テーブル（構造化参照）で書くと行が増えても直さなくていい</a></li><li><a href="#toc11" tabindex="0">A:A の全列参照をやめたほうがいい理由</a></li></ol></li><li><a href="#toc12" tabindex="0">エラーは出ないのに結果が変：症状別の切り分け早見表</a><ol><li><a href="#toc13" tabindex="0">【早見表】症状 → 起きていること → 30秒でできる確認 → 対処</a></li><li><a href="#toc14" tabindex="0">症状1：空欄のはずなのに0が返る</a></li><li><a href="#toc15" tabindex="0">症状1の対処3手と副作用の比較表</a></li><li><a href="#toc16" tabindex="0">症状2：日付を引いたら5桁の数字になった</a></li><li><a href="#toc17" tabindex="0">症状3：更新したのに古い行の値が返ってくる</a></li><li><a href="#toc18" tabindex="0">症状4：数字に見えるのに一致しない</a></li><li><a href="#toc19" tabindex="0">症状5：1件しか返らない／2件目以降が出てこない</a></li><li><a href="#toc20" tabindex="0">症状6：数式をコピーすると結果がずれる</a></li></ol></li><li><a href="#toc21" tabindex="0">エラーが表示されるときの対処（#N/A・#VALUE!・#SPILL!・#REF!）</a><ol><li><a href="#toc22" tabindex="0">#N/A：見つからない（第4引数で表示を制御する）</a></li><li><a href="#toc23" tabindex="0">#VALUE!：検索範囲と戻り範囲のサイズが合っていない</a></li><li><a href="#toc24" tabindex="0">#SPILL!：結果を書き出す先が空いていない</a></li><li><a href="#toc25" tabindex="0">#REF!：参照していた行・列が消えた</a></li><li><a href="#toc26" tabindex="0">#NAME? が出た場合</a></li></ol></li><li><a href="#toc27" tabindex="0">XLOOKUPだから書ける使い方6パターン</a><ol><li><a href="#toc28" tabindex="0">1. 左側の列を引く（VLOOKUPでは書けなかった形）</a></li><li><a href="#toc29" tabindex="0">2. 1本の数式で複数列をまとめて取り出す</a></li><li><a href="#toc30" tabindex="0">3. 重複がある表から一番下（最新）の行を取り出す</a></li><li><a href="#toc31" tabindex="0">4. 「以上・以下」で近い値を探す（一致モード -1 / 1）</a></li><li><a href="#toc32" tabindex="0">5. ワイルドカードで部分一致検索する（一致モード 2）</a></li><li><a href="#toc33" tabindex="0">6. 2つの条件を組み合わせて検索する</a></li></ol></li><li><a href="#toc34" tabindex="0">VLOOKUPからの書き換え早見表（4パターン）</a><ol><li><a href="#toc35" tabindex="0">パターン1：単純な置き換え</a></li><li><a href="#toc36" tabindex="0">パターン2：左方向の検索に置き換える</a></li><li><a href="#toc37" tabindex="0">パターン3：IFERROR で包んでいた式を第4引数に統合する</a></li><li><a href="#toc38" tabindex="0">パターン4：複数列を1本の数式にまとめる</a></li></ol></li><li><a href="#toc39" tabindex="0">よくある質問（FAQ）</a><ol><li><a href="#toc40" tabindex="0">XLOOKUPは古いExcelで開くとどうなりますか？</a></li><li><a href="#toc41" tabindex="0">VLOOKUPは全部XLOOKUPに書き換えるべきですか？</a></li><li><a href="#toc42" tabindex="0">XLOOKUPとINDEX+MATCHはどちらが速いですか？</a></li><li><a href="#toc43" tabindex="0">Googleスプレッドシートでも同じように使えますか？</a></li><li><a href="#toc44" tabindex="0">0の代わりに空欄にすると、後で合計できなくなりませんか？</a></li></ol></li><li><a href="#toc45" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ExcelのXLOOKUP関数とは？基本の書き方と必須の3引数</span></h2>



<p class="wp-block-paragraph">XLOOKUPは「エックスルックアップ」と読みます。やっていることはVLOOKUPと同じで、「この値を探して、対応するデータを持ってきて」と指示を出す関数。</p>



<p class="wp-block-paragraph">名前の由来もシンプルです。VLOOKUPの「V」はVertical（縦）、HLOOKUPの「H」はHorizontal（横）の頭文字。XLOOKUPは縦の表でも横の表でも使えるため、方向を示す文字が付いていません。</p>



<p class="wp-block-paragraph">大きく違うのは、<strong>列番号を数えなくていい</strong>ことです。「A列で探して、B列を返す」とそのまま書けます。</p>



<h3 class="wp-block-heading"><span id="toc2">まずは1本書いてみる（社員番号から氏名を引く）</span></h3>



<p class="wp-block-paragraph">この記事では、次の社員マスタを共通のサンプルとして使います。1行目が見出しで、データは2行目から6行目に入っている想定です。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A列（社員番号）</th><th>B列（氏名）</th><th>C列（部署）</th><th>D列（内線）</th><th>E列（入社日）</th></tr></thead><tbody><tr><td>2行目</td><td>E001</td><td>田中 実</td><td>営業部</td><td>1201</td><td>2019/4/1</td></tr><tr><td>3行目</td><td>E002</td><td>鈴木 花子</td><td>総務部</td><td>1305</td><td>2020/10/1</td></tr><tr><td>4行目</td><td>E003</td><td>佐藤 健</td><td>経理部</td><td>（空欄）</td><td>2021/4/1</td></tr><tr><td>5行目</td><td>E004</td><td>高橋 圭</td><td>営業部</td><td>1210</td><td>2023/4/1</td></tr><tr><td>6行目</td><td>E005</td><td>伊藤 彩</td><td>情報システム部</td><td>1420</td><td>2024/9/1</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">社員番号「E002」から氏名を取り出す数式がこちら。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E002&quot;, A2:A6, B2:B6)</code></pre>



<p class="wp-block-paragraph">結果は「鈴木 花子」になります。数式の意味はシンプルで、A2:A6 の中から &#8220;E002&#8221; を探すだけ。見つかった位置と同じ場所にある B2:B6 の値が返ってきます。</p>



<p class="wp-block-paragraph">実際に打つときの流れも見ておきましょう。</p>



<ol class="wp-block-list"><li>結果を出したいセルに <code>=XLOOKUP(</code> と入力する</li><li>探したい値が入ったセルをクリックし、カンマを打つ</li><li>検索範囲をドラッグして選び、カンマを打つ</li><li>戻り範囲をドラッグして選び、<code>)</code> で閉じてEnter</li></ol>



<p class="wp-block-paragraph">マウスで範囲を選べば、書式はExcelが自動で入れてくれます。手打ちで覚える必要はありませんよ。</p>



<h3 class="wp-block-heading"><span id="toc3">6つの引数と、最初に覚えるべき3つ</span></h3>



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



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



<p class="wp-block-paragraph">引数は全部で6つ。ただし必須は最初の3つだけで、残りは省略できます。</p>



<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><code>F2</code></td></tr><tr><td>検索範囲</td><td>必須</td><td>検索値を探す範囲（1行または1列）</td><td><code>A2:A200</code></td></tr><tr><td>戻り範囲</td><td>必須</td><td>結果として返したい範囲</td><td><code>B2:B200</code></td></tr><tr><td>見つからない場合</td><td>省略可</td><td>該当なしのときに表示する値</td><td><code>"該当なし"</code></td></tr><tr><td>一致モード</td><td>省略可</td><td>一致のさせ方（0／-1／1／2）</td><td><code>0</code></td></tr><tr><td>検索モード</td><td>省略可</td><td>検索する方向（1／-1／2／-2）</td><td><code>1</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">一致モードの既定値は <code>0</code>、つまり完全一致です。ここはVLOOKUPと正反対なので覚えておきましょう。</p>



<p class="wp-block-paragraph">VLOOKUPは第4引数を省略すると近似一致になります。近似一致とは「だいたい近い値を拾う」動作のこと。指定を忘れて意図しない値が返る、というトラブルの定番でした。</p>



<p class="wp-block-paragraph">XLOOKUPは何も指定しなければ完全一致。省略ミスによる事故が起きにくい設計です。</p>



<h3 class="wp-block-heading"><span id="toc4">見つからないときの表示を決める（第4引数）</span></h3>



<p class="wp-block-paragraph">存在しない社員番号を検索してみます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E999&quot;, A2:A6, B2:B6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">「E999」はマスタにないため、結果は「該当なし」。第4引数を省略した場合は <code>#N/A</code> が返ります。</p>



<p class="wp-block-paragraph">VLOOKUPでは、この処理を<a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数</a>で丸ごと包む必要がありました。XLOOKUPなら引数ひとつで済むので、数式がぐっと短くなります。</p>



<p class="wp-block-paragraph">「そもそもXLOOKUPに乗り換えるべきか」で迷っている段階かもしれません。その場合は先に<a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX MATCH使い分け完全ガイド</a>を読むほうが早道です。この記事は「使うと決めた人が、動く数式を書き上げる」ための解説になります。</p>



<h2 class="wp-block-heading"><span id="toc5">自分のシートで書く：範囲の指定はここでつまずく</span></h2>



<p class="wp-block-paragraph">構文を覚えても、自分のシートに当てはめた瞬間に手が止まる。その原因はほぼ<strong>範囲の指定</strong>にあります。</p>



<p class="wp-block-paragraph">実務のマスタは、同じシートに置いてあるとは限りません。別シート、別ブック、テーブル。パターンごとに書き方を押さえておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">同じシートのマスタを参照する</span></h3>



<p class="wp-block-paragraph">同じシート内なら、範囲をそのまま指定するだけです。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$200, $B$2:$B$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph"><code>$</code> を付けているのは、数式を下方向にコピーしても範囲がずれないようにするため。範囲を選んでから <strong>F4キー</strong> を押すと、<code>$</code> が一括で付きます。</p>



<p class="wp-block-paragraph">検索値の <code>F2</code> には <code>$</code> を付けません。行ごとに違う値を探したいので、ここは相対参照のままにしておきます。</p>



<h3 class="wp-block-heading"><span id="toc7">別シートのマスタを参照する（シート名!範囲の書き方）</span></h3>



<p class="wp-block-paragraph">別シートを参照するときは、範囲の前に <code>シート名!</code> を付けます。シート名が「社員マスタ」なら次のとおり。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, 社員マスタ!$A$2:$A$200, 社員マスタ!$B$2:$B$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">検索範囲と戻り範囲の両方に、シート名が必要です。片方だけに付けると、もう片方は数式を書いているシートを見にいってしまいます。ここは見落としやすいので気をつけてください。</p>



<p class="wp-block-paragraph">入力のコツはひとつだけ。数式を書いている途中で<strong>シート見出しをクリックし、そのまま範囲をドラッグする</strong>と、シート名込みで自動入力されます。手打ちより確実ですよ。</p>



<h3 class="wp-block-heading"><span id="toc8">シート名にスペースや記号が入っているとき</span></h3>



<p class="wp-block-paragraph">シート名に半角スペースや記号が含まれる場合、シート名をシングルクォート <code>'</code> で囲む必要があります。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, '社員 マスタ'!$A$2:$A$200, '社員 マスタ'!$B$2:$B$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">囲みが必要になるのは、たとえば次のようなシート名。</p>



<ul class="wp-block-list"><li>半角スペースを含む（<code>社員 マスタ</code>）</li><li>ハイフンやカッコを含む（<code>社員-マスタ</code>、<code>マスタ(2026)</code>）</li><li>数字から始まる（<code>2026年度マスタ</code>）</li></ul>



<p class="wp-block-paragraph">これもマウスで範囲選択すれば、Excelが自動でクォートを付けてくれます。手打ちしてエラーを出すくらいなら、クリックで入れるほうが安全でしょう。</p>



<h3 class="wp-block-heading"><span id="toc9">別ブックのマスタを参照するときの注意</span></h3>



<p class="wp-block-paragraph">別のExcelファイルにあるマスタを参照する場合は、ブック名を角カッコで囲みます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, '[社員マスタ.xlsx]名簿'!$A$2:$A$200, '[社員マスタ.xlsx]名簿'!$B$2:$B$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">ここでの鉄則は、<strong>参照先のブックを開いた状態で数式を作る</strong>こと。開いていればマウスで範囲を選べるので、書式を間違えません。</p>



<p class="wp-block-paragraph">参照先を閉じた状態での挙動は、情報源によって説明が分かれています。確実を期すなら、両方のブックを開いた状態で結果を確認しておきましょう。</p>



<p class="wp-block-paragraph">毎回開くのが面倒なら、マスタを同じブックの別シートにコピーしてしまう手もあります。運用としてはそのほうが安定します。</p>



<h3 class="wp-block-heading"><span id="toc10">テーブル（構造化参照）で書くと行が増えても直さなくていい</span></h3>



<p class="wp-block-paragraph">マスタを「テーブル」に変換しておくと、範囲を列名で指定できます。テーブルとは、Excelの「テーブルとして書式設定」で作る表のこと。行の増減に自動で追従してくれます。</p>



<p class="wp-block-paragraph">テーブル名が「社員マスタ」なら、こう書けます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, 社員マスタ[社員番号], 社員マスタ[氏名], &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">この書き方が便利なのは、マスタに行を追加したときです。<code>$A$2:$A$200</code> のような固定範囲だと、201行目を追加した瞬間に検索対象から漏れます。テーブルなら範囲が自動で広がるため、数式を直す必要がありません。</p>



<p class="wp-block-paragraph">列名で読めるので、他人が見ても意味が分かる。この読みやすさも見逃せないメリットですね。</p>



<h3 class="wp-block-heading"><span id="toc11">A:A の全列参照をやめたほうがいい理由</span></h3>



<p class="wp-block-paragraph"><code>A:A</code> のような全列参照は、書くのがラクなので使われがちです。ただし実務のシートでは避けたほうが無難。</p>



<p class="wp-block-paragraph">理由は主に2つあります。</p>



<ul class="wp-block-list"><li><strong>重くなる</strong>: Excelの1列は1,048,576行。<code>A:A&","&C:C</code> のような配列演算と組み合わせると、100万行超の配列を毎回作ることになります</li><li><strong>余計な行を巻き込む</strong>: 表の下に「合計」行や集計メモがあると、それも検索対象に入ってしまいます</li></ul>



<p class="wp-block-paragraph">行数を区切った範囲か、テーブル参照。このどちらかにしておけば、ファイルが重くなる原因をひとつ減らせます。</p>



<h2 class="wp-block-heading"><span id="toc12">エラーは出ないのに結果が変：症状別の切り分け早見表</span></h2>



<p class="wp-block-paragraph">ここからが本題です。XLOOKUPで本当に困るのは、<code>#N/A</code> のようなエラーではありません。<strong>エラーが出ないまま、値だけが間違っている</strong>状態です。</p>



<p class="wp-block-paragraph">まずは早見表で、自分の症状を探してみてください。</p>



<h3 class="wp-block-heading"><span id="toc13">【早見表】症状 → 起きていること → 30秒でできる確認 → 対処</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>症状</th><th>起きていること</th><th>30秒でできる確認</th><th>対処</th></tr></thead><tbody><tr><td>空欄のはずが <code>0</code> になる</td><td>戻り範囲の空セルを参照している</td><td>参照先のセルをクリックして中身を見る</td><td>戻り範囲を <code>IF(範囲="","",範囲)</code> で包む</td></tr><tr><td>日付が5桁の数字になる</td><td>結果セルの表示形式が「標準」のまま</td><td>結果セルの表示形式を確認する</td><td>表示形式を「短い日付形式」に変える</td></tr><tr><td>更新したのに古い値が返る</td><td>同じキーが複数行あり、先頭の1件を返している</td><td><code>=COUNTIF(検索範囲, 検索値)</code> で件数を数える</td><td>第6引数に <code>-1</code> を指定する</td></tr><tr><td>数字なのに一致しない</td><td>文字列と数値・余分なスペース・全角半角の違い</td><td><code>=検索値セル=マスタ側セル</code> が <code>TRUE</code> か見る</td><td>TRIM／VALUE／ASC で揃える</td></tr><tr><td>1件しか返らない</td><td>XLOOKUPは該当1件だけを返す関数</td><td>上と同じ COUNTIF で2件以上あるか見る</td><td>FILTER関数に置き換える</td></tr><tr><td>コピーすると結果がずれる</td><td>範囲が相対参照のまま</td><td>ずれたセルの数式で範囲の行番号を見る</td><td>F4で <code>$</code> を付ける／テーブル参照にする</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この6つで、実務で出会う「変な結果」のかなりの部分をカバーできます。ここからは1つずつ詳しく見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc14">症状1：空欄のはずなのに0が返る</span></h3>



<p class="wp-block-paragraph">サンプルの社員マスタで、佐藤 健さん（E003）の内線は空欄でした。ここを引いてみます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E003&quot;, $A$2:$A$6, $D$2:$D$6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">期待するのは空欄。ところが結果は <strong><code>0</code></strong> になります。</p>



<p class="wp-block-paragraph">原因は「検索に失敗したから」ではありません。検索自体は成功していて、空のセルを参照した結果が <code>0</code> として返っているだけ。Excelの数式で空セルを参照したときに、よく知られた挙動です。</p>



<p class="wp-block-paragraph">つまり第4引数に <code>"該当なし"</code> をいくら指定しても、この <code>0</code> は消えません。ここが多くの人のハマりどころですね。</p>



<h3 class="wp-block-heading"><span id="toc15">症状1の対処3手と副作用の比較表</span></h3>



<p class="wp-block-paragraph">対処法は主に3つあります。どれも「0を消す」点では同じですが、<strong>残る副作用がまったく違います</strong>。</p>



<p class="wp-block-paragraph"><strong>手1：戻り範囲を IF で包む</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E003&quot;, $A$2:$A$6, IF($D$2:$D$6=&quot;&quot;, &quot;&quot;, $D$2:$D$6), &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">戻り範囲の中身を先に判定し、空なら空文字列 <code>""</code> に置き換えてから返す形です。</p>



<p class="wp-block-paragraph"><strong>手2：数式の末尾に &#038;&#8221;&#8221; を付ける</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E003&quot;, $A$2:$A$6, $D$2:$D$6, &quot;該当なし&quot;)&amp;&quot;&quot;</code></pre>



<p class="wp-block-paragraph">いちばん短くて手軽。ただし次の表のとおり、副作用がいちばん大きい方法でもあります。</p>



<p class="wp-block-paragraph"><strong>手3：表示形式のユーザー定義で0を隠す</strong></p>



<p class="wp-block-paragraph">結果セルを選び、セルの書式設定からユーザー定義に <code>0;-0;;@</code> を設定します。<code>;</code> で区切られた4つの区画が、左から「正の数」「負の数」「ゼロ」「文字列」に対応しています。</p>



<p class="wp-block-paragraph">3つ目を空にすると、ゼロだけが画面に出なくなる仕組み。小数を表示したい列なら、<code>0.0;-0.0;;@</code> のように書き換えてください。</p>



<p class="wp-block-paragraph">3手を横並びで比較すると、選ぶ基準がはっきりします。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較軸</th><th>手1：IF で包む</th><th>手2：末尾に <code>&""</code></th><th>手3：表示形式 <code>0;-0;;@</code></th></tr></thead><tbody><tr><td>見た目</td><td>空欄になる</td><td>空欄になる</td><td>空欄に見える</td></tr><tr><td>返り値の型</td><td>空セルは空文字列。値があるセルは元の型のまま</td><td><strong>すべて文字列になる</strong>（数値も <code>"1210"</code> に）</td><td>変わらない（<code>0</code> が残る）</td></tr><tr><td>集計への影響</td><td>SUMは文字列を無視するので合計は正しい</td><td><strong>SUMの対象外になり合計が0になる</strong></td><td>0として集計に含まれ、AVERAGEが下がる</td></tr><tr><td>並べ替えへの影響</td><td>数値のまま並ぶ</td><td>文字列として並ぶため数値順にならない</td><td>数値のまま並ぶ</td></tr><tr><td>COUNTA での扱い</td><td>空文字列も1件と数えられる</td><td>1件と数えられる</td><td>1件と数えられる</td></tr><tr><td>複数列の取得</td><td>複数列の範囲でも同じ形で包める</td><td>同じく書けるが、全列が文字列になる</td><td>数式に手を入れないので影響なし</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">選び方の目安はこうです。</p>



<ul class="wp-block-list"><li>後で<strong>合計や並べ替えをする列</strong> → 手3（表示形式）が安全。値を壊しません</li><li>見た目だけ整えたい<strong>表示専用の列</strong> → 手1。合計も正しく出せます</li><li>手2の <code>&""</code> は、集計に使わない文字列項目に限定して使いましょう</li></ul>



<p class="wp-block-paragraph">ちなみに <code>&""</code> が便利に見えるのは、内線番号のような「数値だが計算しない項目」だから。金額や数量に使うと、後工程で合計が合わなくなります。</p>



<p class="wp-block-paragraph">なお「空白に見えるのに空白扱いされない」問題は、XLOOKUPに限った話ではありません。空白セルの5パターンを診断した<a href="https://mashukabu.com/excel-blank-cell-not-counted/">Excelで空白に見えるのに空白判定されない原因と対処法</a>もあります。あわせて読むと、原因の切り分けが一気にラクになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc16">症状2：日付を引いたら5桁の数字になった</span></h3>



<p class="wp-block-paragraph">鈴木 花子さん（E002）の入社日を引いてみます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;E002&quot;, $A$2:$A$6, $E$2:$E$6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">マスタの表示は「2020/10/1」。ところが結果セルには <strong>44105</strong> と出ます。</p>



<p class="wp-block-paragraph">これは壊れているわけではありません。Excelは日付を「シリアル値」という連番で管理しています。</p>



<p class="wp-block-paragraph">2020年10月1日を数値に直すと 44105。中身は正しく、<strong>表示形式だけが「標準」のまま</strong>という状態です。</p>



<p class="wp-block-paragraph"><strong>方法1：結果セルの表示形式を変える</strong></p>



<p class="wp-block-paragraph">ホームタブの数値グループで、表示形式を「短い日付形式」に変更します。これがいちばん素直な直し方。値も日付のまま保たれます。</p>



<p class="wp-block-paragraph"><strong>方法2：TEXT関数で書式を固定する</strong></p>



<pre class="wp-block-code"><code>=TEXT(XLOOKUP(&quot;E002&quot;, $A$2:$A$6, $E$2:$E$6), &quot;yyyy/m/d&quot;)</code></pre>



<p class="wp-block-paragraph">結果は「2020/10/1」になります。ただしTEXT関数の戻り値は文字列です。</p>



<p class="wp-block-paragraph">そのセルを使って日数計算をするとうまくいきません。日付として使い続けるなら、方法1を選んでください。</p>



<h3 class="wp-block-heading"><span id="toc17">症状3：更新したのに古い行の値が返ってくる</span></h3>



<p class="wp-block-paragraph">受注履歴や更新ログのように、<strong>同じキーが何度も登場する表</strong>で起きる症状です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$200, $C$2:$C$200, &quot;履歴なし&quot;)</code></pre>



<p class="wp-block-paragraph">新しい行を追記したのに、返ってくるのは古い値のまま。原因は検索モード（第6引数）の既定値にあります。</p>



<p class="wp-block-paragraph">既定は <code>1</code>、つまり先頭から末尾に向かって探す動作。最初に見つかった1件を返すため、下に追記していく表ではいちばん上の古い行が拾われてしまいます。</p>



<p class="wp-block-paragraph">対処はかんたんで、第6引数に <code>-1</code> を指定するだけ。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$200, $C$2:$C$200, &quot;履歴なし&quot;, 0, -1)</code></pre>



<p class="wp-block-paragraph"><code>-1</code> は末尾から先頭に向かって検索する指定です。第6引数を使うときは、手前の第5引数の位置を飛ばせません。<code>0</code>（完全一致）も一緒に書いておきましょう。</p>



<p class="wp-block-paragraph">値ではなく「何行目にあるか」を取りたい場面もありますよね。その場合は<a href="https://mashukabu.com/excel-function-howto-use-xmatch/">ExcelのXMATCH関数の使い方</a>が使えます。XMATCHにも同じ検索モードがあるため、考え方はそのまま応用できますよ。</p>



<h3 class="wp-block-heading"><span id="toc18">症状4：数字に見えるのに一致しない</span></h3>



<p class="wp-block-paragraph">見た目はどう見ても同じ「1001」。なのに <code>#N/A</code> が返る、あるいは想定と違う行が返る。この症状の正体は、ほぼ<strong>型かスペース</strong>です。</p>



<p class="wp-block-paragraph">30秒でできる確認から始めましょう。空いたセルに次の式を入れます。</p>



<pre class="wp-block-code"><code>=F2=$A$2</code></pre>



<p class="wp-block-paragraph"><code>FALSE</code> なら、見た目が同じでも中身は別物という証拠。さらに <code>=LEN(F2)</code> と <code>=LEN(A2)</code> の文字数を比べると、余分なスペースの有無まで分かります。</p>



<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>VALUE関数で数値に統一する</td></tr><tr><td>前後に半角スペース</td><td>LEN関数の文字数がマスタ側と違う</td><td>TRIM関数で除去する</td></tr><tr><td>全角スペースが混入</td><td>TRIMをかけても文字数が減らない</td><td>SUBSTITUTE関数で全角スペースを削除する</td></tr><tr><td>全角と半角の混在</td><td>「１００１」と「1001」が並んでいる</td><td>ASC関数で半角に統一する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ここで見落としやすいのが3行目。<strong>TRIM関数が消せるのは半角スペースだけ</strong>で、全角スペースはそのまま残ります。TRIMをかけたのに直らないときは、全角スペースを疑ってください。</p>



<p class="wp-block-paragraph">各関数の詳しい使い方は、<a href="https://mashukabu.com/excel-function-howto-use-trim/">ExcelのTRIM関数の使い方</a>と<a href="https://mashukabu.com/excel-function-howto-use-value/">VALUE関数の使い方</a>で確認できます。マスタ側を一括でクリーニングしてから検索する。これがいちばん後腐れのない直し方です。</p>



<h3 class="wp-block-heading"><span id="toc19">症状5：1件しか返らない／2件目以降が出てこない</span></h3>



<p class="wp-block-paragraph">「営業部の人を全員出したい」。この用途でXLOOKUPを使うと、必ず1件しか返りません。</p>



<p class="wp-block-paragraph">これはバグでも設定ミスでもなく、仕様です。XLOOKUPは条件に合う<strong>1件を特定して返す関数</strong>。該当が10件あっても、返すのは1件だけ。</p>



<p class="wp-block-paragraph">複数件を並べたいなら、そもそも使う関数が違います。</p>



<pre class="wp-block-code"><code>=FILTER($B$2:$B$200, $C$2:$C$200=&quot;営業部&quot;, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">FILTER関数なら、条件に合う行をすべて縦に並べて返してくれます。詳しい書き方は<a href="https://mashukabu.com/excel-function-howto-use-filter/">FILTER関数の使い方</a>にまとめました。</p>



<p class="wp-block-paragraph">「1件でいいが、最新の1件がほしい」なら症状3の <code>-1</code>。「全部ほしい」ならFILTER。この使い分けを覚えておくと迷いません。</p>



<h3 class="wp-block-heading"><span id="toc20">症状6：数式をコピーすると結果がずれる</span></h3>



<p class="wp-block-paragraph">1行目のセルは正しいのに、下にコピーすると結果がおかしくなる。犯人は<strong>相対参照</strong>です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, A2:A6, B2:B6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">この式を1行下にコピーすると、範囲まで一緒に動いて <code>A3:A7</code> と <code>B3:B7</code> に変わります。検索対象が1行ずつ削られていくため、下の行ほど <code>#N/A</code> や違う値が増えていくわけです。</p>



<p class="wp-block-paragraph">確認は10秒で終わります。おかしくなったセルをダブルクリックし、範囲の行番号が動いていないか見るだけ。</p>



<p class="wp-block-paragraph">対処は2択です。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$6, $B$2:$B$6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">ひとつは、範囲を選んで <strong>F4キー</strong> を押し、<code>$</code> で固定する方法。もうひとつは、先に紹介したテーブル参照に切り替える方法です。テーブル参照なら <code>$</code> を付ける必要すらありません。</p>



<h2 class="wp-block-heading"><span id="toc21">エラーが表示されるときの対処（#N/A・#VALUE!・#SPILL!・#REF!）</span></h2>



<p class="wp-block-paragraph">ここまでは「エラーが出ない」症状でした。ここからは、はっきりエラーが表示されるケースを片付けていきます。</p>



<h3 class="wp-block-heading"><span id="toc22">#N/A：見つからない（第4引数で表示を制御する）</span></h3>



<p class="wp-block-paragraph"><code>#N/A</code> は「検索値が見つからなかった」という意味のエラーです。まずは第4引数で、表示そのものを制御しましょう。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$200, $B$2:$B$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">ただし表示を変えるのと、原因をつぶすのは別の話。本当に存在しないのか、それとも症状4の型・スペース問題なのか。ここは切り分けておく必要があります。</p>



<p class="wp-block-paragraph">検索値が空欄のときにも <code>#N/A</code> は出ます。入力前の行まで「該当なし」で埋まるのが気になるなら、<code>""</code> を指定して空欄に見せる手もありますよ。</p>



<h3 class="wp-block-heading"><span id="toc23">#VALUE!：検索範囲と戻り範囲のサイズが合っていない</span></h3>



<p class="wp-block-paragraph">検索範囲と戻り範囲の行数がそろっていないと <code>#VALUE!</code> になります。</p>



<pre class="wp-block-code"><code>=XLOOKUP(A2, B2:B100, C2:C50)</code></pre>



<p class="wp-block-paragraph">検索範囲 <code>B2:B100</code> は99行、戻り範囲 <code>C2:C50</code> は49行。行数が違うため、どの行を返せばいいのか決まりません。両方の開始行と終了行をそろえれば解消します。</p>



<p class="wp-block-paragraph">マウスでドラッグして範囲を選び直すのが確実。手打ちで行番号を直すと、また別のずれを生みがちですから。</p>



<h3 class="wp-block-heading"><span id="toc24">#SPILL!：結果を書き出す先が空いていない</span></h3>



<p class="wp-block-paragraph">戻り範囲に複数列を指定すると、結果は隣のセルへ自動的にあふれ出ます。これがスピル（1つの数式の結果が複数のセルに展開される動き）です。</p>



<p class="wp-block-paragraph">そのあふれ先にすでにデータが入っていると <code>#SPILL!</code> になります。対処は、展開先のセルを空けるだけ。</p>



<p class="wp-block-paragraph">もうひとつ、テーブルの中に置いた数式もつまずきます。Excelはテーブル内でのスピルをサポートしていないため、複数列を返す数式はテーブルの外のセルに置くのが原則。</p>



<p class="wp-block-paragraph">テーブル内で <code>#SPILL!</code> が出たら、まず同じ数式をテーブルの外へ移して確かめてみてください。</p>



<h3 class="wp-block-heading"><span id="toc25">#REF!：参照していた行・列が消えた</span></h3>



<p class="wp-block-paragraph"><code>#REF!</code> は参照先が失われたときのエラーです。マスタの列を削除した、シートごと消した。こうした操作が引き金になります。</p>



<p class="wp-block-paragraph">XLOOKUPは列番号を使わないため、VLOOKUPより参照崩れには強い設計。それでも参照先そのものが消えれば、当然エラーになります。</p>



<p class="wp-block-paragraph">直前の操作を元に戻すのが最短ルート。原因の切り分け方は<a href="https://mashukabu.com/excel-reference-formula-errors/">Excel参照エラーの直し方</a>にまとめてあります。</p>



<h3 class="wp-block-heading"><span id="toc26">#NAME? が出た場合</span></h3>



<p class="wp-block-paragraph"><code>#NAME?</code> はXLOOKUPに対応していないバージョンで開いたときに出ます。数式の書き方ではなく、環境の問題。</p>



<p class="wp-block-paragraph">原因と対処の詳細は<a href="https://mashukabu.com/excel-xlookup-filter-name-error-version/">ExcelのXLOOKUP・FILTERが使えない・#NAME?の原因と対処</a>にまとめているので、そちらをご覧ください。</p>



<p class="wp-block-paragraph">ここまでで扱っていないエラー値に出会ったら、<a href="https://mashukabu.com/excel-error-value-list/">Excelエラー値12種類の原因と対処法一覧</a>から探すのが早道です。</p>



<h2 class="wp-block-heading"><span id="toc27">XLOOKUPだから書ける使い方6パターン</span></h2>



<p class="wp-block-paragraph">基本とトラブル対処を押さえたら、次は「VLOOKUPでは書けなかった形」に進みましょう。ここがXLOOKUPを使う本当のメリットです。</p>



<h3 class="wp-block-heading"><span id="toc28">1. 左側の列を引く（VLOOKUPでは書けなかった形）</span></h3>



<p class="wp-block-paragraph">氏名から社員番号を引く、つまり右の列で探して左の列を返すパターン。VLOOKUP単体では不可能でした。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $B$2:$B$6, $A$2:$A$6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">検索範囲と戻り範囲を入れ替えるだけ。左でも右でも書き方は変わりません。マスタの列順を気にしなくてよくなるのは、地味ですが効きます。</p>



<h3 class="wp-block-heading"><span id="toc29">2. 1本の数式で複数列をまとめて取り出す</span></h3>



<p class="wp-block-paragraph">氏名・部署・内線を横並びで取り出したいケースです。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$6, $B$2:$D$6, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">F2に「E004」が入っていれば、「高橋 圭」「営業部」「1210」の3つが横3セルに展開されます。VLOOKUPなら列番号を変えた数式を3本並べる必要がありました。</p>



<p class="wp-block-paragraph">展開先のセルは空けておきましょう。埋まっていると <code>#SPILL!</code> になります。</p>



<h3 class="wp-block-heading"><span id="toc30">3. 重複がある表から一番下（最新）の行を取り出す</span></h3>



<p class="wp-block-paragraph">症状3で扱った検索モード <code>-1</code> は、応用としても使えます。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2, $A$2:$A$200, $C$2:$C$200, &quot;履歴なし&quot;, 0, -1)</code></pre>



<p class="wp-block-paragraph">追記型の履歴シートから最新の1件を拾う、定番の書き方。並べ替えも補助列も不要です。</p>



<h3 class="wp-block-heading"><span id="toc31">4. 「以上・以下」で近い値を探す（一致モード -1 / 1）</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></tr></thead><tbody><tr><td>2行目</td><td>0</td><td>800</td></tr><tr><td>3行目</td><td>3000</td><td>500</td></tr><tr><td>4行目</td><td>5000</td><td>0</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">購入金額4,200円の送料を求めてみましょう。</p>



<pre class="wp-block-code"><code>=XLOOKUP(4200, $A$2:$A$4, $B$2:$B$4, &quot;&quot;, -1)</code></pre>



<p class="wp-block-paragraph">4200に完全一致する行はありません。一致モード <code>-1</code> は「なければ次に小さい項目」を拾います。そのため3000の行がヒットし、結果は <strong>500</strong> になります。</p>



<p class="wp-block-paragraph">逆に <code>1</code> を指定すると「次に大きい項目」を探します。しきい値表は下限値の昇順に並べて作っておくと、結果の確認がラクですよ。</p>



<p class="wp-block-paragraph">なお、検索モード（第6引数）の <code>2</code> / <code>-2</code> は別物です。こちらは並べ替え済みのデータが前提。</p>



<p class="wp-block-paragraph">公式にも「並べ替えられていない場合、無効な結果になる」と明記されています。ソートに自信がなければ、既定の <code>1</code> のままにしておきましょう。</p>



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



<p class="wp-block-paragraph">「東京を含む住所」のような部分一致には、一致モード <code>2</code> を使います。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;*東京*&quot;, $A$2:$A$100, $B$2:$B$100, &quot;該当なし&quot;, 2)</code></pre>



<p class="wp-block-paragraph">検索キーワードをセルから受け取る形にすると、実務で使いやすくなります。</p>



<pre class="wp-block-code"><code>=XLOOKUP(&quot;*&quot;&amp;F2&amp;&quot;*&quot;, $A$2:$A$100, $B$2:$B$100, &quot;該当なし&quot;, 2)</code></pre>



<p class="wp-block-paragraph">使える記号は3つ。</p>



<ul class="wp-block-list"><li><code>*</code>：任意の文字列（0文字以上）</li><li><code>?</code>：任意の1文字</li><li><code>~</code>：直後の <code>*</code> や <code>?</code> を、記号そのものとして扱う</li></ul>



<h3 class="wp-block-heading"><span id="toc33">6. 2つの条件を組み合わせて検索する</span></h3>



<p class="wp-block-paragraph">同姓同名が別々の部署にいる。そんなときに「部署と氏名の両方が一致する行」を探すパターンです。VLOOKUPでは補助列を作るしかありませんでした。</p>



<pre class="wp-block-code"><code>=XLOOKUP(F2&amp;&quot;／&quot;&amp;G2, $C$2:$C$200&amp;&quot;／&quot;&amp;$B$2:$B$200, $A$2:$A$200, &quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph">F2に部署、G2に氏名を入れる想定。検索値と検索範囲を、それぞれ同じ順番・同じ区切り文字で連結するのがコツです。</p>



<p class="wp-block-paragraph">区切り文字を挟むのには理由があります。区切りなしで連結すると、「AA」+「B」と「A」+「AB」がどちらも「AAB」になってしまう。別の行を誤ってヒットさせないための保険というわけです。</p>



<p class="wp-block-paragraph">この書き方は全列参照との相性が最悪です。<code>C:C&"／"&B:B</code> と書くと、100万行超の配列を毎回作ることになります。</p>



<p class="wp-block-paragraph">必ず行数を区切った範囲を指定してください。うまく結果が出ないときは、まず範囲を数百行まで絞って試すのが近道でしょう。</p>



<h2 class="wp-block-heading"><span id="toc34">VLOOKUPからの書き換え早見表（4パターン）</span></h2>



<p class="wp-block-paragraph">手元のVLOOKUP数式を書き換えるときの対応表です。VLOOKUP側の引数をもう一度確認したい方へ。先に<a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方</a>を開いておくと読みやすくなります。</p>



<p class="wp-block-paragraph">前提のデータはこれまでと同じ。A列＝社員番号、B列＝氏名、C列＝部署、D列＝内線です。検索値はF2セルに入れる想定で読み進めてください。</p>



<h3 class="wp-block-heading"><span id="toc35">パターン1：単純な置き換え</span></h3>



<p class="wp-block-paragraph">社員番号から氏名を引く、最も多い形。</p>



<p class="wp-block-paragraph"><strong>Before（VLOOKUP）</strong></p>



<pre class="wp-block-code"><code>=VLOOKUP($F2, $A$2:$C$200, 2, FALSE)</code></pre>



<p class="wp-block-paragraph"><strong>After（XLOOKUP）</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$B$200)</code></pre>



<p class="wp-block-paragraph">列番号の <code>2</code>（A列から数えて2列目＝B列）が、戻り範囲 <code>$B$2:$B$200</code> に置き換わります。完全一致を指定する <code>FALSE</code> も不要。XLOOKUPは既定が完全一致だからです。</p>



<h3 class="wp-block-heading"><span id="toc36">パターン2：左方向の検索に置き換える</span></h3>



<p class="wp-block-paragraph">氏名から社員番号を引く形。VLOOKUP単体では書けず、INDEX+MATCHを使っていた部分です。</p>



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



<pre class="wp-block-code"><code>=INDEX($A$2:$A$200, MATCH($F2, $B$2:$B$200, 0))</code></pre>



<p class="wp-block-paragraph"><strong>After（XLOOKUP）</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP($F2, $B$2:$B$200, $A$2:$A$200)</code></pre>



<p class="wp-block-paragraph">関数が2つから1つに減り、読む順番も自然になりました。</p>



<h3 class="wp-block-heading"><span id="toc37">パターン3：IFERROR で包んでいた式を第4引数に統合する</span></h3>



<p class="wp-block-paragraph">見つからないときに空欄を返す処理です。</p>



<p class="wp-block-paragraph"><strong>Before（VLOOKUP＋IFERROR）</strong></p>



<pre class="wp-block-code"><code>=IFERROR(VLOOKUP($F2, $A$2:$C$200, 2, FALSE), &quot;&quot;)</code></pre>



<p class="wp-block-paragraph"><strong>After（XLOOKUP）</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$B$200, &quot;&quot;)</code></pre>



<p class="wp-block-paragraph">外側の包みが消えて、第4引数に収まりました。</p>



<p class="wp-block-paragraph">ひとつ違いがあります。IFERRORは<strong>あらゆるエラーを握りつぶす</strong>のに対し、第4引数が受け持つのは「見つからない場合」だけ。範囲サイズの不一致による <code>#VALUE!</code> などは、そのまま表示されます。</p>



<p class="wp-block-paragraph">これはむしろメリットでしょう。本当の設定ミスが隠れずに見つかりますからね。</p>



<h3 class="wp-block-heading"><span id="toc38">パターン4：複数列を1本の数式にまとめる</span></h3>



<p class="wp-block-paragraph">氏名・部署・内線を、それぞれ別の数式で引いていたケースです。</p>



<p class="wp-block-paragraph"><strong>Before（VLOOKUP・3本必要）</strong></p>



<pre class="wp-block-code"><code>=VLOOKUP($F2, $A$2:$D$200, 2, FALSE)
=VLOOKUP($F2, $A$2:$D$200, 3, FALSE)
=VLOOKUP($F2, $A$2:$D$200, 4, FALSE)</code></pre>



<p class="wp-block-paragraph"><strong>After（XLOOKUP・1本）</strong></p>



<pre class="wp-block-code"><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$D$200)</code></pre>



<p class="wp-block-paragraph">列番号2・3・4が、そのまま戻り範囲 <code>$B$2:$D$200</code>（B列・C列・D列）に対応します。数式が1本になるので、修正箇所も1か所で済みます。</p>



<p class="wp-block-paragraph">4パターンをまとめておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>パターン</th><th>Before</th><th>After</th><th>変わるポイント</th></tr></thead><tbody><tr><td>1. 単純置換</td><td><code>=VLOOKUP($F2, $A$2:$C$200, 2, FALSE)</code></td><td><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$B$200)</code></td><td>列番号 → 戻り範囲。<code>FALSE</code> 不要</td></tr><tr><td>2. 左方向</td><td><code>=INDEX($A$2:$A$200, MATCH($F2, $B$2:$B$200, 0))</code></td><td><code>=XLOOKUP($F2, $B$2:$B$200, $A$2:$A$200)</code></td><td>関数2つ → 1つ</td></tr><tr><td>3. IFERROR統合</td><td><code>=IFERROR(VLOOKUP($F2, $A$2:$C$200, 2, FALSE), "")</code></td><td><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$B$200, "")</code></td><td>包み → 第4引数</td></tr><tr><td>4. 複数列</td><td>数式3本（列番号2・3・4）</td><td><code>=XLOOKUP($F2, $A$2:$A$200, $B$2:$D$200)</code></td><td>3本 → 1本にスピル</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">なお、既存のVLOOKUPをどこまで書き換えるかという判断は、この記事では扱っていません。選び方は<a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX MATCH使い分け完全ガイド</a>にフロー形式でまとめています。</p>



<h2 class="wp-block-heading"><span id="toc39">よくある質問（FAQ）</span></h2>



<h3 class="wp-block-heading"><span id="toc40">XLOOKUPは古いExcelで開くとどうなりますか？</span></h3>



<p class="wp-block-paragraph"><code>#NAME?</code> エラーになります。Excel 2016 と Excel 2019 はXLOOKUPに対応していないためです。</p>



<p class="wp-block-paragraph">なお Office 2016 と Office 2019 は、2025年10月14日に延長サポートを終了しました。アプリ自体は動きますが、セキュリティ更新やバグ修正はもう提供されません。原因の詳しい仕組みは、前章の「#NAME? が出た場合」で紹介した記事をご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc41">VLOOKUPは全部XLOOKUPに書き換えるべきですか？</span></h3>



<p class="wp-block-paragraph">困っていないなら、急いで書き換える必要はありません。新しく作る数式からXLOOKUPに切り替えるだけでも十分に効果があります。</p>



<p class="wp-block-paragraph">判断の基準はバージョン・共有相手・用途の3点。<a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX MATCH使い分け完全ガイド</a>で確認してみてください。</p>



<h3 class="wp-block-heading"><span id="toc42">XLOOKUPとINDEX+MATCHはどちらが速いですか？</span></h3>



<p class="wp-block-paragraph">一概には言えません。体感速度は表の大きさや数式の本数、参照範囲の広さで大きく変わります。</p>



<p class="wp-block-paragraph">それよりも効くのが範囲の指定です。<code>A:A</code> の全列参照をやめて必要な行数に絞るほうが、関数を選び直すより効いてきますよ。</p>



<h3 class="wp-block-heading"><span id="toc43">Googleスプレッドシートでも同じように使えますか？</span></h3>



<p class="wp-block-paragraph">スプレッドシートにもXLOOKUP関数があり、引数の構成はExcelとほぼ同じです。ただし細かい挙動や関連関数の対応状況には差があります。</p>



<p class="wp-block-paragraph">Sheets側の書き方は<a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方</a>にまとめてあります。</p>



<h3 class="wp-block-heading"><span id="toc44">0の代わりに空欄にすると、後で合計できなくなりませんか？</span></h3>



<p class="wp-block-paragraph"><code>IF(範囲="","",範囲)</code> 方式なら、SUM関数は文字列を無視するので合計は正しく出ます。ただし COUNTA では1件として数えられる点に注意。</p>



<p class="wp-block-paragraph">集計や並べ替えを重視するなら、値を <code>0</code> のまま残す表示形式方式（<code>0;-0;;@</code>）が安全です。詳しくは症状1の比較表を見返してみてください。</p>



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



<p class="wp-block-paragraph">ExcelのXLOOKUP関数の要点を振り返ります。</p>



<ul class="wp-block-list"><li>基本は <code>=XLOOKUP(検索値, 検索範囲, 戻り範囲)</code> の3引数。列番号を数える必要はない</li><li>別シートは <code>シート名!範囲</code>、シート名に空白や記号があれば <code>'</code> で囲む</li><li><code>A:A</code> の全列参照は重くなるので、行数を区切るかテーブル参照にする</li><li>空欄が <code>0</code> になるのは検索の失敗ではない。対処法は3つあり、副作用が違う</li><li>日付が5桁の数字になるのは表示形式の問題。値は壊れていない</li><li>古い行が返るなら第6引数に <code>-1</code>、複数件ほしいならFILTER関数</li></ul>



<p class="wp-block-paragraph">XLOOKUPでつまずく原因は、関数そのものより<strong>範囲の指定と表示形式</strong>にあることがほとんど。エラーが出ないまま結果が変なときは、この記事の早見表から症状を探してみてください。</p>



<p class="wp-block-paragraph">まずは1本、別シートのマスタを参照する数式を書いてみましょう。そこが動けば、残りは応用でつながっていきますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-xlookup/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
