Excel VBA の実行時エラー辞典
実行時エラー '5':プロシージャ呼び出しが正しくありません
文字の切り出し位置や長さなど、関数へ渡した値が許容範囲内か確認します。
よくある原因
- Mid の開始位置に 0 を渡しています。
- 区切り文字がないのに InStr の結果から 1 を引き、Left の長さが負になっています。
- Windows 向けの処理を Mac で呼ぶなど、実行環境に合わない呼び出しがあります。
直し方
- 停止した関数の引数を、一つずつイミディエイトで表示します。
- 区切り文字が見つからない場合の処理を先に分け、負の長さを渡さないようにします。
- OS 固有の処理なら、その関数の対応環境を確認して分岐を設けます。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
区切り文字がなければ元の文字列を使う、という仕様の例です。
修正前
Dim text As String, pos As Long
text = "商品A"
pos = InStr(text, "-")
Debug.Print Left(text, pos - 1)
修正後
Dim text As String, pos As Long
text = "商品A"
pos = InStr(text, "-")
If pos > 0 Then
Debug.Print Left(text, pos - 1)
Else
Debug.Print text
End If
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 停止した関数の直前で、開始位置・文字数・検索結果を調べます。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? pos, Len(text)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。