VBA(Visual Basic for Applications)でプログラムを実行しようとしたとき、突然「コンパイルエラー:同じ適用範囲内で宣言が重複している」というエラーメッセージが表示されることがあります。
初心者の方はもちろん、普段からVBAを使用されている方でも、このエラーに戸惑うことがあるかもしれません。本記事ではこのエラーの意味と原因、そして解決方法をわかりやすく解説いたします。
目次
エラーの概要:「同じ適用範囲内で宣言が重複している」とは?
このコンパイルエラーは、同一スコープ(適用範囲)内で同じ名前の変数・定数・プロシージャ(SubやFunction)を複数回宣言してしまった場合に発生します。
例:変数名の重複
Dim i As Long
Dim i As Integer ' ← 同じ名前の変数をもう一度宣言しているためエラー
例:プロシージャ名の重複
Sub ProcessData()
End Sub
Sub ProcessData() ' ← 同じ名前のSubが存在しているためエラー
End Sub
よくある原因と注意点
原因 | 説明 |
---|---|
変数の二重宣言 | 同じ関数やモジュールの中で、同じ名前の変数を Dim で繰り返し定義している |
関数・サブルーチンの重複 | 同一モジュール内に、同名のSubやFunctionが2つ以上存在している |
名前の競合 | グローバル変数やプロパティとローカル変数の名前がかぶっている |
外部参照との衝突 | ライブラリ間で同じ名前のオブジェクトや定数が存在している(例:MSFormsなど) |
解決方法
以下の方法で、エラーを確実に解消できます。
1. 同じ名前で変数を再宣言しない
' NG
Dim count As Long
Dim count As Integer ' ← 重複している
' OK
Dim count As Long
Dim totalCount As Integer
サブルーチンや関数の名前を一意にする
' NG
Sub ExportData()
End Sub
Sub ExportData() ' ← 名前が重複している
' OK
Sub ExportData()
End Sub
Sub ExportDataToCSV()
End Sub
3. Option Explicit
を活用する
モジュールの冒頭に Option Explicit
を記述することで、すべての変数を明示的に宣言することが義務化され、誤った再宣言やスペルミスを防ぐことができます。
まとめ:エラーを防ぐには「命名ルール」と「整理されたコード」が重要
「コンパイルエラー:同じ適用範囲内で宣言が重複している」は、VBAのコードが複雑になるほど起こりやすくなるエラーの一つです。
一つのスコープ内で同じ名前を使わないこと、プロシージャごとに役割を明確に分けることが、予防の鍵です。
コードを書いている最中にこのエラーが発生した場合は、落ち着いて変数やプロシージャの名前が重複していないかを確認してみてください。