プロが教える店舗&オフィスのセキュリティ対策術

エクセル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が返らない理由を教えてください。よろしくお願いします。

A 回答 (3件)

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)

昔は、バリアント型の変数は、メモリの消費が多く処理速度が遅いので使うなと言われていたのですが。
    • good
    • 0
この回答へのお礼

>Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します

よく覚えます。ありがとうございました。

お礼日時:2012/02/10 22:26

まだ(2012/02/13 12:00)質問受付中になっておりますが、先の回答では疑問が解決


されていないのでしょうか?

でしたら、どの部分かを再質問願います。
(回答した以上 未解決で保留されておられますと回答がまずかったかなと気になります。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/13 23:29

バリアント型は、値が代入されるまではEmptyとする仕様だからです。



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

因みにバリアント型の変数をEmpty値に戻すには、Emptyを代入します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/10 22:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A