【ExcelVBA・マクロ】MsgBoxのボタン(Yes/No)を使う完全ガイド|確認メッセージの作り方と分岐処理【コピペOK】

MsgBoxのボタン(Yes/No)を使う完全ガイド ExcelVBA

VBAでマクロを作っていると、次のような確認をしたい場面はありませんか?

  • 「本当に削除しますか?」と確認したい
  • 「続行しますか?」とユーザーに選ばせたい
  • Yesなら実行、Noなら中止したい

このような場合に使うのが MsgBox の Yes / No ボタンです。
確認メッセージを入れるだけで、マクロが安全で使いやすくなります。

この記事では、MsgBoxのボタンの使い方を初心者向けに、基本から実務で使える形までまとめて解説します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • MsgBoxでYes / Noボタンを表示できる
  • 押されたボタンで処理を分岐できる
  • Yes / No / Cancel の使い方が分かる
  • 実務で使える確認メッセージを作れる

まず結論:Yes / No を使う基本形

一番基本の書き方はこちらです。

Option Explicit

Sub MsgBoxYesNo_Basic()

    Dim result As VbMsgBoxResult

    result = MsgBox("処理を実行しますか?", vbYesNo + vbQuestion, "確認")

    If result = vbYes Then
        MsgBox "Yesが押されました。"
    Else
        MsgBox "Noが押されました。"
    End If

End Sub

これで、Yes / No ボタン付きの確認メッセージを出し、
押されたボタンによって処理を変えられます。


MsgBoxの基本構文

MsgBox(メッセージ, ボタンの種類, タイトル)

例えば今回の例では、

  • メッセージ → 処理を実行しますか?
  • ボタンの種類 → vbYesNo + vbQuestion
  • タイトル → 確認

となっています。


Yes / No ボタンを表示するには?

Yes / No ボタンを出すには、vbYesNo を使います。

MsgBox "続行しますか?", vbYesNo

これだけでもYes / No ボタンが表示されます。


押されたボタンを判定するには?

MsgBoxの戻り値を変数に入れて判定します。

Dim result As VbMsgBoxResult
result = MsgBox("続行しますか?", vbYesNo)

そして、次のように判定します。

If result = vbYes Then
    ' Yesのとき
Else
    ' Noのとき
End If

一番よく使う実務パターン

削除や上書きなど、危険な処理の前に確認を出すパターンです。

Option Explicit

Sub ConfirmDelete()

    Dim result As VbMsgBoxResult

    result = MsgBox("本当に削除しますか?", vbYesNo + vbExclamation, "削除確認")

    If result = vbYes Then
        MsgBox "削除処理を実行します。"
        ' ここに削除処理を書く
    Else
        MsgBox "処理を中止しました。"
    End If

End Sub

この形は実務で非常によく使います。


アイコンを付けると分かりやすい

MsgBoxには、ボタンだけでなくアイコンも付けられます。

定数意味
vbInformation情報
vbExclamation注意
vbCriticalエラー
vbQuestion確認

例えば、確認メッセージなら次が見やすいです。

MsgBox "処理を実行しますか?", vbYesNo + vbQuestion, "確認"

Yes / No / Cancel を使う方法

「No」だけでなく「キャンセル」も付けたい場合は、vbYesNoCancel を使います。

Option Explicit

Sub MsgBoxYesNoCancel()

    Dim result As VbMsgBoxResult

    result = MsgBox("保存してから閉じますか?", vbYesNoCancel + vbQuestion, "確認")

    Select Case result
        Case vbYes
            MsgBox "保存します。"

        Case vbNo
            MsgBox "保存せず閉じます。"

        Case vbCancel
            MsgBox "処理を中止しました。"
    End Select

End Sub

この場合は Select Case で分岐すると分かりやすいです。


デフォルトの選択ボタンを変える方法

Enterキーを押したときに選ばれるボタン(初期選択)も変更できます。

MsgBox "処理を実行しますか?", vbYesNo + vbDefaultButton2 + vbQuestion

この場合、最初に選ばれるのはNoボタンです。

主な定数は次の通りです。

  • vbDefaultButton1 → 1番目のボタン
  • vbDefaultButton2 → 2番目のボタン
  • vbDefaultButton3 → 3番目のボタン

削除確認などでは、誤操作防止のために Noを初期選択 にすることがあります。


実務でよくある使い方3選

① 上書き確認

If MsgBox("上書き保存しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
    ThisWorkbook.Save
End If

② 削除確認

If MsgBox("本当に削除しますか?", vbYesNo + vbExclamation, "削除確認") = vbYes Then
    Rows(2).Delete
End If

③ 処理の続行確認

If MsgBox("処理を続行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then
    Exit Sub
End If

MsgBoxを1行で書く方法

簡単な分岐なら、次のように1行でも書けます。

If MsgBox("実行しますか?", vbYesNo + vbQuestion) = vbYes Then
    MsgBox "実行します。"
End If

短く書けますが、長くなると読みにくいので、実務では変数に入れる書き方もおすすめです。


よくあるミス

① 戻り値を取っていない

次のように書くと、ボタンは出せますが押された結果で分岐できません。

MsgBox "実行しますか?", vbYesNo

判定したい場合は、必ず変数かIf文で受け取ります。

② vbYes と “Yes” を混同している

判定には文字列の "Yes" ではなく、定数の vbYes を使います。

❌ NG

If result = "Yes" Then

✅ 正解

If result = vbYes Then

③ コードは正しいのにエラーになる

Webからコピーしたコードでは、全角記号や見えない特殊文字が混ざることがあります。
その場合は、エラーの出ている行を削除して手入力し直すと直ることがあります。


まとめ

  • Yes / No ボタンは vbYesNo で表示できる
  • 押された結果は vbYes / vbNo で判定する
  • 実務では削除確認・保存確認・続行確認でよく使う
  • アイコンや初期選択ボタンも設定できる

MsgBoxのYes / Noを使いこなせるようになると、
VBAマクロが一気に安全で使いやすいものになります。
特に、削除や上書きなど重要な処理の前には、ぜひ確認メッセージを入れてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました