VBA技術解説
よくあるVBA実行時エラーの解説と対応

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2016-07-02 最終更新日:2020-07-13

よくあるVBA実行時エラーの解説と対応


VBAを書き終えて、いざ実行したら意味不明なメッセージが・・・
ここでは初心者向けに、代表的な実行時エラーの解説とその対応について説明します。


中級者以上の方は、
実行時にトラップ可能なエラー番号一覧と対処
・マクロVBAでのエラーとは ・VBA実行時のエラー番号一覧 ・実行時にトラップ可能なエラー番号一覧の最後に
こちらを参考に、エラー対応(On Error等)を実装してください。

データ型のエラー

型が一致しません。:実行時エラー13

型が一致しません。:実行時エラー13

データの型に対し、違うデータ型を入れてしまった場合です。

Dim i As Long
i = "A"

単純は例としては、このような状況です。
Longに対し文字列を入れているのでエラーとなります。
違うデータ型であっても、自動変換可能なものはエラーとならず、データ変換されます。
i = 1.2
であれば、iには1が入ります。
もう少し複雑なコードの時に、どこがエラーなのかが直ぐには分からない場合があります。

Dim i As Long
For i = 1 To 10
  Cells(i, 3) = Cells(i, Cells(i, 1)) / Cells(i, 2)
Next

もし、こんなコードで、型が一致しませんとなったら、どこが悪いのかは直ぐには分からないでしょう。
A列、B列に数値以外が入っていても発生しますし、A列の数値が5なら、E列が文字でもこのエラーになります。
エラーで止まった時点で、iの値を確認し、
当該行のデータを確認するか、イミディエイトウィンドウで、一つづつ確認するしかありません。
イミディエイトで値の確認
前回、FormulaR1C1とValueの違いを説明しましたが、それを確認するための方法を紹介します。これはデバックで使用するツールになります。デバッグとは、プログラムの誤り(バグと呼ばれる)を探し、取り除くこと。

計算時のエラー

オーバーフローしました。:実行時エラー6

オーバーフローしました。:実行時エラー6

0 で除算しました。:実行時エラー11

0 で除算しました。:実行時エラー11

純粋にオーバーフローすることは稀でしょう。
Longに30億とか入れればオーバーフローしますが、実務的にはあまり無いと思います。
※Longは、-2,147,483,648 ~ 2,147,483,647
むしろ、0÷0の時に、このオーバーフローになります。

Dim i As Long
For i = 1 To 10
  Cells(i, 3) = Cells(i, 1) / Cells(i, 2)
Next

このような場合に、
分子分母ともに0の時は、オーバーフロー
分母のみ0の時は、0除算となります。

インデックスのエラー

インデックスが有効範囲にありません。:実行時エラー9

インデックスが有効範囲にありません。:実行時エラー9

メッセージの内容としては、存在しない配列要素を参照してるという事ですが、
配列を使っている場合は勿論発生しますし、配列を使う人は承知しているはずです。
むしろ、配列など知らない・使っていないのに・・・
そのような場合に、何が悪いのか悩んでいることが多いように感じます。
このような場合の多くは、シート名が間違っているだけの事が多いです。

Worksheets("Sheet1").Select

Sheet1が存在しなければ、インデックスのエラーとなります。

オブジェクトの設定エラー

オブジェクト変数または With ブロック変数が設定されていません。:実行時エラー91

オブジェクト変数または With ブロック変数が設定されていません。:実行時エラー91

Dim ws As Worksheet
With ws
  .Cells(1, 1) = 1
End With

Dim ws As Worksheet
ws.Cells(1, 1) = 1

単純な例としては、このようなものになります。
オブジェクト変数に何も割り当てられていないことによるエラーです。
この場合は、エラー停止した行のオブジェクト変数の中身を確認します。
上記のVBAであれば、wsに何も設定していない為にエラーとなっています。

メソッド・プロパティのエラー

メソッドまたはデータ メンバが見つかりません。:コンパイル エラー

メソッドまたはデータ メンバが見つかりません。:コンパイル エラー

オブジェクトは、このプロパティまたはメソッドをサポートしていません。:実行時エラー438

オブジェクトは、このプロパティまたはメソッドをサポートしていません。:実行時エラー438

どちらも同じような意味のメッセージになります。
前者は、記述としてはメソッドになります。
後者は、メソッド・プロパティどちらでも発生しうるエラーです。

Dim ws As Worksheet
Set ws = ActiveSheet
ws.Calculata

Cells(1, 1).Font.Siza = 14

どちらにしても、単純にスペルミスという事ですので、しっかりと確認すればわかるはずです。
そもそも、入力候補が出るように記述を進めることが肝心です。
インテリセンス(入力支援、入力候補)から選択するようにすれば、このエラーはほとんど出なくなるはずです。

Cellsではインテリセンスが効きません。
入力するプロパティのスペルに自信が無ければ、
Cellsだけ、もしくはCells()と引数を省略して、.を入力すれば、

VBA マクロ エラー対処

このように、インテリセンスが効くようになります。
ただし、後から引数を入れ忘れないようにしてください。

引数のエラー

名前付き引数が見つかりません。コンパイル エラー

名前付き引数が見つかりません。コンパイル エラー

引数は省略できません。コンパイル エラー

引数は省略できません。コンパイル エラー

引数の数が一致していません。または不正なプロパティを指定しています。コンパイル エラー

引数の数が一致していません。または不正なプロパティを指定しています。コンパイル エラー

少々極端な例になりますが、

MsgBox Prompy:="タイトル"

PromptがPrompyになっています。

MsgBox

省略できない必須の引数が指定されていません。

MsgBox 1, 2, 3, 4, 5, 6

MsgBoxの引数は全部で5つです。

MsgBoxは関数ですが、メソッドでも同じです。
関数・メソッドでは、インテリセンス(入力支援、入力候補)が出るので、しっかりと見ながら入力してください。
表示されているものをよく見ながら入力すれば、このような事にはなることは避けることができます。

VBA マクロ エラー対応

実行時エラー関連記事

第60回.エラー処理(On Error)
・マクロVBAのエラー発生例 ・エラー処理のステートメント ・実行時エラー関連記事
第61回.「On Error GoTo」と「Exit Sub」
・On Error GoTo 行ラベル ・Exit Sub ・On Error の有効範囲とその動作について ・最後に
第62回.「On Error Resume Next」とErrオブジェクト
・On Error Resume Next ・Errオブジェクト ・On Error Resume Next の使用例 ・「On Error Resume Next」の最後に
第134回.Errオブジェクトとユーザー定義エラー
・Errオブジェクト ・Errオブジェクトのエラー情報が解除されるのは ・Err.Raiseメソッド ・Errorステートメント ・Error関数 ・CVErr関数 ・エラー番号およびエラーメッセージ ・実行時エラー関連記事
実行時にトラップ可能なエラー番号一覧と対処
・マクロVBAでのエラーとは ・VBA実行時のエラー番号一覧 ・実行時にトラップ可能なエラー番号一覧の最後に



同じテーマ「マクロVBA技術解説」の記事

フォルダー・ファイル・ブック・シートの文字制限
Excel2013におけるScreenUpdatingの問題点
Dir関数の制限について
よくあるVBA実行時エラーの解説と対応
Application.Goto使用時の注意
ScreenUpdating=False時にエラー停止後にシートが固まったら
標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる
VBAでエラー行位置(行番号)を取得できるErl関数
WorksheetFunction.Matchで配列を指定した場合の制限について
VBAでシート関数使用時の配列要素数制限


新着記事NEW ・・・新着記事一覧を見る

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