こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAで変数定義を変更する方法

Data_Typeという変数の中に文字列doubleが入っていたら、
AIyyという変数をdoubleで定義、
longが入っていたらlongで定義するというプログラムを作りたいのですが

If Data_Type = "double" Then
Dim AIyy As Double

ElseIf Data_Type = "long" Then

Dim AIyy As Long

End If

と書くと、定義が重複しているというエラーが表示されてうまくいきません。


これはどうすれば良いでしょうか?


それと一度integerで定義した変数をlongなどに定義を変更したい場合どのようにすれば良いでしょうか?

投稿日時 - 2014-02-12 12:25:50

QNo.8471985

すぐに回答ほしいです

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

EXCEL2010 のVBAで試したところ、
Variant型で定義した変数(a)に、指定型で定義した変数を代入したら、(a)の型は、
代入した変数の型になりました。

Dim a As Variant
Dim b As Object
Dim c As Integer
Dim d As Long

MsgBox TypeName(a)
Set a = b
MsgBox TypeName(a)
a = c
MsgBox TypeName(a)
a = d
MsgBox TypeName(a)

なので、希望の方法とは違いますが、

dim AIyy as Variant
dim tmp_double as Double
dim tmp_long as long

   if Data_Type = "long" then
AIyy = tmp_long
else if Data_Type = "Double" then
AIyy = tmp_double
endif

などはいかがでしょうか。

投稿日時 - 2014-02-12 12:54:32

ANo.1

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>と書くと、定義が重複しているというエラーが表示されてうまくいきません。

VBAは、C++のような「変数スコープ」がありませんから、ブロック内で変数定義する事は出来ません。

>これはどうすれば良いでしょうか?

一番最初に

Dim AIyy As Variant

と書けばオッケー。

Variant型の変数には、Doubleの値も、Longの値も、Stringの値も、Dateの値も、どんな型の値でも好きに代入できます。

投稿日時 - 2014-02-12 13:20:30

あなたにオススメの質問