スポンサードリンク

VBA変数の初期値とEmptyの不思議

変数って代入して初めて値が発生しているかと思いきや、宣言をしただけで値が入ってるんですよね。

今回は変数の型ごとの初期値を調べてみました。

変数の初期値一覧

早速だがこれが変数の型ごとの初期値一覧です。

初期値
String ""
Boolean False
Byte 0
Integer 0
Long 0
Single 0
Double 0
Currency 0
Date #0:00:00#
Object Nothing
Range Nothing
Variant Empty

f:id:ExcelLover:20181222193612j:plain

Emptyの不思議

Variant型の初期値「Empty」は不思議な性質を持っています。

     Debug.Print Empty = 0
     Debug.Print Empty = ""

いずれもTrueを返します。

文字列型・数値型いずれの初期値とも一致します。

ちなみに以下はエラーになります。

Debug.Print 0 = ""

f:id:ExcelLover:20181222193633j:plain

次はEmptyがというか型に依存しているんでしょうが異なる結果になります。

Sub RngEmpty()
     Dim myVar As Variant
     Dim myRng As Range
     
     Set myVar = Range("A1")
     Set myRng = Range("B1")

     myVar = Empty
     myRng = Empty
End Sub

Variant型の方は変数自体が初期化(empty)されますが、 Range型の方は取り込んだセルの値が初期化されます(B1が空白になる)。

一応Variant型の方も内部ではRange型になっているのに違う処理になります。 f:id:ExcelLover:20181222193646j:plain

まとめ

特に数値型の変数になんとなく宣言後に0を入れたりすることもあったのですが、不要だということがわかりました。

ちょっとはコードが短くなって良いかも知れない。

以上ちょっと気になった事を調べてみた。