「同じ適用範囲内で宣言が重複しています。」の原因・解決方法

エラー内容

VBAコンパイル時に、「同じ適用範囲内で宣言が重複しています。」と表示される。

原因と解決方法

1つの原因と、その解決方法が考えられます。

原因1. 同じ名前の変数や定数が定義されている

解説

同じプロシージャ(subやfunction)内で、同じ名前の変数や定数が定義されていることがエラー原因です。

プログラムをコピーして作った時に、よく使う変数名がかぶって起こりやすいですね。

サンプルソースだと、処理1と2の処理で、for分でよく使われる変数名iがかぶってます。

 

解決方法

名前がかぶっている変数の名前を変更します。

この時、対応する処理の変数名もあわせて変更しないといけないので注意が必要です。

サンプルソースの場合、2回目の変数定義iを別名jに変えます。
あわせて以降の処理も、変数をjに変更します。

 

2回目の定義Dim i As Longを削除して、変数iを「処理1、2」で使いまわしてもエラーは解決できます。

でも変数の使いまわしは、バグの原因になったり、コードが見にくくなるので、できれば変数名を修正しましょう!

For文の変数iやjは正直使いまわすことはよくあり、ギリセーフとも言えます・・・

 

「同じ適用範囲内で」について

エラーメッセージは「同じ適用範囲内で」となっているので、違うプロシージャ(subやfunction)で同じ名前の変数を定義するのはOKです。

「適用範囲」と言うのは、その定義された変数が使える範囲のことです。

プロシージャ内でDim定義された変数は、それぞれのプロシージャ内でしか使えません。
なので、同じ変数名がそれぞれのプロシージャ内にあってもエラーになりません。

 

関連記事

VBAエラー原因・解決方法
成果を出す5つのポイント
VBAエラー原因・解決方法
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました