変数には「型」がある
VBAでは、何かのデータを一時的に保存して使うときに「変数」を使います。
たとえば、次のような書き方を見たことがあるかもしれません。
Dim name As String
Dim price As Long
この「As String」や「As Long」は、それぞれ変数の型(タイプ)を表しています。
String:文字を扱うときLong:整数を扱うとき
このように、VBAでは「どんなデータなのか」を明示する必要があるのです。
しかし、型をつけずに使える便利な型もあります。それが Variant 型です。
型を明示することの大切さと、Variant型の便利さ・危険さを、具体例を交えてわかりやすく解説します。
なぜ型をつける必要があるのか?
まず、型を宣言することで、どんな良いことがあるのかを説明します。
型をつけることで得られるメリット
Dim qty As Long
Dim item As String
このように書くことで、次のようなメリットがあります。
- データの意味がはっきりする
qtyは数値、itemは文字とすぐにわかる - エラーが早めに見つかる
文字列を数値に入れようとすると、すぐに気づける - 処理が速くなる
VBAが「これは数値だから計算できる」と判断しやすくなる - 書いた人以外にも読みやすい
チームでの開発や、時間がたった後の見直しで役立つ
型をつけなかった場合の例
Dim x
x = 100
このように「型なし」で書くと、自動的に Variant 型になります。
一見問題ないように見えますが、ここに落とし穴があります。
Variant型とは?便利だけど注意が必要
Variant 型は、「何でも入れられる変数」です。
何でも入れられる例
Dim val
val = "文字列"
val = 123
val = #2025/1/1#
上のコードすべて、val という変数は受け入れてくれます。
文字列でも、数値でも、日付でも、エラーになりません。
つまり、Variant型はとても柔軟で、入力する側にとってはラクなのです。
Variant型が便利なケース
例:セルの中身が文字か数値かわからない場合
Dim cellVal
cellVal = Range("A1").Value
このように、セルに何が入っているかわからないときは、Variant型を使えばどんなデータでもとりあえず受け取れます。
Variant型の注意点と落とし穴
Variantは「便利」ですが、便利すぎてミスにつながりやすい型でもあります。
1. データの型が途中で変わってしまう
Dim v
v = 10
v = v & "円"
v は数値から文字列になってしまいます。
このように、型が意図せず変わってしまうと、計算できなくなったり、文字として処理されたりすることがあります。
2. 間違った処理でもエラー発見が遅れる
Dim v
v = "abc"
MsgBox v * 2
variant型だと、なんでも入るため、abcのように文字でも入れることができるため、実施に動作するまでエラーに気がつきにくい、というデメリットがあります。
long型などを設定しておけば、動作した瞬間に型が合わないので、エラーとなります。
3. 処理速度が遅くなることがある
VBAは、データの型がはっきりしていると、処理を効率よく行えます。
しかし、Variant型は「何でもあり」なので、VBA側で判断する手間が増えます。
これにより、大量のデータを扱うときに処理が遅くなる原因になります。
4. デバッグ(原因調査)が難しくなる
型を宣言していないと、途中で何が入っているのかがわかりづらくなります。
とくに、複数のプロシージャをまたぐような大きなマクロでは、Variantがいたるところで使われていると、原因の特定がとても難しくなります。
型を明示することで得られる安心
では、同じような処理を「型を明示して」書いた場合はどうでしょうか。
型ありの例
Dim price As Long
price = 100
price = price & "円" ' ← これはエラー
このように、最初から Long 型と宣言しておけば、文字列を結合しようとした時点でエラーになります。
その場で気づけるため、早いタイミングで気がつくことができます。
まとめ
改めて、「型宣言」と「Variant型」の関係について整理します。
Dim xのように書くと、自動的にVariant型になる- 型を明示すれば、エラーを早く見つけられる
Variantは便利だが、予期しないミスの原因にもなる- セルの中身を受け取るときなど、一部のケースでは有効
- 基本は型を明示し、必要に応じてVariantを使うようにする
型宣言は少し面倒に見えるかもしれませんが、長く使えるマクロを作るためにはとても重要です。
慣れてきたら「この変数はどんな型にすればいいか?」を考えながらコードを書くようにしてみてください。
それが、VBAのレベルアップへの第一歩になります。
