VBAに限らずプログラミングをするには、変数を扱う事は必須となります。
変数のデータ型と、型の指定方法について説明します。
データ型はたくさんありますので、最初から全て覚える必要はないと思います。
使用頻度の高いデータ型も併せてご紹介したいと思います。
「変数って何?」という方は「Dim、Publicとは? 変数の宣言と適用範囲」をご覧下さい。
データ型
データ型とは?
変数は宣言とは「Dim 変数名 as データ型」や「Public 変数名 as データ型」と書きます。
宣言する際に、「この変数は文字だよ」、「この変数は数字だよ」や「この変数は日付だよ」などと明示してあげます。
この文字、数字、日付の部分をデータ型と言います。
データ型の種類
データ型 | コード表記 | データの種類 |
整数型 | Integer | -32,768~32,767の整数 |
長整数型 | Long | -2,147,483,648~2,147,483,647の整数 |
単精度浮動小数点数型 | Single | -3.4028235E+38~-1.401298E-45 1.401298E-45~3.4028235E+38 |
倍精度浮動小数点数型 | Double | -1.79769313486232E308~-4.94065645841247E-324 |
通貨型 | Currency | -922,337,203,685,477.5808~922,337,203,685,477.5807 の固定小数点数 |
日付型 | Date | 日付:西暦100年1月1日~西暦9999年12月31日 時刻:0:00:00~23:59:59 |
文字列型 | String | 任意の長さの文字列 |
ブール型 | Boolean | TrueまたはFalse |
バイト型 | Byte | 0~255までの整数 |
オブジェクト型 | Object | オブジェクト |
バリアント型 | Variant | すべてのデータ |
一番下のVariant型は全てのデータ型を格納できます。
また、Varinatは「as Varinat」を省略して 「Dim 変数名」のみで記載することも可能です。
最初に覚えるのはこの3つ
データ型はたくさんありますので、慣れるまではこの3つで良いと思います。
- 文字列:String
- 整数:Long
- なんでも:Variant
慣れてきたら、他のデータ型を徐々に覚えていくと良いと思います。
個人的にはDouble(小数)、Date(日付)、Boolean(True/False)もよく使用します。
データ型の指定方法
変数を1つずつ宣言
データ型は「Dim 変数名 as データ型」のas の後ろの型の部分で指定します。
myStrとmyIntは変数名ですので、任意です。
Sub Sample1()
Dim myStr As String '文字列型
Dim myInt As Long '整数型
myStr = "あいうえお" '文字を格納(※文字は""で囲います)
myInt = 12345 '数値を格納
MsgBox myStr & myInt'MsgBoxはダイアログボックスに表示する関数です。
End Sub
上記コードは各変数を宣言して、それぞれデータ型に合わせて文字列や数字を格納して、最後にMsgBoxで変数を結合して、メッセージボックスに表示させるコードです。
同じデータ型をまとめて宣言
次の様に同じ型をたくさん宣言する場合には、「カンマ」で区切ることで変数を連続して記載出来ます。
Sub Sample2()
Dim myStr1 As String, myStr2 As String '文字列型
Dim myInt1 As Long, myInt2 As Long '整数型
myStr1 = "あいうえお" '文字を格納(※文字は""で囲います)
myInt1 = 12345 '数値を格納
myStr2 = "かきくけこ" '文字を格納(※文字は""で囲います)
myInt2 = 678910 '数値を格納
MsgBox myStr1 & myInt1 & myStr2 & myInt2
End Sub
上記コードも同様に各変数に文字列や数字を格納して、最後に結合してメッセージボックスへ表示させるコードになります。
データ型を指定する理由
何でも対応出来るVariantがあるのに、なぜわざわざLongやStringなど指定する必要があるのでしょう。
正直なところ、一部例外はありますが「絶対に厳密に型指定しないとダメ!」という理由はないと思います。
VBA以外のプログラム言語にはデータ型まで宣言する必要がない言語もあるくらいです。
個人的な見解としては予め型の指定がされていると、可読性が高く読みやすく感じます。
特に計算が多いコードや、連結が多いコードを読むときに、この変数には数字が入っているとか、この変数には文字列が入っていると認識出来るだけでも、かなりコードの挙動をイメージしやすくなります。
もし、全てVariantだと、前後のコードから変数にはどんなデータが入るのかを読み取る作業が無意識にも発生します。(意外と疲れます。)
また、エラーの検知も早くなる気がします。
この変数には文字列であるべきとか、数値であるべきと明確なルールが必要な処理の時に 、型を指定する事で違う型のデータが代入されそうになった時にエラーが発生します。
Variantだとエラーが発生しないため、エラーをすぐに検知出来なかったりします。
このような理由で、個人的には型の指定をした方が良いのではないかなと思います。
まとめ
変数は、たくさんあるので徐々に覚えていきましょう。
変数自体を省略出来たり、型を省略出来ます。
覚え始めや慣れるまでは、下手に省略するよりも丁寧に書くことが大事かと思います。
可読性も上がり、エラーの検知も早くなりますし、コーディングをする上でイメージもしやすくなります。
まずは丁寧にコードを記述することを意識してみてください。