3択のメッセージを表示

MsgBox関数で最大の3択の対話型条件分岐を行うコード

'「中止・再試行・無視」ボタンで分岐
Select Case MsgBox(Prompt:="データ欠損!(無視で強制起動)", Buttons:=vbAbortRetryIgnore)
Case vbAbort
'中止をクリックしたときの処理
Case vbRetry
'再試行をクリックしたときの処理
Case Else
'それ以外(無視)をクリックしたときの処理
End Select
'「はい・いいえ・キャンセル」ボタンで分岐
Select Case MsgBox(Prompt:="データを上書きします(いいえで新規追加)", Buttons:=vbYesNoCancel)
Case vbYes
'はいをクリックしたときの処理
Case vbNo
'いいえをクリックしたときの処理
Case Else
'それ以外(×ボタンかキャンセル)をクリックしたときの処理
End Select

「MsgBox」関数では最大3択のボタンを表示することが出来ます
そのボタンによって対話型のより複雑な処理分岐が可能になります
(MsgBoxの基本の使い方についてはこちら)

また2択ではIf分岐を使用しましたが、ここではSelect分岐を使用します
それぞれのボタン名で分岐の処理を行います
(Select分岐の解説はこちら)

3択には2種類あります

「中止・再試行・無視」の3択のメッセージを表示する
1つ目のコード実行時

引数「Buttons」に「vbAbortRetryIgnore」を指定すると「中止・再試行・無視」の3択になります
それぞれの各大文字部分からがボタンの名前です
なので戻り値の定数もその名前で指定すればいいだけです
また、キャンセルボタンが無いので×ボタンが使用不可になっています(グレー表示になり無効状態)

「はい・いいえ・キャンセル」の3択のメッセージを表示する
2つ目のコード実行時

「vbYesNoCancel」を指定すると「はい・いいえ・キャンセル」の3択になります

単純に2択にあった「はい・いいえ」にキャンセルが追加されただけです

2択の時には無かったキャンセルボタンが追加されたことで、ここでは×ボタンが使用可能になっています
×ボタンとキャンセルは同じ操作とみなされます

数値などの分岐で多数分岐はいくらでもありますが、対話型分岐の3択処理分岐というのはなかなか無いのでシチュエーションが難しかったです
まあ要は2通りの処理と、処理自体のキャンセルという流れになりますがなかなかないで~