Excel VBAの「IsNull 関数」について解説します。
IsNull 関数とは
Excel VBA の IsNull 関数は、引数の値に無効なデータ (Null) が含まれていないかどうかを判定し結果をブール型 (Boolean) の値で返します。
IsNull 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
IsNull 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
IsNull(expression)
引数
引数 | 説明 |
---|---|
expression | 【必須】判定したい数値式または文字列式を含む バリアント型 (Variant) の値を指定します |
戻り値
戻り値 | 説明 |
---|---|
ブール値 (Boolean) | 引数がNull値の場合 True を返し それ以外の場合 False を返します |
解説(使用例)
Null値とはバリアント型の変数にだけ格納できる特殊な値です。バリアント型変数内に有効な値が入っていないことを表しています。Null値は、バリアント型変数の未初期化状態を表すEmpty値や、長さ0の空文字列(“”)いわゆるNull文字とは異なります。
以下、IsNull 関数の使用例です。
IsNull関数サンプル1 (基本的な使用例)
バリアント型変数にNull値が格納されているかどうかを IsNull 関数で調べます。
'■IsNull関数サンプル1 (基本的な使用例)
Sub IsNull_Sample01()
Dim v As Variant
'▼初期化前のVariantはEmptyです
Debug.Print IsNull(v) 'False
'▼Nullを代入したVariantはNullです
v = Null
Debug.Print IsNull(v) 'True
'▼空白文字はNullではありません
v = ""
Debug.Print IsNull(v) 'False
'▼配列内にNullがある例です
v = Array(0, Null, "Null")
Debug.Print IsNull(v) '配列そのものは False
Debug.Print IsNull(v(0)) '配列内の0値 False
Debug.Print IsNull(v(1)) '配列内のNull True
Debug.Print IsNull(v(2)) '文字列"Null" False
'▼Nullを含む演算はすべてNullを返す
v = 1 + Null
Debug.Print IsNull(v) 'True
Debug.Print 1 = 1 '正ならTrue、誤ならFalse
Debug.Print v = Null '正だけど Null です
Debug.Print v <> Null '誤だけど Null です
End Sub
コードを実行時に表示されたイミディエイト画像です。
・5行目、未初期化状態のVariant変数は Empty なので IsNull(Empty) は False を返します。
・14行目、13行目で代入した(要素が3つの)配列については、要素の一つに Null がありますが False が返りました。
・16行目、配列2番目の要素は Null なので、IsNull は True を返しました。
・17行目、配列3番目の要素は文字列の ”Null” ですが、IsNull は False を返しました。
・20行目は、1 + Null
の演算結果です。IsNull は True を返しました。
21行目以降は、Debug.Print に演算の判定結果を表示させています。通常は演算が正しければ True 誤っていたら False を返します。22行目と23行目の場合は演算に Null が含まれているのでどちらも Null が表示されました。
これは、Null を含む式自体が Null であり演算はすべて Null になること表しています。
IsNull関数サンプル2 (計算式のNullチェック例)
Null値とはバリアント型の変数にだけ格納できるので、演算結果を数値型の変数で受け取る場合は実行時エラーとなり、処理が中断してしまいます。IsNull 関数で演算前にNull値をチェックする簡単な例です。
'■IsNull関数サンプル2 (計算式のNullチェック例)
Sub IsNull_Sample02()
Dim a, b, c 'As Variant
Dim d As Double
a = 10
b = Null 'Null値を設定
' If IsNull(b) Then MsgBox "変数 b は Null です!": Exit Sub
c = 3
If IsNull(a + b + c) Then
MsgBox "Null値があるので計算できません!"
Else
d = (a + b) / c
MsgBox "計算結果: " & d
End If
End Sub
実行時に表示された MsgBox です。
・11行目の IsNull(a + b + c)
は、全部の変数を加算する式内に Null があれば 結果は Null になります。
・14行目の計算式でエラーが発生しないように変数をまとめてチェックしています。ただし、この方法では度の変数が Null なのかわかりません。
・8行目にブラックにしている If IsNull(b) Then MsgBox "変数 b は Null です!": Exit Sub
のように各変数毎に設定すれば、どの変数が Null なのかがわかります。
Null値をバリアント以外の変数に代入しようとした場合、次のような実行時エラーのメッセージが表示されコードが中断されます。
そうならないように IsNull 関数で対策を講じておく必要があるというわけです。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA IsNull 関数は、引数の値がNull値であるときTrueを返し、それ以外は False を返します。
Null値は Variant 特有の値であり、有効な値が含まれていないことを示します。
IsNull 関数で判定した Null は、記事内の例ではエラーを回避するだけでしたが、Null を指定した数値や文字列に置換することでエラーの発生を防ぐなどの方法もあります。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;