VBAのデータ型とVariant型とは|型宣言の重要性とVariantを使うときの注意点

VBAの変数には「型」があり、Dim name As String のように使うデータの種類を宣言します。型を宣言するとエラーを早期に発見でき、コードも読みやすくなります。型を宣言しない場合は自動的に Variant 型になりますが、便利な反面、気づきにくいミスの原因になることがあります。

この記事では、次の内容を順番に解説します。

  • よく使うデータ型の種類
  • 型を宣言するメリット
  • Variant型の便利さと注意点

よく使うデータ型の種類は?

VBAでよく使うデータ型は次のとおりです。

  • String:文字列を扱うとき。例:名前・住所・メッセージ
  • Long:整数を扱うとき。例:行番号・カウンター・個数
  • Double:小数を含む数値を扱うとき。例:金額・時間・割合
  • Boolean:TrueかFalseの2値を扱うとき。例:フラグ・スイッチ
  • Date:日付や時刻を扱うとき。例:出勤時刻・作成日
  • Variant:何でも入れられる型。型を宣言しないと自動的にこの型になる
Dim name As String   ' 文字列
Dim price As Long    ' 整数
Dim rate As Double   ' 小数
Dim flag As Boolean  ' True/False
Dim dt As Date       ' 日付

型を宣言するメリットは?

型を宣言することで、次のようなメリットがあります。

  • 変数の意味がひと目でわかるqty As Long と書いてあれば「数量の整数」とすぐわかる。
  • エラーを早期に発見できる:文字列を数値型の変数に入れようとすると、その時点でエラーになる。
  • 処理が速くなる:型が明確だとVBAが判断する手間が減る。
  • コードが読みやすくなる:後から読んでもどんなデータが入るかわかる。
' 型ありの例:文字を入れようとした時点でエラーになる
Dim price As Long
price = 100
price = price & "円"  ' ← ここでエラーが出てすぐ気づける

Variant型とは?

Variant 型は「何でも入れられる型」です。型を宣言しないと自動的にVariant型になります。

' 型を宣言しない場合(自動的にVariant型になる)
Dim x
x = "文字列"  ' OK
x = 123       ' OK
x = #2025/1/1#  ' OK(日付も入る)

何でも入るので柔軟に使えますが、その分ミスに気づきにくくなります。

Variant型の注意点は?

① 型が途中で変わってしまう

Dim v
v = 10
v = v & "円"  ' 数値から文字列に変わってしまう
MsgBox v * 2  ' "10円" × 2 はエラーになる

意図せず型が変わると、後で計算しようとしたときにエラーが出て原因がわかりにくくなります。

② エラーの発見が遅くなる

Dim v
v = "abc"
MsgBox v * 2  ' 実行するまでエラーに気づけない

型を宣言していれば、この時点で「文字列は計算できません」とすぐわかります。Variant型だと実行するまでエラーにならないため、気づくのが遅くなります。

③ 処理が遅くなることがある

VBAはVariant型の変数に何が入っているかを実行中に都度確認するため、大量のデータを扱うときに処理が遅くなることがあります。

Variant型を使っていい場面は?

セルに何が入っているかわからない場合や、さまざまな型のデータを受け取る可能性がある場合にはVariant型が適しています。

' セルの中身が文字か数値かわからない場合
Dim cellVal As Variant
cellVal = Range("A1").Value

ただしこの場合も、後で何の型として使うかがわかっているなら、取り出した後に適切な型の変数に入れ直すのがおすすめです。

まとめ

基本は型を宣言して、必要なときだけVariant型を使うのがおすすめです。

  • 型を宣言するDim x As Long のように As 型名 をつける。
  • 型を宣言しないとVariant型になる:何でも入るが、ミスに気づきにくい。
  • Variant型の注意点:型が途中で変わる・エラー発見が遅れる・処理が遅くなる。
  • Variant型が適している場面:セルの中身が何かわからないとき。

よくある質問

LongとIntegerはどう使い分ける?

どちらも整数を扱う型ですが、Integerは-32,768から32,767までの小さな整数に対応し、Longは約21億までの大きな整数に対応します。現代のパソコンではLongの方が処理速度が速い場合が多いため、整数はLongを使うのがおすすめです。

型を間違えるとどんなエラーが出る?

「型が一致しません(Type mismatch)」というエラーが出ます。たとえば文字列を数値型の変数に代入しようとしたときに発生します。このエラーが出たら、変数の型と代入しようとしているデータの型が合っているか確認しましょう。

Option Explicitを使うと何が変わる?

モジュールの先頭に Option Explicit と書くと、Dimで宣言していない変数を使ったときにエラーが出るようになります。変数の型を宣言する習慣がつきやすくなるので、初心者のうちは入れておくのがおすすめです。

セルから読み込んだデータの型を調べるには?

TypeName(変数) を使うと、変数に入っているデータの型名を文字列で返します。たとえば MsgBox TypeName(Range("A1").Value) とすると「Double」「String」「Date」などが表示され、セルに何の型のデータが入っているかを確認できます。

DoubleとSingleはどう使い分ける?

どちらも小数を扱う型ですが、Doubleの方が精度が高く扱える数値の範囲も広いです。SingleはDoubleより少ないメモリで済みますが、現代のパソコンではその差はほとんど気になりません。小数を使う場合はDoubleを使っておけば問題ありません。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

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

上部へスクロール