こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、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関数は以下で詳しく解説しているので、気になる方は見てみてくださいね!
【VBA入門】Split関数で文字列を分割(複数条件や正規表現も解説)
更新日 : 2019年4月28日
【VBA入門】UBound、LBound関数で配列の要素数を取得
更新日 : 2019年4月24日
「変数は全て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関数は数値のみ入力可にすることもできるので、詳しい使い方を覚えておくと便利です!
以下で詳しく解説しているので、気になる方は見てみてくださいね!
【ExcelVBA入門】入力ダイアログを作るためのInputBoxの使い方とは
更新日 : 2018年8月2日
まとめ
今回は、Variant型の使い方・使うときの注意点について解説しました。
Variant型は型指定をせずに変数を使うことができるので、使いこなすととても便利です。
使い方も簡単なので、ぜひ使ってみてくださいね!