[ VBA入門 ] IsEmpty関数がTrueとなるのはVariant型のEmpty値のみ

Pocket

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型 【 バリアント型 】より引用
あらかじめどのようなデータ型を受け取るか分からない場合などに便利だが、整数型や文字列型などの通常のデータ型に比べ必要なメモリ領域が大きく、処理速度も余計にかかる。また、内部的に異なる型の値同士で比較や演算などを行ってもエラーが発生しないことからバグの温床となりやすく、乱用は避けるべきとされている。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *