Excel VBA の実行時エラー辞典
実行時エラー '424':オブジェクトが必要です
セルの値やシート名の文字列を、Range や Worksheet 自体と取り違えていないか確認します。
よくある原因
- Set を省き、Variant にセルの値だけを入れてからオブジェクトとして使っています。
- シート名の文字列に対して Range などを呼んでいます。
- 変数名の打ち間違いで、空の Variant をオブジェクトとして扱っています。
直し方
- 停止行でドットの左側にある変数の TypeName を確認します。
- 値を使うのかオブジェクトを使うのか決め、オブジェクトなら Set で代入します。
- Option Explicit を使い、未宣言の変数名をコンパイル時に確認できるようにします。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
修正前はセルの中身、修正後はセルそのものを変数に入れています。
修正前
Dim cell As Variant
cell = ThisWorkbook.Worksheets(1).Range("A1").Value2
Debug.Print cell.Address
修正後
Dim cell As Range
Set cell = ThisWorkbook.Worksheets(1).Range("A1")
Debug.Print cell.Address
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 代入直後に IsObject を確認します。Nothing の判定はオブジェクト変数に対して行います。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? TypeName(cell), IsObject(cell)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '13':型が一致しません
- 実行時エラー '91':オブジェクト変数または With ブロック変数が設定されていません
- 実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません