🧪

Excel VBAのデータ型について

2022/12/07に公開

この記事ではVBAのデータ型について学びます。データ型とは変数が扱うことができる値の種類・大きさを指定するための仕組みです。変数を宣言する際にセットで使うのですが、データ型を使いこなせば変数をより有効活用できます。VBAにはVariant型という便利な型があるのでデータ型を使うことは必須ではありませんが、仕組みだけはしっかりと理解しておくようにしましょう。

変数とは何か?

そもそも変数とはメモリスペースへ任意の値を代入できる仕組みでした。数学の変数xyと同じように、確保したメモリスペースに名前を付け、その中に値を代入・更新、別の計算へと利用することができます。

CPの内部的には(ビルディングのような形をした)メモリに変数用の領域が確保される仕組みとなっています。(詳しくはこちらの記事をご参照下さい

データ型とは何か?

そしてデータ型とは変数が扱うことができる値の種類・大きさを指定するための仕組みでした。「この変数にはこのような大きさ・種類のデータしか格納できませんよ」と制限を設けることで、保守性・可読性を上げることができます。

データ型を指定して変数を宣言する構文はこちらです。Dimステートメントの末尾に「As データ型」を記述します。ここでは変数priceに整数だけを扱うLong型を指定しました。

構文
Dim 変数名 As データ型
具体例
Dim price As Long

金額は小数や文字列になることはないですよね。これによって不用意な値が入ることを事前に防ぐことができます。

データ型を使うメリット3選

データ型を使うことには3つのメリットがあります。

1、おかしなデータの組み合わせをチェックできる
2、コードを読み解く際のヒントになる
3、メモリの有効活用・プログラムの高速化

  • データ型によって扱うデータの種類が決まっていれば、「文字列×数値」などの計算を誤ってした際に型エラーが起こって原因をすぐ特定できます。
  • 「Dim num as Long」としてLong型の指定があれば、変数numには整数しか入らないことを読み解くことができます。何も型の指定がない場合に比べてこれは大きなヒントになります。
  • データの種類に応じて型を適切に設定することで、メモリの有効活用・プログラムの高速化を図れます。現代はPCの性能が上がったのでその差は0.1秒という話もありますが(PCが優秀なのであまり関係なくなっている)、正しい使い方に越したことはありません。

個人的に大きなメリットとして感じているのが2番です。全てがVariant型で書かれたコードは変数名からヒントを読み解くしかありません。それがデータ型もセットで付いていると「どんなデータ型が入るか?」が一目でわかります。わざわざコメントを追記で書かずともコードを読み解く際のヒントにデータ型を使うことができます。

VBAのデータ型について

VBAのデータ型には代表的なモノで下記のモノがあります。たくさん種類はありますが全てを覚える必要はありません。

データ型 使用メモリ 値の範囲
Byte 1バイト 0~255の整数
Boolean 2バイト TrueもしくはFalse
Integer 2バイト -32,768~32,767の整数
Long 4バイト -2,147,483,648~2,147,483,647の整数
Single 4バイト 小数点を含む数値
Double 8バイト 小数点を含む数値
Currency 8バイト -922,337,203,685,477.5808~922,337,203,685,477.5807
Date 8バイト 日付と時刻
String 文字列の長さ分 文字列
Object 4バイト オブジェクト
Variant 16バイト(数値)
22倍と(文字列)
あらゆる種類の型

この中で実務で使われるのはLong、String、Doubleの3種類です。整数、文字列、小数を扱う際にはほとんどこれらのデータ型を使います。

  • 整数を入れる変数 → 長整数型(Long)
  • 文字列を入れる変数 → 文字列型(String)
  • 小数を入れる変数 → 小数点数型(Double)

上記のように覚えておきましょう。

何も指定しなければVariant

初めの方でも一度述べましたが、VBAではデータ型を指定することは必須ではありません。VBAで変数を宣言する際にデータ型を指定しなかった場合、それはVariant型として認識されます。例えば下記の変数priceはVariant型が指定されたモノとみなされます。

Variant型が指定される
Dim price

しかし金額には文字列や小数が入ることはありませんよね?ということであれば、何でもはいるVariant型で宣言するメリットはあまりなく、Long型やCurrency型などの型をセットで宣言した方がベターです。

「どんな値が入るかわからない」という特殊な場合を除いて、データ型はミスを減らし、コードを読みやすくする強力な武器となります。ぜひ使いこなすことができるよう、変数を宣言する際にはセットで用意してみて下さい。

Discussion