変数宣言時に初期値を設定するには
VBAの変数宣言は一般的には以下のようなコードを書きます。
Dim 変数名 As データ型
これだと変数定義のみで、既定の初期値が適用されます。
初期値を設定したい場合は変数定義と初期値の設定をコロン(:)で連結します。Object型に限らず、クラスオブジェクト型の場合はSetステートメントも必要です。
Dim 変数名 As データ型: 変数名 = 初期値
Dim 変数名 As データ型: Set 変数名 = 初期値
複数の変数の初期値を1行で定義する場合は以下のように書きます。初期値の設定ごとにコロンで連結します。
Dim 変数名1 As データ型, 変数名2 As データ型: 変数名1 = 初期値: 変数名2 = 初期値
VBAでは暗黙で既定の初期値が設定される
VBAでは変数宣言のあとに初期値を設定しなくても、既定の初期値が設定されます。
データ型 | 対象データ型 | 初期値 |
---|---|---|
ブール型 | Boolean | FALSE |
数値型 | Byte、Integer、Long、Single、Double | 0 |
通貨型 | Currency | 0 |
日付型 | Date | 1899/12/30 00:00:00 |
オブジェクト型 | Object | Nothing |
文字列型 | String | vbNullString |
バリアント型 | Variant | Empty |
これらの既定の初期値とは別の値を1行で設定したい場合にはコロン(:)で設定します。
各データ型の初期値設定例
以下は各データ型での1行での初期値設定例です。
注意が必要なのは10行目のオブジェクト型の場合で、2行で書く場合と同様にSetステートメントが必要になります。
これは他のクラスオブジェクトを使う場合も同じです。
22行目ではObject型にはFontオブジェクトを設定しているためNameプロパティでフォントの名前を出力しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub ValueInit() Dim bo As Boolean: bo = True Dim by As Byte: by = 5 Dim i As Integer: i = 30000 Dim lo As Long: lo = 2147000000 Dim si As Single: si = 0.1234567 Dim db As Double: db = 1.23456789012346E+19 Dim cu As Currency: cu = 987654321.1234 Dim dt As Date: dt = "2018/06/11 12:34:56" Dim obj As Object: Set obj = Range("A1").Font Dim str As String: str = "abcd" Dim va As Variant: va = Null Debug.Print bo Debug.Print by Debug.Print i Debug.Print lo Debug.Print si Debug.Print db Debug.Print cu Debug.Print dt Debug.Print obj.Name Debug.Print str Debug.Print va End Sub |
上のコードを実行すると以下が出力されます。
True
5
30000
2147000000
0.1234567
1.23456789012346E+19
987654321.1234
2018/06/11 12:34:56
MS 明朝
abcd
Null
複数の変数宣言と同時に初期値を設定する方法
複数の変数宣言と同時にそれらの変数の初期値を1行で設定することも可能です。
上のコードの変数宣言を1行で書くと以下のようになります。実行結果も同じため省略します。
ただ、こういう書き方は可読性が落ちるだけですのでやめておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ValueInit2() Dim bo As Boolean, by As Byte, i As Integer, lo As Long, si As Single, db As Double, cu As Currency, dt As Date, obj As Object, str As String, va As Variant: bo = True: by = 5: i = 30000: lo = 2147000000: si = 0.1234567: db = 1.23456789012346E+19: cu = 987654321.1234: dt = "2018/06/11 12:34:56": Set obj = Range("A1").Font: str = "abcd": va = Null Debug.Print bo Debug.Print by Debug.Print i Debug.Print lo Debug.Print si Debug.Print db Debug.Print cu Debug.Print dt Debug.Print obj.Name Debug.Print str Debug.Print va End Sub |