• ベストアンサー

Variant型で宣言してるのにEmptyになる

エクセルVBA2003について質問です。 Sub aaa1() Dim a As Variant Debug.Print TypeName(a) End Sub を実行してイミディエイトウインドウで確認すると Emptyが返ってきます。 Variantが返ってこない理由は何でしょうか? また、変数の方の宣言をしない場合は Variant型になるはずなのに Sub aaa2() Dim a Debug.Print TypeName(a) End Sub を実行すると、同じくEmptyが返ってきます。 Variantが返らない理由を教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します バリアント型は、代入された値に合わせて型が設定されます。 代入される値の型があらかじめ解らないような場合に使用され、値が入った時点で型が設定される ようになっている。 逆を言えば、バリアント型の値が無いとも言えます。 従って、TypeName の戻り値がバリアント型になる事は無いはずです。 Dim a As Variant a = 123 Debug.Print TypeName(a) a = "abc" Debug.Print TypeName(a) Set a = Nothing Debug.Print TypeName(a) a = 1.11111111111111E+27 a = CVar(a) Debug.Print TypeName(a) 昔は、バリアント型の変数は、メモリの消費が多く処理速度が遅いので使うなと言われていたのですが。

fsjkls
質問者

お礼

>Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します よく覚えます。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

まだ(2012/02/13 12:00)質問受付中になっておりますが、先の回答では疑問が解決 されていないのでしょうか? でしたら、どの部分かを再質問願います。 (回答した以上 未解決で保留されておられますと回答がまずかったかなと気になります。)

fsjkls
質問者

お礼

ごめんなさい。すでに解決済みでした。

すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

バリアント型は、値が代入されるまではEmptyとする仕様だからです。 Emptyは特殊な値で0、長さ0の文字列(””)、NULL値と異なります。 バリアント型の変数を式の中で使うとき、数値演算を行う式では数値の0、 文字列の連結などを行う式では長さ0の文字列になりますので一度値を 代入して確認して下さい。 因みにバリアント型の変数をEmpty値に戻すには、Emptyを代入します。

fsjkls
質問者

お礼

勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A