<?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, 13 Apr 2026 13:10:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>エラー &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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-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">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>



<p class="wp-block-paragraph"><!-- screenshot: 01_ui_vbe-step-execution.png | VBE（Visual Basic Editor）のコードウィンドウで、ステップ実行中の画面。対象はExcelのVBEウィンドウ（Alt+F11で開く）。サンプルコード（Sub SampleStep() など適当な5〜6行のプロシージャ）を用意し、F8キーで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"><!-- screenshot: 02_ui_vbe-immediate-window.png | VBEのイミディエイトウィンドウ（下部パネル）が開いた状態の画面。Ctrl+Gで開いたイミディエイトウィンドウに「? Range("A1").Value」と入力し、その下の行に結果値（例: 100 など数値）が表示されている状態を撮影。上部コードウィンドウも見え、イミディエイトウィンドウとの分割表示になっていること。イミディエイトウィンドウのタイトルバー「Immediate」が確認できる範囲で撮影。 --></p>



<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"><!-- screenshot: 03_ui_vbe-breakpoint.png | VBEのコードウィンドウで、ブレークポイントが設定された状態の画面。F9キーを押してブレークポイントを設定した行（コード左端のグレー帯に赤い丸が表示）を撮影。ブレークポイントが設定された行は赤い背景色でハイライトされる。コード全体が5〜8行程度の短いSubプロシージャを使用し、中央の1行にブレークポイントが付いている状態を表示。コード左の赤い丸（ブレークポイントマーカー）が明確に見えるよう、左マージンも含めて撮影範囲に収めること。 --></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>
