VBA バリアントデータ型(変数の宣言)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 7月 14, 2022

バリアント型変数

バリアント型変数は任意のデータ(文字列、整数、小数、オブジェクトなど)を保持することができます。変数の型を宣言しない場合、変数はバリアントとみなされます。 バリアント型変数を宣言するには、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” が入力されます。

vba variant fredsmith

上で宣言された名前から、varNameにはテキストが、objSheetにはワークシートオブジェクトが入ると結論づけることができます。 しかし、実際には、どのようなタイプのデータでも変数に代入することができます。

上で宣言した変数に次のように入力しても、エラーは発生しません。

varName = 6
objSheet - "Fred"

バリアント型変数を使用するのは珍しいことで、良い習慣とは考えられていません。しかし、時にはバリアント型変数が役に立つことがあります。

モジュールレベルまたはグローバルレベルでのバリアント型変数の宣言

前の例では、プロシージャの中で Variant 変数を宣言しています。プロシージャで宣言された変数は、そのプロシージャ内でのみ使用することができます。

vba variant procedure declare バリアント型変数

代わりに、モジュールまたはグローバルレベルでVariant変数を宣言することができます。

モジュールレベル

モジュールレベルの変数は、コードモジュールの先頭でDimステートメントを使用して宣言します。

vba variant module declare バリアント型変数

このように宣言された変数は、そのコードモジュール内の任意のプロシージャで使用することができます。

グローバルレベル

グローバルレベルの変数も、コードモジュールの先頭で宣言されます。ただし、Dimステートメントの代わりにPublicステートメントを使用して、文字列変数が VBA プロジェクト全体で使用可能であることを指定します。

Public strName as Variant

vba variant public declare バリアント型変数

モジュールレベルでバリアント型変数を宣言し、別のモジュールで使用した場合、エラーが発生します。

vba variant module error バリアント型変数

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

このコードを実行すると、次のようなエラーが発生します。

vba variant error バリアント型変数

デバッグをクリックすると、このように表示されます。

vba variant debug バリアント型変数

倍精度浮動小数点型として宣言されているため、変数にドル記号を入れることはできません。したがって、文字列値を格納することはできません。

dblPricedblTotalをデータの種類に制限されないバリアント型変数として宣言してみましょう。

Dim dblPrice as Variant
Dim dblTotal as Variant

コードを再び実行すると、Excelシートにデータが正常に表示されるようになります。

vba variant excel バリアント型変数

なお、A4とA5に入力されたデータは、Excelで自動的に数値に変換されます。

vba variant excel data バリアント型変数

動的配列の宣言

動的な配列を宣言する場合、実行時に配列のサイズを変更できるバリアント型変数を使用します。

バリアント型配列を使用すると、配列のサイズを定義する必要はありません。サイズは自動的に調整されます。

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
vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples