Excel VBA | 変数の宣言を強制する

Excel VBA VBA
スポンサーリンク

初心者向けに分かりやすく、手を動かしながら学べるように「要点+やってみる例題(解答付き)+設定手順+デバッグのコツ」をまとめます。読みやすく段階を追って説明します。

1. まず概念をやさしく

変数(へんすう)は、値をいったん置いておける「箱」です。
例: x = 10 は「箱 x に 10 を入れた」という意味。

VBA は宣言しなくても箱(変数)を勝手に作って使えますが、これがバグ(タイプミスなど)を見つけにくくします。
そこで使うのが Option Explicit — 「宣言してない変数は使わせないでね」という命令です。これを書くと、宣言していない変数を使うコードはコンパイル時にエラーになります。結果としてバグを早めに見つけられます。

2. Option Explicit を有効にする理由(超かんたん)

  • タイプミス(totaltota1 と間違える等)をすぐに検出できる。
  • 変数の役割が明確になりコードが読みやすくなる。
  • 型を付けて(As Integer など)書けば、余計な型変換や性能問題を避けられる。

3. Option Explicit の書き方・使い方

モジュールの先頭に書きます(↓一番上に必ず)。

Option Explicit

Sub Sample()
    Dim x As Integer
    x = 10
    MsgBox x
End Sub
VB

Option Explicit があると、宣言していない変数を使うとコンパイルエラーになります(「変数が定義されていません」など)。

4. VBE(Visual Basic Editor)で自動的に Option Explicit を入れる設定

  1. Excel で Alt + F11 を押して VBE を開く。
  2. メニューの「ツール」→「オプション」を選ぶ。
  3. 「編集」タブ → 「変数の宣言を強制する」にチェックを入れる。
  4. OK。これで新しいモジュールを作ると先頭に Option Explicit が自動挿入されます。

既存モジュールには自動で入らないので、手動で先頭に追加してください。

5. 変数宣言の基本パターン(初心者向け)

  • Dim 変数名 — 宣言だけ(型は Variant)
  • Dim 変数名 As Integer — 整数(-32768〜32767)
  • Dim 変数名 As Long — 大きな整数(32-bit)
  • Dim 変数名 As Double — 小数(倍精度)
  • Dim s As String — 文字列
  • Dim b As Boolean — 真/偽(True/False)

Dim count As Long
Dim price As Double
Dim name As String
VB

型を付けると、間違った値を代入しようとするとエラーになったり、意図しない型変換を防げます。

6. 具体例(実例コード)と解説

例 1:合計を計算してメッセージ表示

Option Explicit

Sub SumExample()
    Dim i As Long
    Dim total As Long
    
    total = 0
    For i = 1 To 5
        total = total + i
    Next i
    
    MsgBox "1〜5 の合計は " & total  ' 結果 15
End Sub
VB

解説:itotal を宣言。宣言すると変数の用途が明確。Option Explicit があると、tota1 のようなタイプミスがあったら即エラーになる。

例 2:タイプミスで失敗するコード(Option Explicit なしだと静かに間違う)

Sub BugExample()
    total = 10
    tota1 = total + 5   ' tota1 は宣言していない別の変数(l が 1 に見えるミス)
    MsgBox tota1         ' 意図しない動作になるがエラーにならない(Option Explicit が無ければ)
End Sub
VB

Option Explicit を入れるとここで「変数が定義されていません」と教えてくれるので、ミスに気付けます。

例 3:文字列操作(変数の型を付ける利点)

Option Explicit

Sub Greeting()
    Dim name As String
    name = "太郎"
    MsgBox "こんにちは、" & name & "さん!"
End Sub
VB

解説:nameString にすると数値を誤って入れたときに扱いが分かりやすいです。

7. スコープ(どこで使えるか)

  • Procedure-level(手続き内)Dim x As IntegerSub 内で宣言 → その Sub の中だけで有効。
  • Module-level(モジュール内)Private x As Integer をモジュールの先頭に書く → 同じモジュール内すべてのプロシージャで有効。
  • Public(全プロジェクトで共有)Public x As Integer を標準モジュールの先頭に書く → 他のモジュールやフォームからも参照可能。

例:

' モジュール先頭
Option Explicit
Public gCount As Long   ' 他のモジュールからも使えるグローバル変数

Sub A()
    Dim localVar As Integer  ' A 内だけ
    localVar = 5
End Sub
VB

8. デバッグのコツ(宣言と組み合わせて使う)

  • VBE のメニュー「デバッグ」→「コンパイル VBAProject」を実行すると、宣言ミスやシンタックスエラーをまとめて見つけられます。
  • 変数の中身を確認したいときは「ローカルウィンドウ」や「イミディエイトウィンドウ(Ctrl+G)」を使う。
    例:? total と入力すると現在の値が出る(ブレークしているとき)。
  • 変数名はわかりやすく小文字と大文字で単語区切り(totalAmountinvoiceDate)を使うと読みやすい。

9. 実習問題(手を動かして覚える)

以下の小問を実際に VBE に打ち込んで動かしてみてください。先にモジュールの先頭に Option Explicit を書いてください

問題 1
1〜100 の合計を求めてメッセージで表示するマクロを書きなさい。

問題 2
A1 セルにある数値(整数)を読み取って、その 2 倍を A2 に書き込むマクロを書きなさい。A1 に値がない場合は A2 に 0 を書く。

問題 3(タイプミス検出)
以下のコードにあるタイプミスを見つけて修正して動かしてください。(Option Explicit を付けた状態で実行する)

Sub FindBug()
    Dim total As Long
    total = 100
    tota1 = total + 50   ' ← ここがミス(l と 1 を見間違えがち)
    MsgBox tota1
End Sub
VB

10) 実習問題 解答

解答 1

Option Explicit

Sub Q1()
    Dim i As Long
    Dim total As Long
    total = 0
    For i = 1 To 100
        total = total + i
    Next i
    MsgBox "1〜100 の合計は " & total
End Sub
VB

解答 2

Option Explicit

Sub Q2()
    Dim v As Variant
    v = Range("A1").Value
    If IsNumeric(v) Then
        Range("A2").Value = CLng(v) * 2
    Else
        Range("A2").Value = 0
    End If
End Sub
VB

解答 3(修正版)

Option Explicit

Sub FindBug()
    Dim total As Long
    Dim result As Long
    total = 100
    result = total + 50
    MsgBox result
End Sub
VB

※元のコードは tota1(数字の1)になっていて、新しく宣言される別変数になっていました。Option Explicit があると tota1 が宣言されていないためコンパイルエラーになり、ミスに気付けます。

11. よくある質問(FAQ)

Q
Option Explicit を全モジュールに入れたい
A

新規モジュールに自動挿入する設定にチェックを入れるのが簡単。既存モジュールは手動で先頭に追加するか、検索・置換で一括挿入できます(ただし挿入位置に注意)。

Q
変数の型は全部書くべき?
A

基本は書くのがベスト。Variant(型指定なし)は便利ですが、意図しない動作を招きやすいです。

Q
Option Explicit を入れると何が起きる?
A

宣言していない変数を使うとコンパイル時にエラーになり、タイプミスや未定義の変数を早く見つけられます。

12. 最後に — 初心者向けの推奨ワークフロー

  1. VBE の設定で「変数の宣言を強制する」にチェック。
  2. 新しいモジュールを作ったら必ず Option Explicit を確認。
  3. 変数は Dim name As Type の形で宣言する習慣をつける。
  4. 定期的に「デバッグ→コンパイル」を実行してエラーを早めに発見。
  5. まず短く単純なマクロを作って、変数宣言の違い(型あり/なし)を体感する。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました