【ExcelVBA】Variant型の使い方とは?配列で使う方法・注意点も解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、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型は型指定をせずに変数を使うことができるので、使いこなすととても便利です。

使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次