Excel VBA の実行時エラー辞典

実行時エラー '92':For ループが初期化されていません

GoTo などで For の行を通らずに、For...Next の途中へ移動していないか確認します。

よくある原因

直し方

  1. 停止した行と、ループ内のラベルへ移動している GoTo を検索します。
  2. ループの途中へ入る移動を削除します。最初からやり直す場合は、For の行より前(ループの外)へ移動するようにします。
  3. 一部の行や回を飛ばしたい場合は、開始値を変えるか、ループ内の If で分けます。
  4. 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

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. GoTo の行にブレークポイントを置き、F8 で進めて移動先へ入る前に For の行を通るか確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? i, firstRow

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料