【Excelマクロ】変数が原因のバグを防ぐためのチェック方法

VBAでマクロを組むとき、「思った通りに動かない…」というトラブルの多くは、実は変数の扱いミスが原因です。タイプミス、型の違い、初期化忘れなど、ちょっとした不注意がバグにつながります。

変数に関する代表的なバグと、その防ぎ方について解説します。実務でのコードトラブルを減らすためにも、変数まわりのチェックはとても重要です。

宣言漏れやスペルミスは「Option Explicit」で防ぐ

一番ありがちなミスが、「変数の宣言漏れ」や「スペルミス」によるものです。次のコードを見てください。

Sub calc()
    total = 100
    MsgBox tota1
End Sub

このコードでは total を使いたかったのに、tota1 と間違えてしまっています。けれどVBAはエラーを出さず、「新しい変数が出てきた」として処理してしまいます。

これを防ぐには、Option Explicit を使って、すべての変数を宣言する習慣をつけることです。

Option Explicit

Sub calc()
    Dim total As Long
    total = 100
    MsgBox total
End Sub

Option Explicit を書くことで、未宣言の変数を使ったときに実行前にエラーで気づけるようになります。

実装するメリット

  • スペルミスをすぐに発見できる
  • 無意識の変数の使い回しを防げる
  • 実行前に不具合の予兆をつかめる

型の違いによる思わぬ不具合に注意

次によくあるのが、「変数の型」によるミスです。特に StringLongDouble などの数値型の混在があると、エラーや意図しない動作につながります。

Dim qty As String
qty = "10"
MsgBox qty * 2  ' 文字列 × 数値:動くけれど危険

このように、Excel VBA は柔軟すぎるゆえに、型が違っても動いてしまう場面があります。しかし実務では、数式ミスやデータ不整合の原因になるため、変数には明確に型を指定しましょう。

また、次のように型が違うとエラーになるケースもあります。

Dim total As Long
total = "ABC"  ' ← 実行時エラー

こうした不具合を防ぐには、正確な型の宣言と、入力値チェックがポイントです。

Dim qty As Long
If IsNumeric(Cells(2, 1).Value) = True Then
    qty = Cells(2, 1).Value
Else
    MsgBox "数値を入力してください"
End If

実装するメリット

  • 型の不一致による不具合を防げる
  • 計算結果の信頼性が高まる
  • 入力ミスに強いマクロになる

値が入っていないまま処理していないか

変数に「何も代入していない」状態で処理を進めてしまうのも、非常にありがちなミスです。

Dim t As Date
If t > TimeValue("09:00") Then
    MsgBox "遅刻"
End If

このコードでは、t に値が入っていないのに比較しています。結果、0時(=0)と比較されてしまい、想定外の動きになります。

変数には、使う前に必ず値がセットされているか確認しましょう。

Dim t As Date
t = Cells(2, 1).Value

If t <> 0 Then
    If t > TimeValue("09:00") Then
        MsgBox "遅刻"
    End If
Else
    MsgBox "時間が未入力です"
End If

実装するメリット

  • 初期化忘れによる誤動作を防止
  • 入力ミスに柔軟に対応できる
  • 条件判定の精度が向上する

まとめ

変数に関するバグは、VBA初心者だけでなく実務の現場でもよく起こるトラブルの1つです。小さなミスが大きな集計ミスやトラブルにつながるため、コードを書く前・書いた後に変数まわりをしっかりチェックする習慣が重要です。

  • Option Explicit で宣言漏れを防ぐ
  • 型の不一致に注意し、必要なら IsNumeric などでチェック
  • 初期化されていない変数を使わないよう注意する
  • 入力チェック・条件分岐を適切に行う

マクロが思った通りに動かないときは、まず変数まわりを疑う。それがトラブル回避の第一歩です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール