<?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/%E3%82%A8%E3%83%A9%E3%83%BC/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Mon, 08 Jun 2026 15:51:23 +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の循環参照エラーの原因と解消方法｜発生セルの見つけ方と反復計算設定も解説</title>
		<link>https://mashukabu.com/excel-circular-reference-error/</link>
					<comments>https://mashukabu.com/excel-circular-reference-error/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:51:23 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[エラー]]></category>
		<category><![CDATA[反復計算]]></category>
		<category><![CDATA[循環参照]]></category>
		<category><![CDATA[数式]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7861</guid>

					<description><![CDATA[Excelの循環参照エラーの原因と解消方法を解説。発生セルの見つけ方（エラーチェック機能）、数式の修正方法、反復計算を使う方法まで、実用的な手順で説明します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Excelで作業中に「<strong>1 つまたは複数の循環参照が発生しています</strong>」という警告ダイアログが突然表示されて、戸惑った経験はありませんか。OKを押しても警告は消えず、ステータスバーには「循環参照」の文字が残り、計算結果も期待通りに表示されない——という状態に陥ると、どこから手をつければよいのか分からなくなりがちです。</p>



<p class="wp-block-paragraph">この記事では、Excelの循環参照エラーが発生する原因と、エラーが起きているセルの見つけ方、数式を修正して解消する方法を順を追って解説します。さらに、住宅ローン計算や反復処理のように <strong>あえて循環参照を許容したい場合の「反復計算」設定</strong> や、循環参照が原因で計算式が自動更新されなくなる現象についても触れています。</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">循環参照とは｜警告ダイアログの意味</a><ol><li><a href="#toc2" tabindex="0">循環参照を放置すると何が起こるか</a></li></ol></li><li><a href="#toc3" tabindex="0">循環参照が発生する主な原因</a><ol><li><a href="#toc4" tabindex="0">原因1：自分自身のセルを参照している</a></li><li><a href="#toc5" tabindex="0">原因2：間接的に循環している</a></li><li><a href="#toc6" tabindex="0">原因3：コピー＆ペーストでの参照ズレ</a></li><li><a href="#toc7" tabindex="0">原因4：他人から受け取ったブックを編集したとき</a></li></ol></li><li><a href="#toc8" tabindex="0">循環参照セルの見つけ方｜エラーチェック機能の使い方</a><ol><li><a href="#toc9" tabindex="0">手順1：ステータスバーで確認する</a></li><li><a href="#toc10" tabindex="0">手順2：数式タブのエラーチェックを使う</a></li><li><a href="#toc11" tabindex="0">手順3：「参照元のトレース」で経路を可視化する</a></li></ol></li><li><a href="#toc12" tabindex="0">循環参照の解消方法｜数式を修正して循環を断ち切る</a><ol><li><a href="#toc13" tabindex="0">パターン1：SUM 関数の範囲を見直す</a></li><li><a href="#toc14" tabindex="0">パターン2：補助セルを使って循環を回避する</a></li><li><a href="#toc15" tabindex="0">パターン3：IF 関数で参照条件を切り替える</a></li><li><a href="#toc16" tabindex="0">パターン4：循環している数式の一部を「値」に変換する</a></li></ol></li><li><a href="#toc17" tabindex="0">あえて循環参照を使いたい場合｜反復計算の設定方法</a><ol><li><a href="#toc18" tabindex="0">反復計算を有効にする手順</a></li><li><a href="#toc19" tabindex="0">反復計算を使うときの注意点</a></li></ol></li><li><a href="#toc20" tabindex="0">循環参照と「計算式が自動更新されない」現象の関係</a></li><li><a href="#toc21" tabindex="0">まとめ｜循環参照は「見つけて・断ち切る」が基本</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">循環参照とは｜警告ダイアログの意味</span></h2>



<p class="wp-block-paragraph">循環参照とは、<strong>ある数式が直接または間接的に「自分自身のセル」を参照してしまっている状態</strong> のことです。たとえばセル A1 に <code>=A1+1</code> と入力すると、A1 の値を計算するために A1 の値が必要になるという矛盾が生じ、Excel は計算結果を確定できません。</p>



<p class="wp-block-paragraph">このような数式を入力した瞬間、Excel は次のような警告ダイアログを表示します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>1 つまたは複数の循環参照が発生しています。循環参照とは、数式が自分自身のセルを参照することによって、正しく計算できないものです。</strong></p></blockquote>



<p class="wp-block-paragraph">ダイアログで「OK」をクリックすると一旦閉じることはできますが、循環参照そのものは解消されていません。画面下のステータスバーに「<strong>循環参照: A1</strong>」のようにセル番地が表示され、循環している箇所がわかるようになっています。</p>



<h3 class="wp-block-heading"><span id="toc2">循環参照を放置すると何が起こるか</span></h3>



<p class="wp-block-paragraph">循環参照を放置した場合、以下のような問題が発生します。</p>



<ul class="wp-block-list"><li>該当セルの計算結果が <strong>0 または直前の値のまま</strong> になり、意図した数値にならない</li><li>ファイルを開くたびに警告ダイアログが表示される</li><li>ブック内のほかの数式まで連鎖的に正しく計算されない場合がある</li><li>後述する「反復計算」がオフのままだと、Excel が <strong>意図的に計算を停止</strong> する</li></ul>



<p class="wp-block-paragraph">特に、関数を多用した集計表や、複数シート間で値をやり取りしているブックでは、循環参照が1か所あるだけで全体の信頼性が損なわれます。早めに発見・修正することが大切です。</p>



<h2 class="wp-block-heading"><span id="toc3">循環参照が発生する主な原因</span></h2>



<p class="wp-block-paragraph">循環参照は、入力ミスや数式の設計ミスから生まれることがほとんどです。代表的なパターンを押さえておくと、原因の特定がぐっと早くなります。</p>



<h3 class="wp-block-heading"><span id="toc4">原因1：自分自身のセルを参照している</span></h3>



<p class="wp-block-paragraph">もっとも単純な循環参照は、<strong>数式の中に自分自身のセル番地を含めてしまう</strong> ケースです。</p>



<figure class="wp-block-table"><table><thead><tr><th>セル</th><th>入力した数式</th><th>状態</th></tr></thead><tbody><tr><td>A1</td><td><code>=A1+1</code></td><td>循環参照（自己参照）</td></tr><tr><td>B5</td><td><code>=SUM(B1:B5)</code></td><td>循環参照（範囲に自分を含む）</td></tr><tr><td>C10</td><td><code>=C10*1.1</code></td><td>循環参照（自己参照）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが、表の合計セルで <strong>「SUM の範囲に合計セル自身を含めてしまう」</strong> ミスです。たとえば B1〜B4 の合計を B5 に出したいときに、誤って <code>=SUM(B1:B5)</code> と入力すると循環参照になります。正しくは <code>=SUM(B1:B4)</code> です。</p>



<h3 class="wp-block-heading"><span id="toc5">原因2：間接的に循環している</span></h3>



<p class="wp-block-paragraph">数式が直接自分自身を参照していなくても、<strong>複数のセルをまたいで循環している</strong> 場合があります。</p>



<p class="wp-block-paragraph">たとえば次のようなケースです。</p>



<ul class="wp-block-list"><li>セル A1: <code>=B1+10</code></li><li>セル B1: <code>=C1*2</code></li><li>セル C1: <code>=A1/2</code></li></ul>



<p class="wp-block-paragraph">A1 → B1 → C1 → A1 と参照が一巡しており、これも立派な循環参照です。1つひとつの数式は単純でも、組み合わさると見つけにくいので注意が必要です。</p>



<h3 class="wp-block-heading"><span id="toc6">原因3：コピー＆ペーストでの参照ズレ</span></h3>



<p class="wp-block-paragraph">数式を別のセルへコピーした際、相対参照のズレによって意図せず循環参照になるケースもあります。たとえば C5 に <code>=SUM(C1:C4)</code> と入れたあと、横方向ではなく <strong>縦方向にコピー</strong> すると、コピー先で範囲が自分のセルを含んでしまうことがあります。</p>



<h3 class="wp-block-heading"><span id="toc7">原因4：他人から受け取ったブックを編集したとき</span></h3>



<p class="wp-block-paragraph">自分が作成していないブックを開いたときに、すでに循環参照が含まれていることもあります。あとから列や行を挿入・削除した際にも、もとは正しかった数式が崩れて循環参照に変わることがあるため、構造変更のあとは特に注意しましょう。</p>



<h2 class="wp-block-heading"><span id="toc8">循環参照セルの見つけ方｜エラーチェック機能の使い方</span></h2>



<p class="wp-block-paragraph">Excel には循環参照を起こしているセルを一覧で確認できる便利な機能があります。「<strong>数式タブ → エラーチェック → 循環参照</strong>」から、該当セルへワンクリックで移動できます。</p>



<h3 class="wp-block-heading"><span id="toc9">手順1：ステータスバーで確認する</span></h3>



<p class="wp-block-paragraph">最も手軽な方法は、Excel ウィンドウ下部の <strong>ステータスバー</strong> を確認することです。循環参照が発生しているブックでは、ステータスバーに次のように表示されます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>循環参照: $A$1</p></blockquote>



<p class="wp-block-paragraph">ここに表示されているセル番地が、現在 Excel が認識している循環参照の起点です。複数ある場合は1か所のみ表示されますが、解消すると次の循環参照セルが表示されます。</p>



<h3 class="wp-block-heading"><span id="toc10">手順2：数式タブのエラーチェックを使う</span></h3>



<p class="wp-block-paragraph">ステータスバーの表示だけでは全体像が把握しにくいので、複数の循環参照がある場合や、シートが多いブックでは「<strong>エラーチェック</strong>」機能を使います。</p>



<ol class="wp-block-list"><li>リボンの「<strong>数式</strong>」タブを開く</li><li>「<strong>数式の検証</strong>」グループにある「<strong>エラーチェック</strong>」横のドロップダウン矢印をクリック</li><li>メニューから「<strong>循環参照</strong>」にマウスを合わせる</li><li>サブメニューに、循環参照が発生しているセル番地の一覧が表示される</li><li>クリックすると該当セルへジャンプする</li></ol>



<p class="wp-block-paragraph">サブメニューに <strong>「循環参照」がグレーアウトしていれば、ブック内に循環参照は存在しません</strong>。逆に項目が表示されている間は、まだ未解消の循環参照が残っているサインです。</p>



<h3 class="wp-block-heading"><span id="toc11">手順3：「参照元のトレース」で経路を可視化する</span></h3>



<p class="wp-block-paragraph">間接的な循環参照（複数セルをまたぐタイプ）は、数式だけ眺めていても経路が把握しづらいものです。そこで活躍するのが「<strong>参照元のトレース</strong>」機能です。</p>



<ol class="wp-block-list"><li>怪しいセルを選択する</li><li>「数式」タブ → 「<strong>ワークシート分析</strong>」グループ → 「<strong>参照元のトレース</strong>」をクリック</li><li>そのセルが参照しているセルから矢印が引かれる</li><li>さらに矢印の元になっているセルを選んで同じ操作を繰り返すと、参照のチェーンが見えてくる</li></ol>



<p class="wp-block-paragraph">矢印が一巡しているのを目視で確認できれば、どこを断ち切ればよいか判断しやすくなります。確認が終わったら「<strong>矢印の削除</strong>」で表示をクリアしておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc12">循環参照の解消方法｜数式を修正して循環を断ち切る</span></h2>



<p class="wp-block-paragraph">原因セルが特定できたら、いよいよ修正です。基本的な考え方は <strong>「参照のループを1か所どこかで断ち切る」</strong> ことに尽きます。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン1：SUM 関数の範囲を見直す</span></h3>



<p class="wp-block-paragraph">最も多いのが合計範囲のミスです。前述のように <code>=SUM(B1:B5)</code> を B5 に入れているケースなどです。</p>



<figure class="wp-block-table"><table><thead><tr><th>修正前（B5）</th><th>修正後（B5）</th></tr></thead><tbody><tr><td><code>=SUM(B1:B5)</code></td><td><code>=SUM(B1:B4)</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">合計セルを範囲から外せば、循環参照は解消します。AVERAGE・COUNT・MAX といったほかの集計関数でも考え方は同じです。集計関数の使い方を改めて確認したい場合は、<a href="https://mashukabu.com/excel-function-howto-use-sum/">SUM関数の使い方</a> も参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン2：補助セルを使って循環を回避する</span></h3>



<p class="wp-block-paragraph">たとえば「税込価格を税抜価格から計算したいが、税込価格セルからも逆引きしたい」というような <strong>双方向の計算をしたい場面</strong> では、ついつい循環参照になりがちです。このような場合は、入力欄と表示欄を分けて、補助セルを介する設計に変更します。</p>



<ul class="wp-block-list"><li>入力用セル（手入力する値）</li><li>計算用セル（数式で算出する値）</li></ul>



<p class="wp-block-paragraph">このように役割を明確に分ければ、計算の流れが一方向になり、循環参照を防げます。</p>



<h3 class="wp-block-heading"><span id="toc15">パターン3：IF 関数で参照条件を切り替える</span></h3>



<p class="wp-block-paragraph">「ある条件下だけ参照したい」というケースで循環参照になる場合は、<a href="https://mashukabu.com/excel-function-howto-use-if/">IF関数</a> を使って参照そのものを条件付きにする方法も有効です。条件に当てはまらない場合は値を返さない（例：<code>""</code> を返す）ように設計することで、ループを断ち切れます。</p>



<h3 class="wp-block-heading"><span id="toc16">パターン4：循環している数式の一部を「値」に変換する</span></h3>



<p class="wp-block-paragraph">設計上どうしても循環参照になりやすい場合、<strong>循環の一端だけを「値（数値）」として固定する</strong> ことも実務的な解決策です。</p>



<ol class="wp-block-list"><li>ループ上のセルを選択</li><li>コピー（Ctrl + C）</li><li>同じセルを右クリック → 「<strong>形式を選択して貼り付け</strong>」 → 「<strong>値</strong>」</li><li>数式が消え、計算結果のみが残る</li></ol>



<p class="wp-block-paragraph">ただしこの方法では参照元が変わっても自動で再計算されなくなるため、一時的な解決として使うのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc17">あえて循環参照を使いたい場合｜反復計算の設定方法</span></h2>



<p class="wp-block-paragraph">循環参照は基本的にエラーですが、<strong>反復計算（イテレーション）</strong> を意図的に使いたい場面もあります。代表例は次のようなケースです。</p>



<ul class="wp-block-list"><li>住宅ローンや投資の金利・元金を逐次計算する</li><li>在庫の入出庫を前期末の値から繰り返し計算する</li><li>工学・科学計算で収束計算を行う</li><li>数値解析的に近似解を求める</li></ul>



<p class="wp-block-paragraph">このような場合は、Excel の <strong>反復計算オプション</strong> を有効にすることで、循環参照を許容しつつ計算を進めることができます。</p>



<h3 class="wp-block-heading"><span id="toc18">反復計算を有効にする手順</span></h3>



<ol class="wp-block-list"><li>リボンの「<strong>ファイル</strong>」タブを開く</li><li>「<strong>オプション</strong>」をクリック</li><li>Excel のオプション画面で「<strong>数式</strong>」を選択</li><li>「計算方法の設定」グループ内の「<strong>反復計算を行う</strong>」にチェックを入れる</li><li>必要に応じて「<strong>最大反復回数</strong>」「<strong>変化の最大値</strong>」を設定する</li><li>「OK」をクリック</li></ol>



<figure class="wp-block-table"><table><thead><tr><th>設定項目</th><th>既定値</th><th>意味</th></tr></thead><tbody><tr><td>最大反復回数</td><td>100</td><td>何回まで再計算を繰り返すか</td></tr><tr><td>変化の最大値</td><td>0.001</td><td>計算結果の変化がこの値を下回ったら計算を打ち切る</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最大反復回数を増やすと精度は上がりますが、計算時間は長くなります。通常の業務用途であれば、既定値のままで十分なケースがほとんどです。</p>



<h3 class="wp-block-heading"><span id="toc19">反復計算を使うときの注意点</span></h3>



<p class="wp-block-paragraph">反復計算はあくまで <strong>「意図して循環参照を使う」前提の機能</strong> であり、安易に有効化するのはおすすめできません。</p>



<ul class="wp-block-list"><li>ブック単位ではなく <strong>Excel アプリ全体の設定</strong> として保存される</li><li>反復計算をオンにすると、<strong>ミスで生じた循環参照の警告も出なくなる</strong></li><li>計算結果が安定しない（収束しない）数式では、毎回値が微妙に変わる</li><li>ファイルを共有した相手の環境では設定が異なる可能性がある</li></ul>



<p class="wp-block-paragraph">意図せず循環参照になってしまっている場合は、反復計算をオンにするのではなく <strong>数式を修正して根本解決</strong> することを優先しましょう。</p>



<h2 class="wp-block-heading"><span id="toc20">循環参照と「計算式が自動更新されない」現象の関係</span></h2>



<p class="wp-block-paragraph">循環参照は、<strong>Excel の計算結果が自動的に更新されない</strong> 不具合の原因になることがあります。</p>



<p class="wp-block-paragraph">通常、Excel は数式の入力セルを変更したり、参照元のセルを書き換えたりすると即座に再計算を行います。しかし、ブック内に循環参照が含まれていて反復計算がオフの場合、Excel は計算ループが終わらないことを警戒し、<strong>該当セル周辺の自動再計算を停止する</strong> ことがあります。</p>



<p class="wp-block-paragraph">そのため、「数字を打ち直しても結果が変わらない」「F9 キーを押しても更新されない」と感じたら、次の順序で確認しましょう。</p>



<ol class="wp-block-list"><li>ステータスバーに「循環参照」と表示されていないか</li><li>「数式」タブの「<strong>計算方法の設定</strong>」が「自動」になっているか</li><li>「数式」タブの「<strong>エラーチェック</strong>」→「循環参照」に項目がないか</li></ol>



<p class="wp-block-paragraph">計算式が自動計算されない原因と対処法の全体像は、<a href="https://mashukabu.com/excel-formula-manual-calculation/">Excelの計算式が自動計算されないときの原因と対処法</a> で詳しく解説しています。循環参照と合わせて確認すると、原因の切り分けがしやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc21">まとめ｜循環参照は「見つけて・断ち切る」が基本</span></h2>



<p class="wp-block-paragraph">Excel の循環参照エラーについて、原因・見つけ方・解消方法・反復計算の設定までを解説しました。最後にポイントを整理します。</p>



<ul class="wp-block-list"><li>循環参照とは、<strong>数式が直接または間接的に自分自身を参照している状態</strong></li><li>警告ダイアログが出たらまずは「OK」で閉じ、<strong>ステータスバーや「数式」タブ → エラーチェック → 循環参照</strong> からセルを特定する</li><li>多くは <strong>SUM の合計範囲ミス</strong> か、<strong>数セルにまたがる間接的なループ</strong></li><li>解消の基本は <strong>参照のループを1か所断ち切る</strong> こと</li><li>反復計算の機能は <strong>意図して循環を許容したい場合のみ</strong> 使い、ミスによる循環参照を隠す目的では使わない</li><li>「数値を変えても結果が更新されない」場合は、循環参照と計算方法の設定（自動／手動）の両方を確認する</li></ul>



<p class="wp-block-paragraph">循環参照は仕組みさえ分かれば怖いエラーではありません。エラーチェック機能と参照元のトレースを使い分けながら、落ち着いてセルを特定し、確実に解消していきましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-circular-reference-error/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAマクロのエラー解決ガイド｜実行時エラー13・1004・9など頻出エラー別の直し方</title>
		<link>https://mashukabu.com/vba-error-guide/</link>
					<comments>https://mashukabu.com/vba-error-guide/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 12:42:37 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[エラー]]></category>
		<category><![CDATA[デバッグ]]></category>
		<category><![CDATA[トラブルシューティング]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5981</guid>

					<description><![CDATA[VBAマクロで頻出する実行時エラー（13・1004・9・91・438など）を番号別に解説。原因・発生パターン・修正コードをセットで紹介し、On Error構文やデバッグ手順までまとめました。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAでマクロを書いていると、いきなり赤い画面で「実行時エラー」と表示されて慌てた経験、誰にでもあると思います。しかも番号だけ出て意味がわからない、英語で説明されても何を直せばいいか見当がつかない、というケースが多いですよね。</p>



<p class="wp-block-paragraph">この記事では、VBAマクロで特に頻出する実行時エラーを <strong>番号ごとに原因・発生パターン・修正コード</strong> の3点セットで整理しました。併せて、エラーが出たときの定番の調べ方（ステップ実行・イミディエイトウィンドウ）や、<code>On Error</code> 構文を使ったエラーハンドリングの基本もまとめています。</p>



<p class="wp-block-paragraph">エラー番号で検索してたどり着いた方は、目次から該当箇所にジャンプしてください。「とりあえず一通り押さえたい」という方は、最初から順に読んでいただくとVBAの例外対処の勘所がつかめる内容になっています。</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">VBAの実行時エラーとは｜まずは全体像を押さえる</a></li><li><a href="#toc2" tabindex="0">実行時エラー 13｜型の不一致（Type mismatch）</a><ol><li><a href="#toc3" tabindex="0">原因と典型パターン</a></li><li><a href="#toc4" tabindex="0">直し方</a></li></ol></li><li><a href="#toc5" tabindex="0">実行時エラー 1004｜アプリケーション定義またはオブジェクト定義のエラー</a><ol><li><a href="#toc6" tabindex="0">典型パターン 1: シート名が間違っている</a></li><li><a href="#toc7" tabindex="0">典型パターン 2: Range の引数が不正</a></li><li><a href="#toc8" tabindex="0">典型パターン 3: 保護されたシートに書き込み</a></li><li><a href="#toc9" tabindex="0">典型パターン 4: Cells の引数が範囲外</a></li></ol></li><li><a href="#toc10" tabindex="0">実行時エラー 9｜インデックスが有効範囲にありません</a><ol><li><a href="#toc11" tabindex="0">典型パターン</a></li><li><a href="#toc12" tabindex="0">直し方</a></li></ol></li><li><a href="#toc13" tabindex="0">実行時エラー 91｜オブジェクト変数または With ブロック変数が設定されていません</a><ol><li><a href="#toc14" tabindex="0">典型パターン</a></li><li><a href="#toc15" tabindex="0">直し方</a></li></ol></li><li><a href="#toc16" tabindex="0">実行時エラー 438｜オブジェクトはこのプロパティまたはメソッドをサポートしていません</a><ol><li><a href="#toc17" tabindex="0">典型パターン</a></li><li><a href="#toc18" tabindex="0">直し方</a></li></ol></li><li><a href="#toc19" tabindex="0">実行時エラー 424｜オブジェクトが必要です</a></li><li><a href="#toc20" tabindex="0">実行時エラー 6｜オーバーフロー</a></li><li><a href="#toc21" tabindex="0">エラーが出たときのデバッグ手順</a><ol><li><a href="#toc22" tabindex="0">1. ステップ実行（F8キー）</a></li><li><a href="#toc23" tabindex="0">2. イミディエイトウィンドウ（Ctrl + G）</a></li><li><a href="#toc24" tabindex="0">3. ブレークポイント（F9キー）</a></li></ol></li><li><a href="#toc25" tabindex="0">On Error 構文によるエラーハンドリング</a><ol><li><a href="#toc26" tabindex="0">On Error GoTo ラベル</a></li><li><a href="#toc27" tabindex="0">On Error Resume Next</a></li></ol></li><li><a href="#toc28" tabindex="0">エラーを減らすための予防策</a></li><li><a href="#toc29" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAの実行時エラーとは｜まずは全体像を押さえる</span></h2>



<p class="wp-block-paragraph">VBAのエラーは大きく3種類あります。</p>



<ol class="wp-block-list"><li><strong>コンパイルエラー</strong>: マクロを実行する前、VBEが構文を解析した時点で出るエラー。「構文エラー」「変数が定義されていません」など。</li><li><strong>実行時エラー</strong>: マクロを実行した途中で発生するエラー。この記事で主に扱う「実行時エラー 13」などがこれです。</li><li><strong>論理エラー</strong>: エラーメッセージは出ないが結果が想定と違うバグ。</li></ol>



<p class="wp-block-paragraph">実行時エラーが厄介なのは、「コードの書き方」ではなく「実行時のデータ・環境」によって発生するため、書いたときには気づけないという点です。たとえば、開発中は問題なくても、他の人がシートを編集した瞬間に壊れることがあります。</p>



<p class="wp-block-paragraph">実行時エラーが出たときは、<strong>黄色くハイライトされた行</strong> が原因箇所です。「デバッグ」ボタンを押すとその行で一時停止するので、まずはその行で何が起きているかを確認するのが第一歩になります。</p>



<h2 class="wp-block-heading"><span id="toc2">実行時エラー 13｜型の不一致（Type mismatch）</span></h2>



<p class="wp-block-paragraph">VBAで最も頻繁に目にするエラーが、この「型の不一致」です。ある型を期待している場所に別の型の値を渡そうとしたときに発生します。</p>



<h3 class="wp-block-heading"><span id="toc3">原因と典型パターン</span></h3>



<pre class="wp-block-code"><code>Dim i As Long
i = Range(&quot;A1&quot;).Value  ' A1に &quot;りんご&quot; と入っているとエラー13</code></pre>



<p class="wp-block-paragraph">数値型の変数に文字列を入れようとした、というのがもっとも典型的なパターンです。他にも次のような状況で発生します。</p>



<ul class="wp-block-list"><li>セルにエラー値（<code>#N/A</code>、<code>#VALUE!</code> など）が入っている状態で、そのセルを数値変数に代入した</li><li><code>CInt</code> / <code>CLng</code> / <code>CDbl</code> に変換不可能な文字列を渡した（例: <code>CInt("abc")</code>）</li><li>配列が必要な場所にスカラー値を渡した</li></ul>



<h3 class="wp-block-heading"><span id="toc4">直し方</span></h3>



<p class="wp-block-paragraph">セルの値を数値として扱いたい場合は、事前に <strong>IsNumeric で検査</strong> してから代入するのが定石です。</p>



<pre class="wp-block-code"><code>Dim v As Variant
v = Range(&quot;A1&quot;).Value
If IsNumeric(v) Then
    Dim i As Long
    i = CLng(v)
Else
    MsgBox &quot;A1が数値ではありません: &quot; &amp; v
End If</code></pre>



<p class="wp-block-paragraph">また、エラー値が混ざる可能性があるセルは <code>IsError</code> で事前チェックしましょう。</p>



<pre class="wp-block-code"><code>If Not IsError(Range(&quot;A1&quot;).Value) Then
    i = Range(&quot;A1&quot;).Value
End If</code></pre>



<p class="wp-block-paragraph">ポイントは、<strong>Variantでいったん受けてから判定 → 変換</strong> という流れです。直接 Long 型に代入しようとすると、そこで処理が止まってしまいます。</p>



<h2 class="wp-block-heading"><span id="toc5">実行時エラー 1004｜アプリケーション定義またはオブジェクト定義のエラー</span></h2>



<p class="wp-block-paragraph">エラー1004は「Excelに何かを頼んだけど、その頼み方が正しくない」ときに出ます。メッセージが曖昧なので原因の特定が難しい、VBAでもトップクラスに悩まされるエラーです。</p>



<h3 class="wp-block-heading"><span id="toc6">典型パターン 1: シート名が間違っている</span></h3>



<pre class="wp-block-code"><code>Worksheets(&quot;売上&quot;).Range(&quot;A1&quot;).Value = 100  ' &quot;売上&quot;シートが存在しないとエラー1004</code></pre>



<p class="wp-block-paragraph">シートをリネームしたのにコード側を直し忘れた、というよくあるパターンです。<code>Worksheets("名前")</code> は該当シートがないと即座に1004になります。</p>



<p class="wp-block-paragraph"><strong>直し方</strong>: シート存在チェックを関数化しておくと安全です。</p>



<pre class="wp-block-code"><code>Function SheetExists(name As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(name)
    On Error GoTo 0
    SheetExists = Not ws Is Nothing
End Function</code></pre>



<h3 class="wp-block-heading"><span id="toc7">典型パターン 2: Range の引数が不正</span></h3>



<pre class="wp-block-code"><code>Range(&quot;A1:Z0&quot;).Select  ' 行番号 0 は存在しない → 1004
Range(&quot;&quot;).Value = 1    ' 空文字 → 1004</code></pre>



<p class="wp-block-paragraph"><code>Range</code> に渡す文字列が不正（存在しないアドレス・空文字）だと1004になります。変数から動的に組み立てた文字列を <code>Range</code> に渡す場合は要注意です。</p>



<h3 class="wp-block-heading"><span id="toc8">典型パターン 3: 保護されたシートに書き込み</span></h3>



<pre class="wp-block-code"><code>ActiveSheet.Range(&quot;A1&quot;).Value = 100  ' シートが保護されているとエラー1004</code></pre>



<p class="wp-block-paragraph"><strong>直し方</strong>: 保護を一時的に解除してから書き込み、終わったら戻します。</p>



<pre class="wp-block-code"><code>ActiveSheet.Unprotect
ActiveSheet.Range(&quot;A1&quot;).Value = 100
ActiveSheet.Protect</code></pre>



<h3 class="wp-block-heading"><span id="toc9">典型パターン 4: Cells の引数が範囲外</span></h3>



<pre class="wp-block-code"><code>Cells(1048577, 1).Value = 1  ' Excel 2007以降でも行の上限は 1048576</code></pre>



<p class="wp-block-paragraph">Excelの行列の上限を超えた値を <code>Cells</code> や <code>Range</code> に渡すと1004です。ループで <code>i</code> を増やしていく処理でありがちなミスです。</p>



<h2 class="wp-block-heading"><span id="toc10">実行時エラー 9｜インデックスが有効範囲にありません</span></h2>



<p class="wp-block-paragraph">配列やコレクションの範囲外にアクセスしたときに出るエラーです。</p>



<h3 class="wp-block-heading"><span id="toc11">典型パターン</span></h3>



<pre class="wp-block-code"><code>Dim arr(1 To 3) As String
arr(4) = &quot;aaa&quot;  ' エラー9

Workbooks(&quot;存在しないブック.xlsx&quot;).Activate  ' エラー9
Worksheets(5).Select  ' シートが4枚しかなければエラー9</code></pre>



<p class="wp-block-paragraph">配列の添字、ブック名、シート名・シート番号の指定ミスで発生します。1004 と混同しがちですが、「<strong>コレクションに対するアクセス</strong>」がキーワードです。</p>



<h3 class="wp-block-heading"><span id="toc12">直し方</span></h3>



<p class="wp-block-paragraph"><strong>配列の場合</strong> は <code>LBound</code> と <code>UBound</code> で範囲を確認します。</p>



<pre class="wp-block-code"><code>Dim i As Long
For i = LBound(arr) To UBound(arr)
    Debug.Print arr(i)
Next i</code></pre>



<p class="wp-block-paragraph"><strong>ブック・シートの場合</strong> は名前で存在チェックしてからアクセスします。先ほどの <code>SheetExists</code> 関数のように、<code>On Error Resume Next</code> で一時的にエラーを抑制して判定する方法が定番です。</p>



<p class="wp-block-paragraph">動的配列で <code>ReDim</code> を忘れた場合もエラー9になります。<code>ReDim Preserve arr(1 To n)</code> を先に実行してから添字に代入しましょう。</p>



<h2 class="wp-block-heading"><span id="toc13">実行時エラー 91｜オブジェクト変数または With ブロック変数が設定されていません</span></h2>



<p class="wp-block-paragraph">「Nothing が入っているオブジェクト変数を使おうとした」というエラーです。<code>Set</code> を書き忘れたときに出ます。</p>



<h3 class="wp-block-heading"><span id="toc14">典型パターン</span></h3>



<pre class="wp-block-code"><code>Dim ws As Worksheet
ws.Range(&quot;A1&quot;).Value = 1  ' Set していない → エラー91

Dim r As Range
Set r = Range(&quot;A:A&quot;).Find(&quot;検索語&quot;)
MsgBox r.Address  ' Find で見つからないと Nothing → エラー91</code></pre>



<p class="wp-block-paragraph">特に <strong>Find メソッドは「見つからないとき Nothing を返す」</strong> ので、そのまま <code>r.Address</code> などにアクセスすると91になります。Findは実務で多用するので、ここは鉄則として覚えておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc15">直し方</span></h3>



<p class="wp-block-paragraph">Set が必要なオブジェクト（<code>Worksheet</code>、<code>Range</code>、<code>Workbook</code> など）は、<strong>必ず Set で代入してから使う</strong>。Find などの結果は <strong>Nothing 判定を挟む</strong>。</p>



<pre class="wp-block-code"><code>Dim r As Range
Set r = Range(&quot;A:A&quot;).Find(&quot;検索語&quot;)
If r Is Nothing Then
    MsgBox &quot;見つかりませんでした&quot;
    Exit Sub
End If
MsgBox r.Address</code></pre>



<p class="wp-block-paragraph"><code>Is Nothing</code> は VBA における null チェックの作法です。Findと組み合わせて使う流れは必ず身につけてください。</p>



<h2 class="wp-block-heading"><span id="toc16">実行時エラー 438｜オブジェクトはこのプロパティまたはメソッドをサポートしていません</span></h2>



<p class="wp-block-paragraph">そのオブジェクトに存在しないプロパティやメソッドを呼び出したときのエラーです。</p>



<h3 class="wp-block-heading"><span id="toc17">典型パターン</span></h3>



<pre class="wp-block-code"><code>Dim ws As Worksheet
Set ws = ActiveSheet
ws.Rows.Count  ' OK
ws.Count       ' Worksheet に Count プロパティはない → エラー438</code></pre>



<p class="wp-block-paragraph">よくあるのは、<strong>変数の型を間違えている</strong> ケースです。「<code>Range</code> と思って書いていたけど実際は <code>Worksheet</code> だった」など、オブジェクト型の取り違えで発生します。</p>



<h3 class="wp-block-heading"><span id="toc18">直し方</span></h3>



<p class="wp-block-paragraph">まずは <code>Dim</code> で型をきちんと宣言すること。<code>Variant</code> や <code>Object</code> 型で受けてしまうと、VBEの入力補完が効かず、存在しないメソッドを気づかずに書けてしまいます。</p>



<pre class="wp-block-code"><code>Dim ws As Worksheet   ' OK: 入力補完が効く
Dim obj As Object     ' NG: 何でも書けてしまう</code></pre>



<p class="wp-block-paragraph">また <code>.</code> を打ったときに候補が出ないメンバは存在しないので、<strong>入力補完に頼る</strong> のも有効な予防策です。</p>



<h2 class="wp-block-heading"><span id="toc19">実行時エラー 424｜オブジェクトが必要です</span></h2>



<p class="wp-block-paragraph">オブジェクトを要求する場所に、オブジェクトではない値を渡したときのエラーです。</p>



<pre class="wp-block-code"><code>Dim ws As Worksheet
ws = Worksheets(&quot;Sheet1&quot;)      ' Set を忘れた → エラー424
Set ws = Worksheets(&quot;Sheet1&quot;)  ' 正解</code></pre>



<p class="wp-block-paragraph"><code>Set</code> キーワードを忘れたパターンがほぼ全てです。オブジェクト変数への代入には必ず <code>Set</code> を付ける、というルールを徹底しましょう。VBAは他言語にない独特な作法なので、初学者ほどハマりやすいポイントです。</p>



<h2 class="wp-block-heading"><span id="toc20">実行時エラー 6｜オーバーフロー</span></h2>



<p class="wp-block-paragraph">変数の型の最大値を超えたときに発生します。</p>



<pre class="wp-block-code"><code>Dim i As Integer
i = 40000  ' Integer の上限は 32767 → エラー6</code></pre>



<p class="wp-block-paragraph">Integer（-32768〜32767）の上限を超えると即座にオーバーフローします。行数をカウンタにするなど、<strong>大きな値が入る可能性のある変数は必ず <code>Long</code> 型</strong> にしましょう。</p>



<pre class="wp-block-code"><code>Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row</code></pre>



<p class="wp-block-paragraph">VBAでは Integer を使うメリットはほぼないため、整数は基本 Long と覚えてしまって構いません。</p>



<h2 class="wp-block-heading"><span id="toc21">エラーが出たときのデバッグ手順</span></h2>



<p class="wp-block-paragraph">エラー番号を検索しても原因がわからないときは、次の手順で調査します。</p>



<h3 class="wp-block-heading"><span id="toc22">1. ステップ実行（F8キー）</span></h3>



<p class="wp-block-paragraph">VBEで調査したいプロシージャの先頭にカーソルを置き、<code>F8</code> キーを押すと <strong>1行ずつ実行</strong> できます。1行進めるたびに変数の中身を確認できるので、「どの行でおかしくなったか」を特定できます。</p>



<h3 class="wp-block-heading"><span id="toc23">2. イミディエイトウィンドウ（Ctrl + G）</span></h3>



<p class="wp-block-paragraph">イミディエイトウィンドウは、VBEで <code>Ctrl + G</code> を押すと開く対話的な実行窓です。ここに次のように打ち込むと、その場で値を確認できます。</p>



<pre class="wp-block-code"><code>? Range(&quot;A1&quot;).Value
? TypeName(Range(&quot;A1&quot;).Value)
? ActiveSheet.Name</code></pre>



<p class="wp-block-paragraph"><code>TypeName</code> は変数やセルの値の型を調べられる関数で、エラー13（型の不一致）のデバッグに絶大な効果を発揮します。</p>



<p class="wp-block-paragraph">コードの途中に <code>Debug.Print</code> を仕込むのも定番です。</p>



<pre class="wp-block-code"><code>Debug.Print &quot;i=&quot; &amp; i, &quot;値=&quot; &amp; arr(i)</code></pre>



<h3 class="wp-block-heading"><span id="toc24">3. ブレークポイント（F9キー）</span></h3>



<p class="wp-block-paragraph">気になる行を選択して <code>F9</code> を押すと、その行に赤い丸（ブレークポイント）が付きます。実行するとその行で自動的に一時停止するので、ステップ実行と組み合わせて原因箇所を絞り込めます。</p>



<p class="wp-block-paragraph">ステップ実行・イミディエイト・ブレークポイントの3つを使いこなせると、VBAのデバッグ効率は劇的に上がります。VBEの使い方を体系的に押さえたい方は <a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">Excel VBAのVBE（Visual Basic Editor）のメニュー解説</a> も併せてご覧ください。</p>



<h2 class="wp-block-heading"><span id="toc25">On Error 構文によるエラーハンドリング</span></h2>



<p class="wp-block-paragraph">想定外のエラーでマクロが止まるのを防ぐには、<code>On Error</code> 構文でハンドリングを書きます。</p>



<h3 class="wp-block-heading"><span id="toc26">On Error GoTo ラベル</span></h3>



<p class="wp-block-paragraph">エラー発生時に指定したラベルへジャンプする、もっとも基本的な形です。</p>



<pre class="wp-block-code"><code>Sub Sample()
    On Error GoTo ErrHandler

    ' 本体処理
    Range(&quot;A1&quot;).Value = 1 / 0

    Exit Sub  ' ← エラーなく終わったらここで抜ける（重要）

ErrHandler:
    MsgBox &quot;エラー番号: &quot; &amp; Err.Number &amp; vbCrLf &amp; _
           &quot;内容: &quot; &amp; Err.Description
End Sub</code></pre>



<p class="wp-block-paragraph">ポイントは、<strong>エラーがなく正常終了した場合にラベルの下に処理が流れ込まないよう <code>Exit Sub</code> を置く</strong> ことです。これを忘れると、正常終了時にもエラーメッセージが表示されてしまいます。</p>



<p class="wp-block-paragraph"><code>Err.Number</code> でエラー番号、<code>Err.Description</code> でメッセージを取得できるので、ログ出力やユーザー向けメッセージに活用しましょう。</p>



<h3 class="wp-block-heading"><span id="toc27">On Error Resume Next</span></h3>



<p class="wp-block-paragraph">エラーが起きても止めずに次の行へ進む、というモードです。前述のシート存在チェックのように、「エラーが出ること自体を期待している」局面で使います。</p>



<pre class="wp-block-code"><code>On Error Resume Next
Set ws = ThisWorkbook.Worksheets(&quot;売上&quot;)
On Error GoTo 0  ' エラー抑制を解除

If ws Is Nothing Then
    MsgBox &quot;売上シートがありません&quot;
End If</code></pre>



<p class="wp-block-paragraph"><strong>使い終わったら必ず <code>On Error GoTo 0</code> で解除</strong> してください。付けっぱなしにすると、本来気づくべきエラーまで無視されてしまい、バグの発見が遅れます。</p>



<p class="wp-block-paragraph"><code>On Error Resume Next</code> は強力な一方で、<strong>乱用するとエラーが全部握りつぶされる危険な構文</strong> でもあります。「ここで発生するエラーは想定内だ」と言い切れる狭い範囲に限定して使いましょう。</p>



<h2 class="wp-block-heading"><span id="toc28">エラーを減らすための予防策</span></h2>



<p class="wp-block-paragraph">そもそもエラーを出さないコードを書く、というのが最も効率的な対策です。VBAで押さえておきたい基本作法をまとめておきます。</p>



<ul class="wp-block-list"><li><strong><code>Option Explicit</code> を必ず宣言する</strong>: 変数の宣言漏れを防ぎ、タイプミスをコンパイル時に検出できます。詳しくは <a href="https://mashukabu.com/excel-vba-option-explicit/">Excel VBA の Option Explicit とは</a> を参照してください。</li><li><strong>適切な型で宣言する</strong>: <code>Variant</code> や <code>Object</code> の乱用を避け、<code>Long</code> / <code>String</code> / <code>Worksheet</code> など具体的な型を指定する。入力補完が効き、エラー438・424の予防になります。型の基本は <a href="https://mashukabu.com/excel-vba-variable-explanation/">Excel VBA の変数について</a> でまとめています。</li><li><strong>シート・ブックは名前ではなく変数で保持</strong>: <code>Worksheets("売上")</code> を何度も書かず、先頭で <code>Set ws = Worksheets("売上")</code> しておく。リネーム時の修正箇所も減ります。</li><li><strong>マジックナンバーを避ける</strong>: <code>Cells(Rows.Count, 1).End(xlUp).Row</code> のように、最終行を動的に取る。固定で <code>Range("A1:A1000")</code> と書くと、1000行を超えたときに破綻します。最終行取得の定石は <a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">Excel VBAで最終行を取得する方法</a> を参照してください。</li><li><strong>Find の結果は必ず Nothing チェック</strong>: 前述の通りエラー91の温床です。</li></ul>



<p class="wp-block-paragraph">こうした基本を押さえたうえで、<code>On Error</code> で想定外だけ拾う、という二段構えが理想です。VBAマクロの基礎から学び直したい方は <a href="https://mashukabu.com/excel-vba-macro-beginners-guide/">Excel VBAマクロ入門ガイド</a> や <a href="https://mashukabu.com/excel-vba-automation-guide/">Excel VBA自動化ガイド</a> に体系的にまとめていますので、併せてどうぞ。</p>



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



<p class="wp-block-paragraph">VBAの実行時エラーは、番号ごとに原因のパターンがかなり決まっています。</p>



<ul class="wp-block-list"><li><strong>エラー13（型の不一致）</strong>: 数値変数に文字列やエラー値を入れていないか。<code>IsNumeric</code> / <code>IsError</code> で事前チェック。</li><li><strong>エラー1004</strong>: シート名・Range引数・シート保護・セル範囲超過のいずれか。シート存在チェック関数を用意しておく。</li><li><strong>エラー9（インデックス範囲外）</strong>: 配列・ブック・シートへのアクセスを確認。<code>LBound</code> / <code>UBound</code> や名前検査で防ぐ。</li><li><strong>エラー91（オブジェクト未設定）</strong>: <code>Set</code> の書き忘れ、Findの結果 Nothing。<code>Is Nothing</code> 判定を徹底。</li><li><strong>エラー438</strong>: 存在しないメソッド呼び出し。型を正しく宣言する。</li><li><strong>エラー424</strong>: <code>Set</code> 忘れ。</li><li><strong>エラー6（オーバーフロー）</strong>: Integer ではなく Long を使う。</li></ul>



<p class="wp-block-paragraph">そして、エラーが出たときは慌てずに <strong>ステップ実行 → イミディエイトで型を確認 → <code>Debug.Print</code> でログを仕込む</strong> という順番で追いかけましょう。ハンドリングが必要な場面では <code>On Error GoTo</code> と <code>On Error Resume Next</code> を適切に使い分け、<strong>使ったら必ず <code>On Error GoTo 0</code> で解除する</strong> ことも忘れずに。</p>



<p class="wp-block-paragraph">エラーと上手に付き合えるようになると、VBAの開発スピードは一段階上がります。この記事をブックマークしておいて、エラーが出たときに番号で逆引きしていただければ幸いです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/vba-error-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
