こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAの変数でVariant型を知っていますか?
Variant型を使いこなすと配列の操作が楽になったり、変数の型を意識せずコードをかけたりととても便利です。
そこで今回は、
・Variant型とは
といった基礎的なことから、
・Variant型を使うと便利なケース
・Variant型以外の型を使うメリットとは
といった応用的な方法まで、徹底的に解説します!
Varinat型の使い方とは
はじめに、Variant型の使い方について簡単に解説します。
他の変数の型と同じように、Variant型は次のように変数宣言します。
Dim 変数名 as Variant
他の型との違いは、「どんなデータでも変数に入れることができる点」です。
String型は文字列のみ、Integer型は数値のみ入れることができましたが、Variant型は「値を入れるときに型が自動で決まる」ため、型を意識せずに使うことができます。
例えば、次のように様々なデータを入れることができます。
さまざまなデータを入れたサンプルコード:
Sub Test() Dim var1 As Variant Dim var2 As Variant Dim var3 As Variant Dim var4 As Variant var1 = 1 var2 = "侍エンジニア" var3 = 3.14 var4 = True Debug.Print "var1:" & var1 & vbCrLf & _ "var2:" & var2 & vbCrLf & _ "var3:" & var3 & vbCrLf & _ "var4:" & var4 End Sub
実行結果:
var1:1 var2:侍エンジニア var3:3.14 var4:True
文字列・数値・真偽値・オブジェクト・配列など、どんな値でも使えるため、覚えておくととても便利です。
Variantを使うと便利なケースとは
「どんな値でも使えるのは分かったけど、使うと便利なケースはないの?」と思った方もいるのではないでしょうか。
Variant型は配列の要素数が変わるようなケースで使うと、とても便利です。
例えば、文字列を分割して配列でデータを分けるようなケースです。
サンプルコード:
Sub Test2() Dim arrList As Variant Dim str1 As String str1 = "1,侍エンジニア1,VBA,5年" arrList = Split(str1, ",") Dim i As Integer For i = 0 To UBound(arrList) Debug.Print arrList(i) Next i End Sub
実行結果:
1 侍エンジニア1 VBA 5年
「1,侍エンジニア1,VBA,5年」をSplit関数を使ってカンマ区切りで分割した配列を、Variant型の変数arrListに入れています。
Ubound関数で配列の要素数を計算し、For文でリストの値を出力しています。
今回は「1,侍エンジニア1,VBA,5年」だったので要素数が4つでしたが、仮に「1,侍エンジニア1,VBA,5年,補足説明」のように要素が1つ増えたとしても、そのまま処理を動かすことができます。
このように、事前に要素数がわからないようなケースで、Variant型はとても便利です。
ちなみに、今回のサンプルで使ったSplit関数、Ubound関数は以下で詳しく解説しているので、気になる方は見てみてくださいね!
「変数は全てVariantにすればいいのでは?」と思った方へ
ここまでの説明を聞いて、次のような疑問を持った方もいるのではないでしょうか。
「どんな値でも必ず入るなら、全てVariat型でもいいのでは・・・?」
そんな方向けに、Variant型を使うときの注意点について解説します。
Variant型はどんな値でも使うことができますが、裏を返せば「予期せぬ値が入ってきても変数に値が入ってしまう」というデメリットがあります。
たとえば、次のような画面から入力した値を使って数値計算するケースです。
サンプルコード:
Sub Test3() Dim inputData As Variant Dim sumData As Variant Const Num = 10 'ダイアログから入力した値を格納 inputData = Application.InputBox("数値を入力してください。") sumData = inputData * Num Debug.Print "合計:" & sumData End Sub
ダイアログで文字を入力:
実行結果:
この例では、数値ではなく文字列をあえて入力し、エラーを発生させています。
「数値を使うことを前提」としているような処理の場合、変数に文字列が入ってしまうのは良くないですよね。
このように、意図しない結果になることがあるため、事前に型が決まっている場合は型を指定するのがおすすめです!
ちなみに、今回使ったInputBox関数は数値のみ入力可にすることもできるので、詳しい使い方を覚えておくと便利です!
以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、Variant型の使い方・使うときの注意点について解説しました。
Variant型は型指定をせずに変数を使うことができるので、使いこなすととても便利です。
使い方も簡単なので、ぜひ使ってみてくださいね!