<?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%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Tue, 11 Aug 2026 09:05:34 +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>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-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">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>
	</channel>
</rss>
