VBA MsgBoxの戻り値(VbMsgBoxResult)

✅ 基本的な仕組み

Dim result As VbMsgBoxResult
result = MsgBox("保存しますか?", vbYesNoCancel + vbQuestion, "確認")

Select Case result
Case vbYes
' 保存処理
Case vbNo
' 保存しない処理
Case vbCancel
' キャンセル処理
End Select

このように、MsgBox の戻り値は VbMsgBoxResult 型の値となり、vbYes などの定数と比較して使います。


🧾 VbMsgBoxResult の定数一覧

定数名対応するボタン使用されるボタンの組み合わせ
vbOK1OKvbOKOnly, vbOKCancel
vbCancel2キャンセルvbOKCancel, vbRetryCancel, vbYesNoCancel
vbAbort3中止vbAbortRetryIgnore
vbRetry4再試行vbAbortRetryIgnore, vbRetryCancel
vbIgnore5無視vbAbortRetryIgnore
vbYes6はいvbYesNo, vbYesNoCancel
vbNo7いいえvbYesNo, vbYesNoCancel

※ これらの値は整数型(Integer)であり、比較や代入に使用されます。


🧪 使用例

1. ユーザーの応答で処理を分岐

Dim res As VbMsgBoxResult
res = MsgBox("上書き保存しますか?", vbYesNoCancel + vbQuestion, "確認")

If res = vbYes Then
MsgBox "保存しました。", vbInformation
ElseIf res = vbNo Then
MsgBox "保存しませんでした。"
ElseIf res = vbCancel Then
MsgBox "操作をキャンセルしました。"
End If

2. 中止/再試行/無視

Dim res As VbMsgBoxResult
res = MsgBox("エラーが発生しました。どうしますか?", vbAbortRetryIgnore + vbCritical)

Select Case res
Case vbAbort
MsgBox "処理を中止します。"
Case vbRetry
MsgBox "もう一度実行します。"
Case vbIgnore
MsgBox "無視して続行します。"
End Select

🔄 MsgBox と VbMsgBoxResult の関係まとめ

MsgBox のボタン指定クリック結果の VbMsgBoxResult
vbOKOnlyvbOK
vbOKCancelvbOK, vbCancel
vbYesNovbYes, vbNo
vbYesNoCancelvbYes, vbNo, vbCancel
vbAbortRetryIgnorevbAbort, vbRetry, vbIgnore
vbRetryCancelvbRetry, vbCancel

🛑 注意点

注意点説明
MsgBox のボタンにより返される値が異なる指定しないボタンの戻り値を比較しても無意味
数字(1~7)で比較可能だが非推奨vbYes, vbNo などの定数名を使った方が可読性が高い
型の宣言に VbMsgBoxResult を使うと明確Dim res As VbMsgBoxResult は可読性を向上させる

🧠 応用:関数として汎用化するサンプル

Function UserConfirm(message As String) As Boolean
Dim res As VbMsgBoxResult
res = MsgBox(message, vbYesNo + vbQuestion, "確認")
UserConfirm = (res = vbYes)
End Function

Sub Test()
If UserConfirm("続けますか?") Then
MsgBox "処理を続行します。"
Else
MsgBox "処理を中断しました。"
End If
End Sub

📌 まとめ

要素内容
目的MsgBox で押されたボタンを識別するため
定数の戻り値vbYes, vbNo, vbCancel, vbRetry など
使用例ユーザー確認、処理分岐、警告応答
推奨される比較方法数値比較ではなく vb~ 定数で比較する
よく使う組み合わせvbYesNoCancel + vbQuestion など
タイトルとURLをコピーしました