<?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/%E9%80%A3%E5%8B%95%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Fri, 12 Jun 2026 21:55:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.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>ExcelのINDIRECT関数｜別シート参照・エラー対処・揮発性の重さを解説</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[REFエラー]]></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!エラーの状況別対処フロー・揮発性による重さとINDEX置換パターン・Excel 365でのスピル関数との使い分けまで、実務で迷わない知識をまとめて紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelのINDIRECT関数を使ってみて、壁にぶつかったことはありませんか。「なぜか#REF!エラーが消えない」「ファイルが急に重くなった」という悩みは、よく聞く声です。</p>



<p class="wp-block-paragraph">INDIRECT関数は「文字列をセル参照に変える」便利な関数です。一方で、別シート参照のクォートの書き方や、揮発性（再計算が頻繁に走る性質）の重さを知らないと、思わぬトラブルにつながります。</p>



<p class="wp-block-paragraph">この記事では、INDIRECT関数の基本から別シート参照の正確なルール、#REF!エラーの状況別対処までを解説します。さらに、INDEXへの乗り換え判断もまとめて紹介します。「正しく動かす」と「使うべき場面を見極める」の両方が一度でわかる内容です。</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">INDIRECT関数とは？</a><ol><li><a href="#toc2" tabindex="0">読み方・語源</a></li><li><a href="#toc3" tabindex="0">INDIRECT関数でできること</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">別シート参照の書き方</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">実務で使えるINDIRECT関数の活用パターン</a><ol><li><a href="#toc11" tabindex="0">連動ドロップダウン（名前の定義を使う）</a></li><li><a href="#toc12" tabindex="0">別シートをドロップダウンで動的に切り替える</a></li><li><a href="#toc13" tabindex="0">VLOOKUPの検索範囲をシートごとに切り替える</a></li><li><a href="#toc14" tabindex="0">ADDRESS関数との組み合わせ</a></li></ol></li><li><a href="#toc15" tabindex="0">#REF!エラー状況別フローと対処法</a><ol><li><a href="#toc16" tabindex="0">状況1: シート名にスペースがある（クォート漏れ）</a></li><li><a href="#toc17" tabindex="0">状況2: 参照文字列に余分なスペース（TRIM処理）</a></li><li><a href="#toc18" tabindex="0">状況3: 外部ブックが閉じている（キャッシュ不可の仕様）</a></li><li><a href="#toc19" tabindex="0">状況4: 名前の定義が未登録・スペルミス</a></li></ol></li><li><a href="#toc20" tabindex="0">揮発性の重さとINDEX置換パターン</a><ol><li><a href="#toc21" tabindex="0">揮発性関数とは何か・再計算の仕組み</a></li><li><a href="#toc22" tabindex="0">INDEXに置き換えられるパターン・できないパターン早見表</a></li><li><a href="#toc23" tabindex="0">パフォーマンス改善の判断基準</a></li><li><a href="#toc24" tabindex="0">スピル時代（Excel 365）のINDIRECTの位置づけ</a></li></ol></li><li><a href="#toc25" tabindex="0">まとめ・使い分け早見表</a></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">ExcelのINDIRECT関数は、<strong>文字列をセル参照に変換する</strong>関数です。ふつうの数式では <code>=A1</code> のように参照先を直接書きます。INDIRECT関数を使うと、「A1」という文字列を渡すだけでセルA1の値を取得できます。</p>



<p class="wp-block-paragraph">ポイントは、<strong>参照先を「文字列で」コントロールできる</strong>ことです。セルの値やドロップダウンの選択内容に応じて、参照先をその場で切り替えられます。</p>



<p class="wp-block-paragraph">たとえばセルA1に「B2」という文字が入っているとします。<code>=INDIRECT(A1)</code> と書くと、INDIRECT関数はこの文字を読み取ってセルB2を参照します。A1の中身を「C5」に変えれば、数式はそのままで参照先がC5に切り替わります。</p>



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



<p class="wp-block-paragraph">読み方は「インダイレクト」です。英語の「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>ドロップダウンの選択に連動して、表示内容を変える</li><li><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">VLOOKUP関数</a>の検索範囲を、シートごとに切り替える</li></ul>



