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

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2019-07-16

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


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


中級者以上の方は、
実行時にトラップ可能なエラー番号一覧と対処
マクロVBA実行時に発生するエラーのエラー番号とエラーメッセージおよび簡単な理由と対策の一覧です。以下の表にあるエラーはトラップ(捕捉)できるエラー一覧になります。OnErrorステートメントおよびErrオブジェクトのNumberロパティを使用して、エラーへの対処を行うことができます。
こちらを参考に、エラー対応(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 マクロ エラー対応



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

入力規則のドロップダウンが消えてしまうマクロ(Shapes内のDrop Down)
実行時にトラップ可能なエラー番号一覧
フォルダー・ファイル(ブック)・シートの文字制限
Excel2013におけるScreenUpdatingの問題点
Dir関数の制限について
よくあるVBA実行時エラーの解説と対応
Application.Goto使用時の注意
ScreenUpdating=False時にエラー停止後にシートが固まったら
標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる
VBAでエラー行位置(行番号)を取得できるErl関数


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

VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)
VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(10月14日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



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

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


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




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