【Excelマクロ】型宣言の重要性と「Variant」が便利だけど危険な理由

変数には「型」がある

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

このように書くことで、次のようなメリットがあります。

  1. データの意味がはっきりする
    qty は数値、item は文字とすぐにわかる
  2. エラーが早めに見つかる
    文字列を数値に入れようとすると、すぐに気づける
  3. 処理が速くなる
    VBAが「これは数値だから計算できる」と判断しやすくなる
  4. 書いた人以外にも読みやすい
    チームでの開発や、時間がたった後の見直しで役立つ

型をつけなかった場合の例

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のレベルアップへの第一歩になります。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール