Excel VBA の実行時エラー辞典
実行時エラー '94':Null の使い方が正しくありません
データベースなどから受け取った Null を、文字列や数値へ直接変換していないか確認します。
よくある原因
- データベースの未入力項目を CStr や CLng で変換しています。
- Null を含む値を String 型や数値型へ直接代入しています。
- 値がないことを = Null で比較し、Null を除外できていません。
直し方
- 値を Variant で受け取り、IsNull で状態を調べます。
- 未入力を空文字・案内・処理終了のどれにするか、データの用途に合わせて決めます。
- If で分岐してから変換します。IIf は変換する側も評価するため、Null の変換回避には使いません。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
Null は、空のセルの Empty や空文字とは異なります。通常の空セルをすべて Null とみなさないでください。
修正前
Dim value As Variant, label As String
value = Null
label = CStr(value)
修正後
Dim value As Variant, label As String
value = Null
If IsNull(value) Then
label = "未入力"
Else
label = CStr(value)
End If
Debug.Print label
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 外部データを受け取った直後で値を調べます。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? IsNull(value), TypeName(value)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。