※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

VBA|IsNull関数は指定した値にNullがふくまれるかを判定する

エクセルVBAのIsNull関数のトップ画像

IsNull関数について

VBAIsNull関数は、指定した値や変数がNull(ヌル)であるかを確認する関数です。

これまでに紹介したIsNumeric関数やIsDate関数といった数値や日付を判定するものと比べ、Excelだけに限って言えば、VBAマクロを使用する場面でも、変数やオブジェクトがNullとなる場面は一般的にはほとんどありません。

その理由としては、Excelのセルやワークシート内のデータは通常、空白やゼロなどの値が初期値とされているためNullになる場面がめずらしいからです。

従って、Nullを判定するIsNull関数も、Excelの一般的な作業で登場する機会は稀なものだと言えます。しかし、使う頻度はすくないものの存在はしているので、VBAにはこのような関数があるといった感覚で知っておいてもらえたら幸いです。

IsNull関数の判定結果はほかのIs〇〇関数と同じく、真偽値(Boolean)となるため、TrueまたはFalseで返します。

PR

独学でプログラミングをはじめてみたけど、このままの学習方法に不安を感じているのなら、
オンラインスクールで現役エンジニアのサポートがあるテックアカデミーがおすすめ。
スキマ時間に学べて仕事も保証。必ず副業、始められます。まずは無料でプログラミング体験

Null値について

IsNull関数について検索している時点で、この記事を読まれている人はNull値がどういったものかはなんとなくは知っている人であることが多いと推察されますが、プログラミングに精通していない人にとっては、そもそもNullって何なの?ということになるでしょう。

Nullは変数が値を持たないことを示す特別な値です。Nullは何もないことを意味し、空の文字列(””)、数値の0、または未定義の変数(Empty)とは異なるものです。

さきほどもお伝えしたとおり、エクセルではセルやデータの初期値があり、変数を宣言するときのデータ型によって初期値が代入されるため、意図的にNull値を代入しない限りはNull値となることはありません。

※データベースやActiveX Data Objectsなどの特定の状況では、Null値が使用されることがあります。

Nullは0や、空白、Emptyともちがうものなんだね。

VBAにすこしなれてきたステップアップにおすすめです♪

IsNull関数の使いかた

IsNull関数の構文と戻り値について紹介します。

IsNull関数の構文

IsNull(変数)

※値または変数(expression)の指定は必須のため、省略した場合はエラーが発生します。

IsNull関数の判定結果について

IsNull関数の結果は真偽値(Boolean)となるため、TrueまたはFalseが返ります。

指定した変数にNullが含まれる場合はTrue、それ以外と判定された場合はFalseが返ってきます。なお、引数に指定した変数が複数で構成されており、その内にNullが含まれるときはTrueの結果を返します。

IsNull関数をつかったサンプルマクロ

ここではIsNull関数をつかったマクロを紹介します。

IsNull関数で指定した変数にNullが含まれるかを確認する

  
Option Explicit

Sub IsNull_macro1()
    
    'バリアント型の変数
    Dim Var As Variant
    Debug.Print IsNull(Var) 'False
    
    '変数VarにNullを代入する
    Var = Null
    Debug.Print IsNull(Var) 'True

End Sub

06行目

変数Varを宣言します。

07行目

IsNull関数をつかって変数VarにNullが含まれるかを判定し、TrueまたはFalseを返します。

10行目

変数VarにNullを代入します。
(※Nullは文字列ではないので、ダブルクォーテーション(“)つけません。)

11行目

IsNull関数をつかって変数VarにNullが含まれるかを判定し、TrueまたはFalseを返します。

False
True

7行目の判定ではFalseになり、11行目の判定ではTrueが返ってきます。

IsNull関数は指定した変数がNullならTrueが返ってくるよ。

つづいて、各種データ型の変数を宣言して、IsNull関数でNullが含まれるかを確認してみます。

  
Option Explicit

Sub IsNull_macro2()

    Dim Var1 As Integer
    Dim Var2 As Double
    Dim Var3 As String
    Dim Var4 As Boolean
    Dim Var5 As Date
    Dim Var6 As Object
    Dim Var7 As Variant
    Dim Var8 'データ型の指定をしないとVariant型となる
    Dim Var9()
    Dim Var10(1 To 3)
    Dim Var11 As Variant
    Set Var11 = Nothing
    Dim Var12 As Variant: Var12 = ThisWorkbook.Sheets("Sheet1").Cells(1, 1)


    'くり返し処理用にコレクションを宣言する
    Dim Var_Collection As collection
    Set Var_Collection = New collection
    
    Var_Collection.Add Item:=Var1  '数値
    Var_Collection.Add Item:=Var2  '小数値
    Var_Collection.Add Item:=Var3  '文字列値
    Var_Collection.Add Item:=Var4  '真偽値
    Var_Collection.Add Item:=Var5  '日付値
    Var_Collection.Add Item:=Var6  'オブジェクト変数
    Var_Collection.Add Item:=Var7  'バリアント変数(データ型明記)
    Var_Collection.Add Item:=Var8  'バリアント変数(データ型なし)
    Var_Collection.Add Item:=Var9  'バリアント配列(動的)
    Var_Collection.Add Item:=Var10  'バリアント配列(静的)
    Var_Collection.Add Item:=Var11  'バリアント変数(Nothing)
    Var_Collection.Add Item:=Var12  'バリアント変数(シート1のA1セル)
    
     'くり返し処理用の変数を宣言する
    Dim X As Variant
    Dim i As Long: i = 1
    
    For Each X In Var_Collection
        Debug.Print i & " コめの変数は " & IsNull(X)
        i = i + 1
    Next X
    
End Sub

05行目から17行目

