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 値
vbOKOnly
vbOK
vbOKCancel
vbOK, vbCancel
vbYesNo
vbYes, vbNo
vbYesNoCancel
vbYes, vbNo, vbCancel
vbAbortRetryIgnore
vbAbort, vbRetry, vbIgnore
vbRetryCancel
vbRetry, 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