VBAには、文字列を扱うための型や数値を扱うための型など、様々な種類のデータ型があります。
今回の記事では、そのデータ型の1つであるVariant型について、紹介していきたいと思います。
- Variant型とは何か?
- Variant型の使い方
- Variant型を使うメリット・デメリット
など、基礎の部分から応用的な内容まで、詳しく解説していきます!
VBAの変数におけるVariant型とは?
Variant型は、あらゆるタイプのデータを格納することができるデータ型です。
String型の場合は文字列のみ、Integer型やLong型などであれば数値のみといったように、基本的に型ごとに入れられる値が限られているのに対し、Variant型は入れた値に応じて動的に型を定義してくれるため、どのような値でも代入することができます。
また、For Each文で配列の中身を扱う場合や、Variant型で戻される関数の結果を代入する場合など、仕様上必ずVariant型を指定しなければいけないケースも中には存在します。
Variant型の使い方とは?
Variant型で変数を扱う場合、次のように型を宣言します。
【基本構文】
Dim 変数名 as Variant
また、以下のように型を省略して宣言すると、自動でVariant型が指定されます。
【型宣言を省略する記法】
Dim 変数名
Variant型はどんな場面で使いやすい?
Variant型を使用するケースで特に多いのは、配列を扱う場面です。
例えば、変数の宣言後に任意の初期値を設定したい時、通常であれば要素の1つ1つにアクセスして値を設定する必要がありますが、Array関数を使うと一度に全ての要素を設定することができます。
【サンプルコード】
Sub sample1()
Dim sampleArr As Variant
sampleArr = Array("A", "B", "C")
MsgBox sampleArr(0) & "、" & sampleArr(1) & "、" & sampleArr(2)
End Sub
【実行結果】
Array関数の戻り値はVariant型なので、この方法を使う場合はVariant型で変数を宣言する必要があります。記述内容に制限はかかりますが、覚えておくと便利な方法の1つです。
また、指定のセル範囲の値をVariant型の変数に入れる事で、配列として扱うことができます。
【サンプルコード】
Sub sample2()
Dim sampleArr As Variant
sampleArr = Range("B2:C3").Value
MsgBox sampleArr(1, 1) & " " & sampleArr(1, 2) & vbCrLf & _
sampleArr(2, 1) & " " & sampleArr(2, 2)
End Sub
【実行結果】
膨大な数のデータを扱う場合、セルごとにアクセスして処理を行うよりも、配列として変数に代入する方が速く処理できます。
作成される配列は2次元配列となるため扱いは少々複雑になりますが、作業の効率化を図る上では有用な方法となります。
Variant型を使う際の注意点とは?
Variant型は、あらゆるデータを扱うことのできる便利な型ですが、使用する上で注意するべき点があります。
「どのような値でも入れられる」ということは、裏を返せば「中身を覗くまで何が入っているかが分からない」ということでもあります。他の型であれば、型の不一致などでエラーとして処理される内容も、Variant型の場合は正常値として格納することができてしまうため、予期せぬ動作や結果を招く可能性があるのです。
例えば以下のように、とある数値同士を加算するコードがあったとします。
sumVal = num1 + num2
それぞれの変数を数値型で宣言している場合、変数には数値のみが代入されます。数値以外の値が代入されようとすればエラーが発生するので、エラー処理を別で記述しておくことで例外ケースへの対応も可能になります。
ところが、型をVariant型で宣言していた場合、数値以外の値でも加算処理を行おうとしてしまうのです。計算自体が不可能な値であればエラー処理することもできますが、文字列の場合は文字同士の結合という形で処理することができてしまうため、例外処理を行うことができません。
実際の動きを、以下のサンプルコードで見てみましょう。
【サンプルコード】
Sub sampleSum()
Dim sumVal As Variant
Dim msg As String
Dim num1 As Variant, num2 As Variant
num1 = 10
num2 = 20
sumVal = num1 + num2
msg = "数値同士:" & sumVal & vbCrLf
Dim st1 As Variant, st2 As Variant
st1 = "10"
st2 = "20"
sumVal = st1 + st2
msg = msg & "文字列同士:" & sumVal
MsgBox msg
End Sub
【実行結果】
このように、数値と文字列でそれぞれ結果が異なっているのが分かると思います。こうした例外を処理するためには、エラー処理と別の方法で対応しなければなりません。
思わぬ不具合の見落としにも繋がるため、変数をVariant型で宣言するかどうかはよく吟味する必要があります。
まとめ
いかがでしたでしょうか?
Variant型は便利ですが、そのぶん気を付けなくてはいけないことも多くあります。特に、複数のデータ型が混在する処理の中で扱うときは、想定外の動作がエラーにならずに通ってしまうこともあるので、よく気を付けて使いましょう!
今回の記事を参考に、Variant型を上手く使いこなしてみてくださいね!
関連記事
- VBAとは
- Excelで覚えておくべき17の基本関数と目的別逆引き一覧
- オートフィルターの設定・解除方法
- メッセージボックスの設定方法
- セルの値を取得・上書きするValueプロパティの使い方を解説
- 【Excel VBA】Rangeでセルを範囲選択する方法を解説
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。