VBA バリアントデータ型(変数の宣言)
In this Article
バリアント型変数
バリアント型変数は任意のデータ(文字列、整数、小数、オブジェクトなど)を保持することができます。変数の型を宣言しない場合、変数はバリアントとみなされます。 バリアント型変数を宣言するには、Dimステートメント(Dimensionの略)を使用します。
Dim varName as Variant
Dim rng as Variant
そして、変数に値を代入するには、単に等号を使用します。
varName = "John"
rng = Sheets(1).Range("A1")
これをプロシージャに書くと、次のようになります。
Sub strExample()
'バリアント型変数を宣言
Dim strName As Variant
Dim rng As Variant
'変数に値を入れる
strName = "Fred Smith"
Set rng = Sheets(1).Range("A1")
'シートに値を入れる
rng.Value = strName
End Sub
上記のコードを実行すると、Sheet 1 のセル A1 には “Fred Smith” が入力されます。
上で宣言された名前から、varNameにはテキストが、objSheetにはワークシートオブジェクトが入ると結論づけることができます。 しかし、実際には、どのようなタイプのデータでも変数に代入することができます。
上で宣言した変数に次のように入力しても、エラーは発生しません。
varName = 6
objSheet - "Fred"
バリアント型変数を使用するのは珍しいことで、良い習慣とは考えられていません。しかし、時にはバリアント型変数が役に立つことがあります。
モジュールレベルまたはグローバルレベルでのバリアント型変数の宣言
前の例では、プロシージャの中で Variant 変数を宣言しています。プロシージャで宣言された変数は、そのプロシージャ内でのみ使用することができます。
代わりに、モジュールまたはグローバルレベルでVariant変数を宣言することができます。
モジュールレベル
モジュールレベルの変数は、コードモジュールの先頭でDimステートメントを使用して宣言します。
このように宣言された変数は、そのコードモジュール内の任意のプロシージャで使用することができます。
グローバルレベル
グローバルレベルの変数も、コードモジュールの先頭で宣言されます。ただし、Dimステートメントの代わりにPublicステートメントを使用して、文字列変数が VBA プロジェクト全体で使用可能であることを指定します。
Public strName as Variant
モジュールレベルでバリアント型変数を宣言し、別のモジュールで使用した場合、エラーが発生します。
Public キーワードを使用してバリアント型変数を宣言していた場合は、エラーは発生せず、プロシージャは完全に実行されます。
Excel に入力するためのバリアント型変数の使用
次のプロシージャを考えてみましょう。
Sub TestVariable
'製品名を格納する文字列を宣言する
Dim strProduct as string
'商品の数量を保持するために整数型変数を宣言する
Dim iQty as integer
'商品価格と合計価格を保持するために倍精度浮動小数点型変数を宣言する
Dim dblPrice as Double
Dim dblTotal as Double
'変数を入力する
strProduct = "中力粉"
iQty = 3
dblPrice = "$5.00"
dblTotal = "$15.00"
'Excelシートに入力する
Range("A1") = strProduct
Range("A2") = iQty
Range("A3") = dblPrice
Range("A4") = dblTotal
End Sub
このコードを実行すると、次のようなエラーが発生します。
デバッグをクリックすると、このように表示されます。
倍精度浮動小数点型として宣言されているため、変数にドル記号を入れることはできません。したがって、文字列値を格納することはできません。
dblPriceとdblTotalをデータの種類に制限されないバリアント型変数として宣言してみましょう。
Dim dblPrice as Variant
Dim dblTotal as Variant
コードを再び実行すると、Excelシートにデータが正常に表示されるようになります。
なお、A4とA5に入力されたデータは、Excelで自動的に数値に変換されます。
動的配列の宣言
動的な配列を宣言する場合、実行時に配列のサイズを変更できるバリアント型変数を使用します。
バリアント型配列を使用すると、配列のサイズを定義する必要はありません。サイズは自動的に調整されます。
Sub VariantArray()
Dim arrList() As Variant
'値の定義
arrList= Array(1,2,3,4)
'値の変更
arrList= Array(1,2,3,4,5,6)
'4つめの値を出力
MsgBox arrVar(4)
End Sub