• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA if、Elseifの使い方について)

エクセルVBA if、Elseifの使い方について

このQ&Aのポイント
  • エクセルVBAでif、Elseifを使って条件分岐する方法についてわかりません。具体的な質問は、A列の最大値によって表示されるメッセージを場合分けするというものです。最大値が1〜9の場合は「終了します」というメッセージを表示し、最大値が0の場合は「該当なし。シートを削除しますか?」のメッセージを表示し、最大値が10の場合は「すべて選択しています。シートを削除しますか?」のメッセージを表示します。また、メッセージをクリックした結果に応じて、処理を行う方法も知りたいです。
  • 最大値が1〜9の場合は成功するが、最大値が0の場合や10の場合に「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方のメッセージが表示されてしまいます。最大値が0の場合は「該当なし。シートを削除しますか?」のメッセージのみが表示されるようにしたいです。
  • 最大値が0の場合や10の場合に「該当なし。シートを削除しますか?」と「すべて選択しています。シートを削除しますか?」の両方のメッセージが表示されるのは、条件分岐の記述に問題があるためです。最大値が0の場合は、最初のIf文の条件に該当するため、その後のElseif文が実行されません。最大値が0の場合でも、条件に該当するElseif文が実行されるように、条件分岐の記述を修正してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

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が呼び出されますよ。

kidibotkbg
質問者

お礼

早速の回答ありがとうございます 解決しました andでつないでいるため、なぜMsgboxだけが毎回表示されるのか分かりませんでした

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>それぞれのメッセージしか表示されないようにするにはどうしたらよいのでしょうか。 それぞれのメッセージを表示したら「そこでちゃんと終わる」ようにしておいてもできます。 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

kidibotkbg
質問者

お礼

回答ありがとうございます exit subは全く思いつきませんでした ありがとうございました