<p class="wp-block-paragraph">どれも「参照先を動的に変えたい」場面で役立つ使い方です。順番に見ていきましょう。</p>



<p class="wp-block-paragraph">なお、Googleスプレッドシートにも同じINDIRECT関数があります。構文はExcelとほぼ同じです。Sheetsでの使い方は<a href="https://mashukabu.com/spreadsheet-indirect-function/">スプレッドシートのINDIRECT関数の使い方</a>で解説しています。</p>



<h3 class="wp-block-heading"><span id="toc4">基本構文と引数</span></h3>



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



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



<p class="wp-block-paragraph">第1引数の「参照文字列」だけを指定すれば動きます。第2引数の「参照形式」は省略可能です。それぞれの引数の意味は次の表のとおりです。</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>TRUE（省略時のデフォルト）= A1形式で解釈。FALSE = R1C1形式で解釈</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">第2引数の「参照形式」は、ほとんどの場面でTRUE（A1形式）を使います。R1C1形式を扱うケースはまれです。基本的には省略してかまいません。</p>



<p class="wp-block-paragraph">ここで「参照文字列」とは、「B2」や「Sheet1!A1」のような、セルの場所を表す文字のことです。INDIRECT関数はこの文字を読み取り、本物のセル参照として扱います。</p>



<h3 class="wp-block-heading"><span id="toc5">最小サンプルで動きを確認する</span></h3>



<p class="wp-block-paragraph">一番シンプルな例を見てみましょう。セルA1に「B」という文字を入れておきます。そのうえで次の数式を入力します。</p>



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



<p class="wp-block-paragraph"><code>A1&"2"</code> の部分で「B」と「2」がつながり、「B2」という文字列ができます。INDIRECT関数がこれをセル参照と解釈し、<strong>セルB2の値</strong>を返します。</p>



<p class="wp-block-paragraph">文字列を直接指定することもできます。</p>



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



<p class="wp-block-paragraph">この場合は常にB2を参照します。ただし切り替える必要がないなら、ふつうに <code>=B2</code> と書くほうがシンプルです。INDIRECTの価値は「参照先を変えられること」にあります。</p>



<h2 class="wp-block-heading"><span id="toc6">別シート参照の書き方</span></h2>



<p class="wp-block-paragraph">INDIRECT関数が本領を発揮するのは、<strong>別シートの参照</strong>です。ここはエラーが起きやすいポイントなので、シングルクォートのルールを正確に押さえましょう。</p>



<h3 class="wp-block-heading"><span id="toc7">基本パターン（スペースなしのシート名）</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」という文字列になります。そのまま「1月」シートのB2セルを参照できます。</p>



<p class="wp-block-paragraph">A1の値を「2月」に変えれば、参照先も「2月」シートのB2に切り替わります。月別シートの集計などで重宝するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc8">シート名にスペース・記号がある場合（シングルクォート必須）</span></h3>



<p class="wp-block-paragraph">ここが最大の落とし穴です。シート名に<strong>スペースやハイフン、記号が含まれる</strong>場合、シングルクォーテーション（<code>'</code>）で囲まないと#REF!エラーになります。</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">少し複雑に見えるので、分解して確認しましょう。</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の正式なシート参照の形と一致するため、正しく参照できます。</p>



<p class="wp-block-paragraph">手入力でシート参照を書いたとき、Excelが自動で <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">別シート参照でつまずいたら、まず「文字列が正しく組み立てられているか」を確認します。確認には、INDIRECTを外して文字列だけを表示させる方法が有効です。</p>



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



<p class="wp-block-paragraph">この数式をどこかの空きセルに入れると、INDIRECTが受け取る文字列がそのまま表示されます。表示結果が <code>'売上 データ'!B2</code> のような正しい形になっているかを目で確認できます。</p>



<p class="wp-block-paragraph">ここで <code>売上 データ'!B2</code>（先頭のクォート抜け）のように崩れていれば、数式の <code>"'"</code> の部分が抜けています。文字列さえ正しければ、INDIRECTは必ず正しく参照します。</p>



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



