VBAを実行していると、次のようなエラーが出たことはありませんか?
コンパイルエラー:定数式が必要です
このエラーは初心者だけでなく、中級者でもよく遭遇するエラーの1つです。
特にSelect Case文やConst(定数)を使っているときに発生しやすいのが特徴です。
また、原因が分かりにくいケースとして、コード自体は正しいのにエラーが出ることもあります。
この記事では、原因と解決方法に加えて、コピペで直るケースの対処法も含めて解説します。
この記事でわかること
- 「定数式が必要です」エラーの意味
- よくある原因(4パターン)
- エラーの正しい修正方法
- コピペで直るケースの対処法
エラーの意味とは?
「定数式が必要です」とは、
「ここには固定値(定数)しか使えません」
という意味です。
つまり、次のような場合にエラーになります。
- 変数を使ってはいけない場所で使っている
- 計算式を使っている
- 関数を使っている
原因①:Select Caseで変数を使っている
❌ エラーになるコード
Dim x As Long
x = 10
Select Case 5
Case x
MsgBox "一致"
End Select
✅ 修正方法
Select Case 5
Case 10
MsgBox "一致"
End Select
原因②:Constに変数を使っている
❌ エラーになるコード
Dim x As Long
x = 5
Const num As Long = x
✅ 修正方法
Const num As Long = 5
原因③:関数を使っている
❌ エラーになるコード
Const today As Date = Date
✅ 修正方法
Dim today As Date
today = Date
原因④:Case文の範囲に変数を使っている
❌ エラーになるコード
Dim minVal As Long
minVal = 10
Select Case 15
Case minVal To 20
MsgBox "範囲内"
End Select
✅ 修正方法
If 15 >= minVal And 15 <= 20 Then
MsgBox "範囲内"
End If
原因⑤:コード自体は正しいのにエラーが出る(よくある落とし穴)
実は、コードに問題がなくてもこのエラーが出ることがあります。
その原因として多いのが以下です。
- 全角文字が混ざっている
- 見えない特殊文字が含まれている
- HTMLやWebからコピーしたコード
対処法:コードをコピペし直すと直るケース
このエラーで非常に多いのが、コードの文字が壊れているケースです。
特に次のようなコードは要注意です。
- ブログやWebサイトからコピーしたコード
- ChatGPTなどからコピーしたコード
- メールやPDFからコピーしたコード
見た目は同じでも、内部的に違う文字になっていることがあります。
具体的な対処方法
次の手順を試してください。
- 該当行をすべて削除する
- キーボードで手入力し直す
- または、信頼できるコードを再コピーする
特に以下の記号は壊れやすいです。
- <(小なり)
- >(大なり)
- =(イコール)
- To(範囲指定)
例えば、見た目は同じでも次のように違うことがあります。
- 半角の< と 全角の<
- 半角の= と 全角の=
この場合、VBAは別の文字として認識するためエラーになります。
よくある勘違い
- コードが正しければ必ず動くとは限らない
- 見た目が同じでも内部文字が違うことがある
- コピペが原因でエラーになることも多い
エラーを防ぐコツ
- コードはできるだけ手入力する
- 記号は半角で入力する
- エラー箇所は一度削除して書き直す
まとめ
- 「定数式が必要です」は定数しか使えない場所で発生する
- Case文・Constでよく起きる
- 変数や関数は使えない
- コードが正しくても文字化けでエラーになることがある
- その場合はコピペし直すと解決することがある
このエラーは「仕様」と「文字問題」の両方が原因になります。
特にコピペ由来のエラーは非常に多いので、一度書き直すという対処法も覚えておくと便利です。


コメント