0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】Dimステートメント|変数を宣言する方法と注意点

Last updated at Posted at 2025-09-10

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

image.png

使用例

ループ処理

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

その他のステートメント

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?