VBAでは変数を宣言しなくても使えますが、宣言することで「想定外の値が入る」「変数名のタイプミス」といった問題を事前に防ぐことができます。
この記事では、Dim による変数宣言の基本と、Option Explicit を組み合わせて未宣言変数の使用を禁止する方法を解説します。
Dimで変数を宣言するには?
Dim ステートメントを使うと「この変数を使います」という宣言ができます。型を指定することで、その変数に入れられる値の種類を制限します。
Dim 変数名 As 型
主な型の種類は次のとおりです。
| 型 | 内容 |
|---|---|
Integer | 整数(-32,768〜32,767) |
Long | 大きい整数(-2,147,483,648〜2,147,483,647) |
String | 文字列(テキストデータ) |
Boolean | 真偽値(True / False) |
Double | 小数を含む数値 |
Dim i As Integer ' 整数型
Dim sheet_name As String ' 文字列型
型の範囲を超えた値を代入しようとするとエラーになります。例えば Integer 型の変数に40,000を代入するとオーバーフローエラーが発生します。ループカウンターなど大きい数を扱う場合は Long を使いましょう。
Option Explicitで未宣言変数の使用を禁止するには?
Option Explicit をモジュールの先頭に書くと、宣言していない変数を使ったときに自動的にエラーが発生します。変数名のタイプミスを防ぐ強力な仕組みです。
Option Explicit
Sub Sample()
Dim sheet_name As String
shet_name = ActiveSheet.Name ' 「e」が1文字抜けているためエラー
End Sub
shet_name は宣言されていない変数のため、Option Explicit があればエラーになります。宣言なしでは気づかないまま動いてしまうところを、確実に検出できます。
Option Explicitを自動的に有効化するには?
VBEの設定を変更することで、新しいモジュールを作成するたびに自動的に Option Explicit が挿入されるようになります。
① VBEを開く(Alt+F11)
② メニューの「ツール」→「オプション」を選択
③ 「編集」タブの「変数の宣言を強制する」にチェックを入れる
一度設定しておけば毎回手入力する必要がなくなります。
まとめ
Dim 変数名 As 型で変数の型を宣言し、想定外の値の混入を防ぐ- 大きい整数には
Long、文字列にはStringを使うのが基本 Option Explicitをモジュール先頭に書くと未宣言変数の使用をエラーで検出できる- VBEの「変数の宣言を強制する」設定を有効にすると自動的に
Option Explicitが挿入される - 変数は必ず宣言する習慣をつけることでバグの少ない安定したコードになる
よくある質問
変数の型を指定しないとどうなりますか?
型を省略すると自動的に Variant 型になります。Variant はあらゆる値を受け付けますが、メモリの消費が多く処理が遅くなることがあります。意図した型を明示する方が安全です。
IntegerとLongはどう使い分けますか?
基本的には Long を使っておけば問題ありません。現代のPCでは Integer より Long の方が処理が速い場合もあります。行番号・列番号など大きな値になりうる変数には必ず Long を使いましょう。
Option Explicitは既存のモジュールにも効きますか?
はい。モジュールの先頭に手動で Option Explicit と書けば既存のモジュールにも適用されます。既存コードに未宣言変数がある場合はエラーになるため、宣言を追加して修正してください。
複数の変数を1行でまとめて宣言できますか?
できます。Dim i As Long, j As Long, name As String のようにカンマで区切れます。ただし Dim i, j As Long と書くと i は Variant、j だけが Long になるため注意が必要です。
宣言した変数の初期値は何ですか?
数値型(Integer・Long など)は 0、文字列型(String)は空文字 ""、ブール型(Boolean)は False、オブジェクト型は Nothing が初期値です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



