VBAを実行するとVBA エラー 94「Null の使い方が不正です。」を見る機会はありませんか?
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA エラー 94「Null の使い方が不正です。」の対処はどうすればよい?
ではないでしょうか?
今回は、
についてまとめます!
もくじ
VBA エラー 94「Null の使い方が不正です。」はどんなエラー?
VBA エラー 94「Null の使い方が不正です。」は、参照元データのデータベースにおいて空(Null)の値をVBAなどで読み込んで、変数に代入するときにNull値があり、その値を文字列に変換できないため発生するエラーです。
VBA エラー 94の原因①「データベース読込の戻り値などでNull値があり変数に格納できない場合に発生」
VBA エラー 94「Nullの使い方が不正です。」は、上記の通りAccesssなどのデータベースにおいて空(Null)の値をVBAなどで読み込んで、変数に代入するときに、Nullを文字列に変換できないため発生するエラーとなります。
VBAプロシージャでNull値を扱う場合は変数の型はVariant型に限られます。
ところが、文字列のString型や数値のInteger型で宣言している場合は型が合いませんのでエラーになるというわけです。
以下、サンプルコードです。
Sub エラーテスト1()
Dim intNull As Integer
intNull = Null
End Sub
はい、でましたね。
VBA エラー 94の原因①「データベース読込の戻り値などでNull値があり変数に格納できない場合に発生」の対処方法はNull値を回避する
VBA エラー 94の原因①「データベース読込の戻り値などでNull値があり変数に格納できない場合に発生」の対処方法はNull値を回避する処理を加えるようにします。
Null値が入る可能性がある変数をすべてバリアント(Variant)型にする
一番簡単な方法はNull値が入る可能性がある変数をすべてバリアント(Variant)型にしてしまうことです。
バリアント型は整数や文字列、オブジェクトなどなんでもOKの万能な型ですが、
しっかり変数の型を決めたい方はちょっと…
と思う方もいらっしゃるでしょう。
Sub エラーテスト1aR()
Dim intNull As Variant
intNull = Null
End Sub
IsNull関数を使用して、変数にNullが含まれるかチェックし含まれる場合は値を変換する
IsNull関数を使用して、変数にNullが含まれるかチェックし含まれる場合は値を変換をします。
以下サンプルコードです。
Null値を含む一次受けの変数tempはバリアント型にし、Null値判定をし、Null値であれば0、それ以外であればそのまま代入します。
Sub エラーテスト1bR()
Dim intNull As Integer
Dim temp As Variant
temp = Null
If IsNull(temp) Then
intNull = 0
Else
intNull = temp
End If
End Sub
AccessのIIF関数、ISNULL関数を使ってNullを0か””にする
上記のISNULL関数を使う方法と同じですが、そもそもSQLでデータベースの情報を参照する時点で変換をするという、上流でやっつけてしまう方法です。
Select文などで、
IIF(ISNULL(<フィールド名>), 0, <フィールド名>)
IIF(ISNULL(<フィールド名>), “”, <フィールド名>)
とかにすればOKです。
あとは、外部データそのものにNullがあったら0か””を代入してしまう方法がありますが、
Excelの仕様のために外部データそのものを加工するのはデータ不整合や他の処理でのバグを誘発する可能性がありますので、あまりおすすめはしません。
さいごに
今回は、
についてまとめました。
スムーズに対応できるし、未然にエラーが防げるからです。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す