Excel VBA の実行時エラー辞典
実行時エラー '6':オーバーフローしました
変数だけでなく、計算途中の数値や型変換が扱える範囲を超えていないか確認します。
よくある原因
- 行番号を Integer に入れ、32,767 を超えています。
- 代入先は Long でも、掛け算の途中で Integer の上限を超えています。
- セルの数値を CInt などで小さい型へ変換しています。
直し方
- 停止した式の数値と、変数の宣言を確認します。
- 行番号には Long を使い、小数を扱う計算なら用途に合う型を選びます。
- 計算途中であふれる場合は、掛け算の前に CLng や CDbl で型を変えます。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
代入先だけを Long にしても直らない計算の例です。Long にも上限があるため、実データの最大値を確認してください。
修正前
Dim total As Long
total = 300 * 200
Debug.Print total
修正後
Dim total As Long
total = CLng(300) * 200
Debug.Print total
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 数値を変換する行と掛け算の行を分けると、どこで上限を超えたか調べやすくなります。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? TypeName(total)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。