<h3 class="wp-block-heading"><span id="toc11">連動ドロップダウン（名前の定義を使う）</span></h3>



<p class="wp-block-paragraph">INDIRECT関数の代表的な使い方が<strong>連動ドロップダウン</strong>です。1つ目のドロップダウンで選んだ値に応じて、2つ目の選択肢が自動で切り替わります。</p>



<p class="wp-block-paragraph">たとえば1つ目で「果物」を選ぶと、2つ目に「リンゴ・ミカン・バナナ」が表示されます。「野菜」に変えると別の選択肢に切り替わる、というイメージです。手順を順に見ていきましょう。</p>



<p class="wp-block-paragraph"><strong>ステップ1: 選択肢のデータを用意する</strong></p>



<p class="wp-block-paragraph">カテゴリごとの選択肢を、シートに縦方向で並べておきます。</p>



<p class="wp-block-paragraph"><strong>ステップ2: 名前の定義を登録する</strong></p>



<p class="wp-block-paragraph">選択肢の範囲を選びます。次に「数式」タブの「名前の定義」を開きます。ここで範囲に名前を付けます。</p>



<p class="wp-block-paragraph">ポイントは、<strong>名前をカテゴリ名と一致させる</strong>ことです。</p>



<ul class="wp-block-list"><li>「リンゴ・ミカン・バナナ」の範囲 → 名前:果物</li><li>「ニンジン・キャベツ・トマト」の範囲 → 名前:野菜</li></ul>



<p class="wp-block-paragraph">名前の定義の登録手順は<a href="https://mashukabu.com/excel-named-range/">Excelの「名前の定義」完全ガイド</a>で詳しく解説しています。</p>



<p class="wp-block-paragraph"><strong>ステップ3: 第1ドロップダウンを設定する</strong></p>



<p class="wp-block-paragraph">B2セルを選びます。「データの入力規則」を開きます。ソースに「果物,野菜」とカンマ区切りで入力します。</p>



<p class="wp-block-paragraph"><strong>ステップ4: 第2ドロップダウンにINDIRECTを設定する</strong></p>



<p class="wp-block-paragraph">C2セルを選びます。「データの入力規則」を開きます。ソースに次の数式を入力します。</p>



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



<p class="wp-block-paragraph">B2で「果物」を選ぶと、INDIRECT関数が「果物」という文字列を名前の定義として解釈します。結果として、名前「果物」に登録された範囲がドロップダウンの選択肢になります。</p>



<p class="wp-block-paragraph">なお、<strong>名前の定義にはスペースが使えません</strong>。カテゴリ名に空白が入る場合は、名前側をアンダースコアにします。そのうえで次のように対処するのが実務での定番です。</p>



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



<p class="wp-block-paragraph">これはB2の空白をアンダースコアに置き換えてから名前を呼び出すTipsです。連動ドロップダウンの作り方そのものは<a href="https://mashukabu.com/excel-dropdown-list/">Excelの入力規則（プルダウン）完全ガイド</a>も合わせて参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc12">別シートをドロップダウンで動的に切り替える</span></h3>



<p class="wp-block-paragraph">「東京」「大阪」「名古屋」など、支店ごとにシートが分かれている場合を考えます。集計シートにドロップダウンを置きます。選択した支店のデータを自動で表示させる方法です。</p>



<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で「東京」を選べば東京シートのB2が表示されます。「大阪」を選べば大阪シートのB2に切り替わります。</p>



<p class="wp-block-paragraph">SUM関数と組み合わせれば、範囲集計も動的に切り替えられます。</p>



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



<p class="wp-block-paragraph">シートをまたいだ切り替えがドロップダウン1つで完結します。レポート作成がぐっとラクになります。支店名にスペースが入る場合は、前述のクォート付きの書き方を使ってください。</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>の検索範囲を、INDIRECTで動的に指定するテクニックです。部署ごとにシートが分かれている場面で便利です。</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セルにシート名（部署名）を入れておきます。同じ数式のまま、検索対象のシートを切り替えられます。</p>



