Excel VBAのプログラムで「Select Caseに対応するCaseがありません」エラーや「Select Case に対応する End Select がありません」エラーが発生することがあります。この記事では、このエラーを解決するための方法と注意点について解説します。特に、Do~LoopとSelect Caseを組み合わせたコードで発生することが多いので、原因と対策をしっかりと理解して解決しましょう。
1. エラーの原因:Select Caseの構造ミス
「Select Caseに対応するCaseがありません」というエラーは、Select Case構文内で条件に合致するCaseがない、または適切にEnd Selectが指定されていない場合に発生します。あなたのコードでは、(1)の部分にある「InStr」や「Offset」などが、Case内で正しく記述されていない可能性があります。VBAでは、Caseの条件として使用する式がTrueや変数、または関数でなければならないため、まずはこの点を確認してください。
2. 正しい構文:Select Caseの使い方
基本的に、Select Case構文は以下のように記述します。
Select Case Expression
Case Value1
'処理
Case Value2
'処理
End Select
この形式を守っていないと、エラーが発生します。あなたのコードの場合、「Case cx = Label14.Caption」のように条件式を適切に指定し、それぞれのCaseで処理を記述する必要があります。
3. エラーを防ぐための修正方法
「InStr」などの関数を使った条件を、適切にCase構文内に配置するためには、次のように変更します。
Do
Select Case True
Case cx < 1
Exit Do
Case cx = Label14.Caption
'処理
Case CheckBox5.Value = True
If Not (.Offset(cx, 1).Value = temp) Then
Exit Do
Case InStr(1, .Offset(cx, 1).Value, temp) = 0
'処理
End Select
Loop
この修正により、各Caseが正しく条件を評価できるようになり、エラーを防ぐことができます。
4. End Selectエラーの解決
「Select Case に対応する End Select がありません」というエラーが発生する原因は、コード内でSelect Caseが開始されているが、その対応するEnd Selectが不足していることです。必ず、Caseが終了した後に「End Select」を記述し、Select Case構文を閉じるようにしましょう。
5. まとめ:エラーを避けるために
VBAのコードで「Select Caseに対応するCaseがありません」や「End Selectがありません」などのエラーが発生した場合、構文ミスが原因であることが多いです。適切に条件式を指定し、End Selectを忘れずに追加することで、エラーを解決できます。また、エラーメッセージをしっかりと読み解き、どの部分に問題があるのかを把握することが重要です。プログラムを安定させるために、常に構文に注意しながらコードを修正していきましょう。


コメント