「vba elseに対応するif文がありません」
「マクロ Elseに対応するIfがありません」
といった検索キーワードでアクセスが時折あります。
VBA初心者が遭遇する可能性のある、上図のような「Elseに対応するIfがありません。」コンパイルエラーの、発生する原因と対応方法を探していた方による検索です。
Elseに対応するIfがありませんエラーの発生するサンプルマクロ
以下のようなSubプロシージャが、「Elseに対応するIfがありません。」コンパイルエラーの、発生する代表です。
Dim ans As VbMsgBoxResult
ans = MsgBox("実行しますか?", vbOKCancel)
If ans = vbCancel Then Exit Sub
Else
' 何らかの処理
End If
上記のSubプロシージャを実行しようとしたり、[VBA Projectのコンパイル]を実行すれば、
「Elseに対応するIfがありません。」
コンパイルエラーが発生します。
Elseに対応するIfがありませんエラーの発生する原因
上記のSubプロシージャでは、
If ans = vbCancel Then Exit Sub
Else
' 何らかの処理
End If
と、「Then」の直後、「If」と同じ行に「Exit Sub」が書かれているために、Elseに対応するIfがありませんエラーとなります。
これを、
If ans = vbCancel Then
Exit Sub
Else
' 何らかの処理
End If
のような書き方にすれば、エラーは発生しなくなります。
エラーの発生する、
If ans = vbCancel Then Exit Sub
のような書き方では、この1行だけで、完結したElseの無いIf文とみなされてしまいます。完結した、
If ans = vbCancel Then Exit Sub
の後に、いきなり、
Else
が登場するので、「Elseに対応するIfがありません。」とコンパイルエラーが発生します。
「If ans = vbCancel Then Exit Sub」で完結しているため、「If 条件式 Then」がない状態、
Else
' 何らかの処理
End If
が、いきなり書かれているとみなされてしまうわけです。
条件分岐の構造を作るコードと処理を行うコードを意識しよう
Elseに対応するIfがありませんエラーを発生させてしまう方は、条件分岐の構造を作るコードと、分岐後の実際に処理を行うコードとの違いがクリアになってらっしゃらないのではないかと思います。
あるいは、If文などの複数行がセットになっているコードを、処理の構造を作るコードと、実際の処理を行うコードを区別することなく、上から順番に入力してらっしゃるのではないかと思います。
拙著『いちばんやさしいExcel VBAの教本』の、p.135以降の実習ページなどで、複数行がセットになっているコードは、上の行から入力するのではなく、セットになっているコードはまとめて入力することをおすすめしています。
またp.139では、複数行がセットになっているコードを書いたら[VBA Projectのコンパイル]を実行することをおすすめしています。
セットになっている構造を作るコードだけを入力した段階で(実際の処理を行うコードを書く前に)、コンパイルを実行してみましょう。
入力しているコードが、条件分岐の構造を作るコードなのか、処理を行うコードなのか強く意識しましょう。
最終更新日時:2018-11-20 07:46
- Newer:WEEKDAY関数の使い方を理解するなら
- Older:全角スペースを検索して位置を取得-FIND関数・SEARCH関数
Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » Elseに対応するIfがありません。エラーの発生する原因