<p class="wp-block-paragraph">VLOOKUPとINDEX+MATCHの使い分けに迷ったら、<a href="https://mashukabu.com/excel-vlookup-xlookup-index-match-comparison/">VLOOKUP・XLOOKUP・INDEX MATCH使い分けガイド</a>を参考にしてください。なお、Excel 365なら<a href="https://mashukabu.com/excel-function-howto-use-xlookup/">XLOOKUP関数</a>とINDIRECTを組み合わせても同じことができます。</p>



<h3 class="wp-block-heading"><span id="toc14">ADDRESS関数との組み合わせ</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-function-howto-use-address/">ADDRESS関数</a>は、行番号と列番号からセル番地の文字列を生成します。これをINDIRECT関数に渡すと、行と列の両方を数値でコントロールできます。</p>



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



<p class="wp-block-paragraph">B1に行番号（例:3）、C1に列番号（例:2）を入れます。ADDRESS関数が「$B$3」という文字列を生成します。INDIRECT関数がこれをセル参照に変換し、B3の値を返します。</p>



<p class="wp-block-paragraph">ただし、ここまで複雑になるなら<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>のほうがシンプルです。後の章で、この置き換えを詳しく見ていきます。</p>



<h2 class="wp-block-heading"><span id="toc15">#REF!エラー状況別フローと対処法</span></h2>



<p class="wp-block-paragraph">INDIRECT関数のエラーは、ほとんどが<strong>#REF!</strong>です。原因は1つではありません。状況ごとに対処が違うので、Q&#038;A形式で4つの分岐を整理します。</p>



<p class="wp-block-paragraph">まず、自分のエラーがどの状況に当てはまるかを次の順で確認してください。</p>



<ol class="wp-block-list"><li>別シートを参照していて、シート名にスペース・記号があるか → 状況1</li><li>参照文字列に余分なスペースが混ざっていないか → 状況2</li><li>外部の別ブックを参照していて、そのブックを閉じていないか → 状況3</li><li>名前の定義を参照していて、その名前が登録済みか → 状況4</li></ol>



<h3 class="wp-block-heading"><span id="toc16">状況1: シート名にスペースがある（クォート漏れ）</span></h3>



<p class="wp-block-paragraph">最も多い原因が、シングルクォートの付け忘れです。シート名にスペースやハイフン、記号が含まれると、クォートなしでは#REF!になります。</p>



<p class="wp-block-paragraph">たとえば次の書き方は、シート名が「売上 データ」だと失敗します。</p>



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



<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">判断に迷う場合は、シート名に関係なく常にクォート付きで書くのがおすすめです。スペースのないシート名でも、クォート付きで問題なく動きます。</p>



<h3 class="wp-block-heading"><span id="toc17">状況2: 参照文字列に余分なスペース（TRIM処理）</span></h3>



<p class="wp-block-paragraph">シート名やセルの値に、<strong>目に見えない余分なスペース</strong>が混ざっているケースです。ほかのシステムからコピーしたデータでよく起こります。</p>



<p class="wp-block-paragraph">「東京」のつもりが「東京 」（末尾に空白）になっていると、シート名が一致せず#REF!になります。この場合はTRIM関数で前後の空白を取り除きます。</p>



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



<p class="wp-block-paragraph">TRIM関数は文字列の前後の空白を削除します。スペースが原因かどうかを切り分けるには、<code>=LEN(A1)</code> で文字数を数えてみてください。想定より多ければ、余分な空白が混ざっています。</p>



<h3 class="wp-block-heading"><span id="toc18">状況3: 外部ブックが閉じている（キャッシュ不可の仕様）</span></h3>



<p class="wp-block-paragraph">INDIRECT関数で<strong>別のExcelブック</strong>を参照する場合、参照先のブックを開いておく必要があります。ブックを閉じると#REF!になります。</p>



<p class="wp-block-paragraph">これは仕様です。ふつうのセル参照（<code>=[Book1.xlsx]Sheet1!A1</code>）なら、ブックを閉じていてもキャッシュ（保存済みの値）が表示されます。一方、INDIRECT関数は毎回文字列を評価して参照を組み立て直します。そのためキャッシュが効きません。</p>



