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

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

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


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


中級者以上の方は、
実行時にトラップ可能なエラー番号一覧と対処
VBA実行時に発生するエラーのうち以下の表にあるエラーはトラップ(捕捉)できるエラーになります。OnErrorステートメントおよびErrオブジェクトのNumberロパティを使用してエラーへの対処を行うことができます。VBAでのエラーとは Subsample() DimiAsLong OnErrorResumeNext i=_A_ IfErr.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時にエラー停止後にシートが固まったら
標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる


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

Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)
IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)


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

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



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

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


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




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