VBAで変数を使うときは、基本的に Dim
ステートメントで事前に宣言します。
本記事では、Dim の基本構文、変数型の指定、オブジェクト変数との関係、よくあるミスの回避法までをまとめて解説します。
他のよく使うステートメント一覧はこちら。
Dimステートメントとは?
Dim(Dimension)ステートメントは、変数を宣言するための構文です。
VBAでは、変数を使う前にあらかじめ宣言するのが基本です。
基本構文
Dim 変数名 [As データ型]
-
変数名
... 任意の名前 -
As データ型
… 省略可能(省略するとVariant型になる)
例 :
Dim i As Integer
Dim name As String
Dim ws As Worksheet
なぜ変数宣言が必要?
Dim
による宣言には次のようなメリットがあります
- 型の誤使用を防げる
- メモリ効率が良くなる
- オブジェクト操作の補完が効く(例:Rangeなど)
-
Option Explicit
と組み合わせればスペルミスでのバグ防止
よく使う型
型名 | 説明 | 初期値 | 使用例 |
---|---|---|---|
Integer | 整数 | 0 | Dim i As Integer |
Long | 大きな整数 | 0 | Dim num As Long |
Double | 浮動小数点数 | 0.0 | Dim rate As Double |
String | 文字列 | 空文字 | Dim name As String |
Boolean | True / False | False | Dim flg As Boolean |
Variant | 型が決まっていない万能型 | Empty | Dim v |
型を省略するとどうなる?
Dim name
上記のように型を省略すると、自動的にVariant型になります。
Variant
型はどんな値でも格納できる便利な型ですが、処理速度が遅くなる・バグの温床になりやすいため、明示的な型指定が推奨されます。
オブジェクト変数とSet
オブジェクト型(Range、Worksheet、Workbookなど)を使うには、Dim
+Set
が必要です
Dim rng As Range
Set rng = Sheet1.Range("A1")
なぜ Set が必要?
文字列や数値と違い、オブジェクトは参照型です。
「その値」ではなく「その場所(参照)」を代入するためにSet
が必要になります。
Option Explicitとの関係
Option Explicit
を使うと、すべての変数を必ずDim
などで宣言しないとエラーになります。
コードの品質向上やデバッグのしやすさから、常に有効にしておくのがベストです。
Option Explicit
Sub Sample()
i = 10
End Sub
使用例
ループ処理
Dim i As Long
For i = 1 To 10
Debug.Print i
Next i
注意
複数変数を一括宣言する場合の罠
複数の変数をまとめて宣言する場合、型も個別に付与しましょう。
以下の場合、zだけがLong型になりxとyはVariant型になります。
Dim x, y, z As Long
全て同じ型の場合でも個別に付与します。
Dim x As Long, y As Long, z As Long