<p class="wp-block-paragraph">対処は2つです。参照先のブックを開いたまま使うか、別ブック参照をやめてふつうのリンク数式に切り替えるかです。なお、Excel Online（ブラウザ版）では、そもそも外部ブック参照に対応していません。</p>



<h3 class="wp-block-heading"><span id="toc19">状況4: 名前の定義が未登録・スペルミス</span></h3>



<p class="wp-block-paragraph">連動ドロップダウンなどで名前の定義を参照しているのに、その名前が登録されていないケースです。<code>=INDIRECT(B2)</code> でB2が「果物」でも、名前「果物」が未登録なら#REF!になります。</p>



<p class="wp-block-paragraph">確認手順は次のとおりです。「数式」タブの「名前の管理」を開きます。一覧に該当の名前があるかを確かめます。</p>



<p class="wp-block-paragraph">スペルや表記ゆれ（全角・半角の違いなど）にも注意してください。エラーを事前に防ぎたい場合は、<a href="https://mashukabu.com/excel-function-howto-use-isref/">ISREF関数</a>で参照の有効性を判定できます。</p>



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



<p class="wp-block-paragraph">参照が有効ならTRUE、無効ならFALSEを返します。IFERROR関数と組み合わせて、エラー時に空白や代替文字を表示するのも有効です。</p>



<h2 class="wp-block-heading"><span id="toc20">揮発性の重さとINDEX置換パターン</span></h2>



<p class="wp-block-paragraph">INDIRECT関数の「重さ」に悩んでいる方も多いはずです。原因は揮発性にあります。ここでは仕組みと、INDEXへの具体的な置き換え方法を解説します。</p>



<h3 class="wp-block-heading"><span id="toc21">揮発性関数とは何か・再計算の仕組み</span></h3>



<p class="wp-block-paragraph">INDIRECT関数は<strong>揮発性関数（Volatile Function）</strong>です。揮発性関数とは、シート内のどこかのセルが変わるたびに、<strong>自分も毎回再計算される</strong>関数のことです。</p>



<p class="wp-block-paragraph">通常の関数は、自分が参照しているセルが変わったときだけ再計算されます。一方、揮発性関数は無関係なセルの変更でも再計算が走ります。同じ仲間には、TODAY関数・NOW関数・RAND関数・<a href="https://mashukabu.com/excel-function-howto-use-offset/">OFFSET関数</a>などがあります。</p>



<p class="wp-block-paragraph">問題は、再計算が連鎖することです。INDIRECTを参照している重い関数（VLOOKUPやSUMIFなど）も、つられて毎回計算し直されます。数個なら影響はありません。しかし数百から数千セルで使うと、ファイルを開くたび・セルを編集するたびに処理が重くなります。</p>



<h3 class="wp-block-heading"><span id="toc22">INDEXに置き換えられるパターン・できないパターン早見表</span></h3>



<p class="wp-block-paragraph">重さを解消する王道が、非揮発性の<a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>への置き換えです。INDEXは参照先のデータが実際に変わったときだけ再計算されます。</p>



<p class="wp-block-paragraph">ただし、すべてのINDIRECTがINDEXに置き換えられるわけではありません。代表的な3パターンの可否を整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>元のINDIRECT</th><th>置換可否</th><th>置換後（INDEX等）</th></tr></thead><tbody><tr><td><code>INDIRECT(ADDRESS(3,2))</code></td><td>置換可</td><td><code>INDEX(A:Z,3,2)</code></td></tr><tr><td><code>INDIRECT("B"&A1)</code></td><td>置換可</td><td><code>INDEX(B:B,A1)</code></td></tr><tr><td><code>INDIRECT(A1&"!B2")</code></td><td>置換不可</td><td>INDIRECTが唯一の手段</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1つ目は、行・列を数値で指定するパターンです。<code>ADDRESS(3,2)</code> は「$B$3」を作るので、参照先は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> も列Bの5番目、つまりB5を返します。こちらも結果は一致します。</p>



