VBA の IsEmpty 関数のパラメータの型は Variant です。その他の型の変数を与えてもすべて False がリターンされます。
スポンサーリンク
IsEmpty 関数が扱う型は Variant 型のみ
変数が初期化されていなくとも、無理やり Empty 値を変数に設定しても String 型や Integer 型など Variant 型以外の変数は IsEmpty 関数によって返される値は False となります。
Dim str As String MsgBox IsEmpty(str) ' False str = vbNullString MsgBox IsEmpty(str) ' False str = "" MsgBox IsEmpty(str) ' False str = Empty MsgBox IsEmpty(str) ' False Dim i As Integer MsgBox IsEmpty(i) ' False i = 0 MsgBox IsEmpty(i) ' False
IsEmpty 関数が True を返すのは Empty 値
IsEmpty 関数は、Variant 型の変数で初期化されていない場合には True をリターンします。Empty 値で初期化した場合に限り、変数は初期化されていないと判断します。
Dim v As Variant v = Empty ' Empty での初期化に限り IsEmpty 関数は True を返す 'v = vbNullString ' False 'v = Null ' False 'v = 0 ' False MsgBox IsEmpty(v)
Variant 型の乱用は避けましょうとのこと
Variant 型はある程度ファジーで使いやすいですが、バグを作りこむ要因にもなりえます。下記に Variant 型と扱われる宣言例を示します。詳細はコメントを参照ください。
Dim n ' 型を省略した場合は、変数 n は Variant 型となる Dim p1, p2 As Integer ' p1 は Variant 型で、p2 は Integer 型 Dim p1 As Integer, p2 As Integer ' p1、p2 はともに Integer 型
Variant型 【 バリアント型 】より引用
あらかじめどのようなデータ型を受け取るか分からない場合などに便利だが、整数型や文字列型などの通常のデータ型に比べ必要なメモリ領域が大きく、処理速度も余計にかかる。また、内部的に異なる型の値同士で比較や演算などを行ってもエラーが発生しないことからバグの温床となりやすく、乱用は避けるべきとされている。