VBAで変数(dim)は、どこに書く?

VBAで変数(dim)は、どこに書く?

VBAを書き始めた頃に必ず迷うのが「Dim ってどこに書くの?」問題。答えはシンプルで、「その変数をどこまで使いたいか(スコープ)」で決まります。この記事では、最短で迷いが消えるように、パターン別に例コード付きで整理します。

Dimの基本:そもそもDimとは何か

Dim変数(や配列)を宣言するためのキーワードです。

この宣言で「nameは文字列、ageはLong(整数)として使う」とVBAに伝えます。型を指定しないこともできますが、ミスに気づきにくく、意図しない型変換も起きやすいので、基本は 必ず As 型 を付けるのがおすすめです。

パターン別:Dimはどこに書く?

① プロシージャ内だけで使う(Sub/Function内)→ 先頭に書く

一番多いパターンです。

この場合、imsg はこのSubの中だけで使えます。他のSubからは見えません。

② 同じモジュール内の複数Subで共有したい → モジュールの先頭(Subの外)

標準モジュール(Module)に次のように書きます。

ここでは Dim ではなく Private / Public を使うのが分かりやすくておすすめです。(モジュール先頭で Dim も書けますが、読み手が「ローカル?」と誤解しやすいです)

③ どのモジュールからでも使いたい(グローバル)→ 標準モジュール先頭でPublic(注意)

これはプロジェクト全体から参照できます。便利ですが、どこからでも書き換えできるので、 バグが追いにくくなりがちです。

おすすめ運用

④ UserForm/クラスで共有したい → UserForm/クラスの先頭(Subの外)

UserForm内の複数イベント(ボタン/初期化など)で共有したいときは、UserFormモジュールの宣言セクションへ。

mCountそのフォームの中で共有されます。(クラスモジュールでも同じ考え方です)

よくある勘違い:IfやForの中にDimしたら「その中だけ」ではない

他言語だと「ブロックの中だけ有効」がありますが、VBAは基本的にそうなりません。If の中で Dim しても そのSub/Function全体で使えることが多いです。

この「使えてしまう」が事故の元になりやすいので、初心者のうちは特に宣言はSub/Functionの先頭にまとめるのがおすすめです。

実務でおすすめの書き方ルール(読みやすさ優先)

宣言は先頭にまとめる

途中に書くこと自体はできても、読みづらくなりがちです。

型は必ず書く(As~)

Option Explicitは必須:書く場所と設定方法

書く場所:モジュールの一番上

これがあると、宣言していない変数を使った瞬間にエラーになるので、タイポ(例:totla)で地獄を見る確率が激減します。

自動で入れる設定(おすすめ)

VBEで [ツール] → [オプション] →「変数の宣言を強制」 にチェック。新規モジュール作成時に Option Explicit が自動で入ります。

FAQ:よくある疑問

Dimを書かないとどうなる?

Option Explicit がない場合、タイプミスでも新しい変数として勝手に作られることがあります。そのため、Option Explicit を入れるのが正攻法です。

Dimは途中に書いてもいい?

動く場合もありますが、読みづらくなりやすいので、基本は 先頭にまとめるのがおすすめです。

Static / Const はいつ使う?

まとめ:迷ったら「Sub/Functionの先頭」+「Option Explicit」

Author Profile

コウノ(
職歴年のIT技術者です。エクセル・Web制作が得意。

プロフィールの詳細

お困りごとはまずはご相談ください。パソコン・スマホ初期設定 / ツール導入・開発受付中

Back to Top