- ベストアンサー
エクセルVBA if、Elseifの使い方について
- エクセルVBAでif、Elseifを使って条件分岐する方法についてわかりません。具体的な質問は、A列の最大値によって表示されるメッセージを場合分けするというものです。最大値が1〜9の場合は「終了します」というメッセージを表示し、最大値が0の場合は「該当なし。シートを削除しますか?」のメッセージを表示し、最大値が10の場合は「すべて選択しています。シートを削除しますか?」のメッセージを表示します。また、メッセージをクリックした結果に応じて、処理を行う方法も知りたいです。
- 最大値が1〜9の場合は成功するが、最大値が0の場合や10の場合に「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方のメッセージが表示されてしまいます。最大値が0の場合は「該当なし。シートを削除しますか?」のメッセージのみが表示されるようにしたいです。
- 最大値が0の場合や10の場合に「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方のメッセージが表示されるのは、条件分岐の記述に問題があるためです。最大値が0の場合は、最初のIf文の条件に該当するため、その後のElseif文が実行されません。最大値が0の場合でも、条件に該当するElseif文が実行されるように、条件分岐の記述を修正してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ElseIf maxval = 0 Then If vbYes = MsgBox("該当なし。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True End If ElseIf maxval = 10 Then If And vbYes = MsgBox("すべて選択しています。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True End If End If のように maxvalが0や10の時だけMsgBoxを呼び出すようにします。 If maxval = 0 And vbYes = MsgBox("該当なし。シートを削除しますか?", vbYesNo) だと、maxvalの値に無関係にMsgBoxが呼び出されますよ。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>それぞれのメッセージしか表示されないようにするにはどうしたらよいのでしょうか。 それぞれのメッセージを表示したら「そこでちゃんと終わる」ようにしておいてもできます。 Dim maxval As Long maxval = Application.Max(sheet1.Range("A:A")) If maxval >= 1 And maxval <= 9 Then MsgBox " 終了します" exit sub ElseIf maxval = 0 And vbYes = MsgBox("該当なし。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True exit sub ElseIf maxval = 10 And vbYes = MsgBox("すべて選択しています。シートを削除しますか?", vbYesNo) Then Application.DisplayAlerts = False sheet1.Delete Application.DisplayAlerts = True exit sub End If End Sub
お礼
回答ありがとうございます exit subは全く思いつきませんでした ありがとうございました
お礼
早速の回答ありがとうございます 解決しました andでつないでいるため、なぜMsgboxだけが毎回表示されるのか分かりませんでした