<p class="wp-block-paragraph">3つ目の<strong>別シートを動的に切り替えるパターンは置換できません</strong>。INDEXはシート名を文字列で受け取れないからです。連動ドロップダウンの <code>=INDIRECT(B2)</code>（名前を動的に呼ぶ形）も同様で、INDIRECTが唯一の選択肢です。</p>



<h3 class="wp-block-heading"><span id="toc23">パフォーマンス改善の判断基準</span></h3>



<p class="wp-block-paragraph">置き換えるかどうかの判断は、次の基準で考えると迷いません。</p>



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



<p class="wp-block-paragraph">つまり「数値で参照先が決まるか」「文字列で決めたいか」が分かれ目です。文字列ベースの動的参照は、INDIRECTにしかできない仕事です。ここは無理に置き換えず、使う個数を抑える方向で対処します。</p>



<p class="wp-block-paragraph">実務では、すべてを置き換える必要はありません。同じ計算を数百セルで繰り返している箇所だけINDEXに直せば、体感速度は大きく改善します。</p>



<h3 class="wp-block-heading"><span id="toc24">スピル時代（Excel 365）のINDIRECTの位置づけ</span></h3>



<p class="wp-block-paragraph">Excel 365では、FILTER・UNIQUE・XLOOKUPといった<strong>スピル関数</strong>（1つの数式で複数セルに結果が自動展開される関数）が使えます。「これがあればINDIRECTは不要では？」と感じる方もいるでしょう。結論から言うと、用途次第です。</p>



<p class="wp-block-paragraph"><strong>同一シート内</strong>の条件絞り込みは、FILTER関数のほうがシンプルです。たとえば「同じシートの一覧から、特定カテゴリだけ抜き出す」用途を考えます。従来はINDIRECTや作業列を駆使していました。Excel 365なら、FILTERで1行書くだけで動的に絞り込めます。再計算の重さもなく、可読性も高くなります。同じシート内でデータを引きたいだけなら、まずスピル関数を検討してください。</p>



<p class="wp-block-paragraph">一方、<strong>シート名そのものを動的に切り替える</strong>用途は、スピル関数では代替できません。次のような場面です。</p>



<ul class="wp-block-list"><li>連動ドロップダウン（選択値から名前の定義を呼ぶ）</li><li>月別・支店別シートを、選択に応じて切り替える集計</li></ul>



<p class="wp-block-paragraph">FILTERが扱えるのは、あくまで「指定した範囲の中の絞り込み」です。「どのシートを見るか」を文字列で切り替える芸当はできません。ここはExcel 365でもINDIRECTの独壇場です。つまりExcel 365では、<strong>同一シート内の絞り込みはスピル関数、シート横断の動的参照はINDIRECT</strong>という役割分担になります。両者は競合せず、補い合う関係です。</p>



<h2 class="wp-block-heading"><span id="toc25">まとめ・使い分け早見表</span></h2>



<p class="wp-block-paragraph">INDIRECT関数は、<strong>文字列をセル参照に変換する</strong>関数です。便利な反面、別シート参照のクォートと揮発性の重さに注意が必要でした。最後に要点を整理します。</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>#REF!が出た</td><td>クォート漏れ・余分なスペース・閉じたブック・名前未登録の4点を順に確認</td></tr><tr><td>数値で参照先が決まる</td><td><a href="https://mashukabu.com/excel-function-howto-use-index/">INDEX関数</a>に置き換えて軽量化</td></tr><tr><td>文字列で参照先を切り替える</td><td>INDIRECTが唯一の選択肢</td></tr><tr><td>Excel 365で同一シート内を絞り込む</td><td>FILTERなどスピル関数を優先</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">迷ったときの判断はシンプルです。「シート名や名前を文字列で動的に切り替えたい」ならINDIRECT、「行番号・列番号で参照先が決まる」ならINDEXを選んでください。</p>



<p class="wp-block-paragraph">揮発性による重さが気になったら、置換可能なパターンだけをINDEXに直すと効果的です。まずは別シート参照と連動ドロップダウンから試してみてください。Googleスプレッドシートでも使いたい方は、<a href="https://mashukabu.com/spreadsheet-indirect-function/">スプレッドシートのINDIRECT関数の使い方</a>も参考にしてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-indirect/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