各種データ型で変数を宣言しています。

21行目と22行目

宣言した各種データ型の変数でくり返し処理をしたいので、コレクションオブジェクトであるVar_Collectionを宣言しています。

24行目と35行目

宣言した各種データ型の変数でくり返し処理をしたいので、コレクションオブジェクトVar_CollectionAddメソッドをつかって、各種データ型の変数をコレクションに追加していきます。

41行目から44行目

コレクションオブジェクトに追加した変数に対して処理をするため、ForEachステートメントでくり返しを指定しています。IsNull関数で各種変数を判定して結果を表示します。

変数をまとめるために利用しているコレクションや、くり返しに利用しているForEachステートメントについては、以前の記事で紹介しており、解説文の中にあるリンクから該当の記事を読むことができます。詳しい内容につきましてはそちらを参考にしてください。

No 判定する変数名 説明 判定結果
(True or False)
1 Var1 Dim Var1 As Integerで宣言した変数 False
2 Var2 Dim Var2 As Doubleで宣言した変数 False
3 Var3 Dim Var3 As Stringで宣言した変数 False
4 Var4 Dim Var4 As Booleanで宣言した変数 False
5 Var5 Dim Var5 As Dateで宣言した変数 False
6 Var6 Dim Var6 As Objectで宣言した変数 False
7 Var7 Dim Var7 As Variantで宣言した変数 False
8 Var8 Dim Var8で宣言した変数 False
9 Var9 Dim Var9()で宣言した変数 False
10 Var10 Dim Var10(1 To 3)で宣言した変数 False
11 Var11 Dim Var11 As Variantで宣言した変数
Set Var11 = Nothing
※Nothingが代入されている
False
Nullが含まれているものはTrue、そうでないものがFalseと判定されます。

変数を宣言した時点での初期値にNullとなっているものはないね。

このマクロを実行したあとで宣言した変数の初期値をVBEのローカルウィンドウの状態

各種データ型の変数を宣言した時点での初期値が、Nullでないことは上のVBEのローカルウィンドウによりわかります。なお、変数名「Var11」と「Var12」については他の変数とは異なり、宣言直後にNothingや、シート1のセルA1を代入(参照)しています。

判定する変数名 宣言したデータ型 初期値 備考
Var1 Integer
(整数型)
0
Var2 Double
(小数型)
0
Var3 String
(文字列型)
“”
(空文字)
Var4 Boolean
(真偽型)
False
Var5 Date
(日付型)
#0:00:00#
Var6 Object
(オブジェクト型)
Nothing
Var7 Variant
(バリアント型)
Empty値
Var8 指定なし
(指定しない場合はバリアント型)
Empty値
Var9() 指定なし
(バリアント型の動的配列)
Empty値
Var10(1 To 3) 指定なし
(バリアント型の静的配列)
Empty値
Var11 指定なし
(バリアント型の静的配列)
Nothing Set Var11 = Nothing
※上記コードによりNothingを代入
Var12 指定なし
(バリアント型の静的配列)
Empty値 Var12 = ThisWorkbook.Sheets(“Sheet1”).Cells(1, 1)
※上記コードによりシート1のセルA1を参照
※初期値は宣言した時点でのローカルウィンドウの値

PR

残業はしたくない!PCやExcelのスキルアップであなたのプライベート時間を奪わせない!
実務をプロから学べる「ユースフル」の動画は永年見放題。Q&A機能で分からないを放置しないから安心。


詳しくは以下のリンクをクリック

If文でNullを判定する式とは異なる結果となる

If文をつかった式ではIsNull関数と結果が異なりますので、変数にNullが含まれていること判定するためには、IsNull関数を利用してください。たとえば以下のようなマクロでは常にFalseがかえってきます。

  
Option Explicit

'If文をつかった判定式を実行するマクロ
Sub IsNull_macroA()

    Dim Judgement
    Judgement = Null 'Nullを代入
    
    'IF文による判定式(常にFalseがかえってくる)
    If Judgement = Null Then
        Debug.Print "Nullです。"
    Else
        Debug.Print "Nullではありません。"
    End If
    
End Sub

このマクロの結果でIf文での分岐にかならずFalseとなるため、「Nullではありません。」がかえってきます。

これはNullの性質によるものであり、Nullを含む式はすべてNullとなります。
何もないものを比較することができないため、すべての結果はFalseでかえってきます。

マイクロソフトのサポートにも以下のような記載があります。

すこし禅問答のような感覚になりますが、変数の値がNullであるかの判定では、サンプルマクロのような方法ではなく、IsNull関数を利用するとおぼえておきましょう。

それでは、サンプルマクロをIsNull関数をつかった判定式に書きかえてみます。

このマクロをIsNull関数をつかった判定式に書きかえてみるよ。

  
Option Explicit

'If文をつかった判定式を実行するマクロ
Sub IsNull_macroB()

    Dim Judgement
    Judgement = Null
    
    'IsNullによる判定式
    If IsNull(Judgement) Then
        Debug.Print "Nullです。"
    Else
        Debug.Print "Nullではありません。"
    End If
    
End Sub

こちらのIsNull関数をつかったコードだと、Trueの分岐になるよ。

IsNull関数のような値や変数を判定する関数はほかにもある

VBAには数値以外にも値や変数を判定する関数があります。関数名をクリックするとそちらの記事にジャンプします。

IsArray関数

 値や変数が配列であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

IsNumeric関数

 値や変数が数値であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

IsDate関数

 値や変数が日付であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

IsEmpty関数

 値や変数が初期値であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

IsError関数

 値や変数がエラーであるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

IsObject関数

 値や変数がオブジェクトかどうかを判定し、TrueまたはFalseの真偽値(Boolean)を返す

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました