Excel VBAのデータ型について
この記事ではVBAのデータ型について学びます。データ型とは変数が扱うことができる値の種類・大きさを指定するための仕組みです。変数を宣言する際にセットで使うのですが、データ型を使いこなせば変数をより有効活用できます。VBAにはVariant型という便利な型があるのでデータ型を使うことは必須ではありませんが、仕組みだけはしっかりと理解しておくようにしましょう。
変数とは何か?
そもそも変数とはメモリスペースへ任意の値を代入できる仕組みでした。数学の変数
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型が指定されたモノとみなされます。
Dim price
しかし金額には文字列や小数が入ることはありませんよね?ということであれば、何でもはいるVariant型で宣言するメリットはあまりなく、Long型やCurrency型などの型をセットで宣言した方がベターです。
「どんな値が入るかわからない」という特殊な場合を除いて、データ型はミスを減らし、コードを読みやすくする強力な武器となります。ぜひ使いこなすことができるよう、変数を宣言する際にはセットで用意してみて下さい。
Discussion