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マクロが一気に安全で使いやすいものになります。
特に、削除や上書きなど重要な処理の前には、ぜひ確認メッセージを入れてみてください。


コメント