Excel VBA の実行時エラー辞典
実行時エラー '92':For ループが初期化されていません
GoTo などで For の行を通らずに、For...Next の途中へ移動していないか確認します。
よくある原因
- ループの外から GoTo で、For...Next の内側にあるラベルへ移動しています。
- 行を飛ばすためのラベルを Next の直前に置き、ループが始まる前にそのラベルへ移動しています。
- 長いプロシージャで、ループ内のラベルへ移動する GoTo が離れた場所にあり、ループの外からの移動に気づいていません。
直し方
- 停止した行と、ループ内のラベルへ移動している GoTo を検索します。
- ループの途中へ入る移動を削除します。最初からやり直す場合は、For の行より前(ループの外)へ移動するようにします。
- 一部の行や回を飛ばしたい場合は、開始値を変えるか、ループ内の If で分けます。
- For...Next の内側にはラベルを置かない書き方にそろえます。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
最初のシートの A1 が「見出し」なら 2 行目から読む例です。ループの途中へ移動する代わりに、開始行を変えています。
修正前
Dim i As Long, firstRow As Long
firstRow = 1
If ThisWorkbook.Worksheets(1).Range("A1").Value2 = "見出し" Then GoTo NextRow
For i = firstRow To 10
Debug.Print ThisWorkbook.Worksheets(1).Cells(i, 1).Value2
NextRow:
Next i
修正後
Dim i As Long, firstRow As Long
firstRow = 1
If ThisWorkbook.Worksheets(1).Range("A1").Value2 = "見出し" Then firstRow = 2
For i = firstRow To 10
Debug.Print ThisWorkbook.Worksheets(1).Cells(i, 1).Value2
Next i
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- GoTo の行にブレークポイントを置き、F8 で進めて移動先へ入る前に For の行を通るか確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? i, firstRow
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '3':Return に対応する GoSub がありません
- 実行時エラー '10':この配列は固定されているか、または一時的にロックされています
- 実行時エラー '20':エラーが発生していないときに Resume を実行することはできません