エラー内容
エラー94(Nullの使い方が不正です)は、Null値がプログラム中に発生しているのに、結果的に無視していることを指します。
構文エラーのためコードの修正が必要です。
エラー原因
エラー94は、関数の戻り値などでNull値が発生しているのに、それを変数に格納できない場合に発生します。
Nullが格納できる変数はVariant型に限られますので、String型やInteger型などの変数にNullを代入しようとするとエラー94になります。
そのため、対応方法は以下のいずれかになります。
- Nullを格納する変数をVariant型にする。または型を省略して暗黙のVariant型にする。
- Nullの場合は変数に代入しないようにする。
- Nullを発生させる原因を特定し、Nullが発生しないようにする。
どの対応がよいのかは、Null値を必要とするかどうかやNullの発生原因に手を入れることができるかによって変わります。根本原因であるNullの発生を止めることが出来ればエラー処理は不要になりますが、なかなかそうもいかないことが多いと思います。
以下はエラー94が発生するコードです。
1 2 3 4 5 |
Sub Err94Test() Dim s As String s = Null End Sub |
エラーの対応方法
上に挙げた3つの対応方法について、それぞれコードで紹介します。
1. Nullを格納する変数をVariant型にする方法
1 2 3 4 5 6 |
Sub Err94Test1() Dim s As Variant 'Dim s s = Null End Sub |
このように、Nullを代入する変数の型をVariant型にするとエラーは発生しなくなります。
なお、2行目のように「As Variant」と書いてもいいですし、3行目のように型を書かずに暗黙のVarinat型扱いにしてもいいです。
2. Nullの場合は変数に代入しないようにする方法
1 2 3 4 5 6 7 8 9 10 |
Sub Err94Test2() Dim s As String Dim n As Variant n = Null If (IsNull(n) = False) Then s = n End If End Sub |
値を変数に代入する前に、IsNull関数でその値がNullかどうかをチェックします。
Nullでない場合のみ代入するようにするとエラーは発生しなくなります。
3. Nullが発生しないようにする
Nullが発生する条件は大きく2つです。
1つは実行中にExcelブックとは別のテキストデータやデータベースなどの外部データを利用していて値が取得できなかった際に発生します。この場合にNullが発生しないようにするのは外部データの設計を変更しなければならないことが考えられるため難しいかもしれません。
もう1つは範囲選択したセルの書式設定をまとめて取得した場合など、値が1つに限定されない場合です。この場合はセルの書式設定を見直すことでNullが発生することを回避できる場合があります。
前者の外部データについてはパターンが多いため省略します。後者のセルの書式設定の見直しについて説明します。
セルの書式設定の表示形式で、A1セルには数値の”0_ “、A2セルにはパーセンテージの”0%”を設定します。ここがエラーの根本原因になります。
そして、2つのセルの表示形式をまとめて取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub Err94DiffSetting() Dim n '// A1とA2セルで異なる表示形式に設定する Range("A1").NumberFormat = "0_ " Range("A2").NumberFormat = "0%" '// 異なる表示形式のセル範囲の表示形式を取得するとNullが返却される n = Range("A1:A2").NumberFormat If (IsNull(n) = True) Then MsgBox "Nullです" Else MsgBox "Nullではありません" End If End Sub |
そうすると、2つのセルの表示形式が一致しないためNumberFormatプロパティはNullを返します。
ここでNullを発生させないようにするには、根本原因である5行目と6行目で表示形式を同じ設定に統一することで対応することができます。