ダイアログボックスに表示するボタンの種類を選択する

MsgBox 関数を使ってダイアログボックスを作成する場合、あらかじめ用意された種類の中から使用するボタンの種類を選択することができます。メッセージや注意を表示する場合はダイアログボックスを閉じるための「OK」ボタンだけあればいいですが、ファイル削除の確認などの場合は「はい」や「いいえ」などのボタンを表示します。ここでは Excel VBA でダイアログボックスに表示するボタンの種類を選択する方法について解説します。

※ ダイアログボックスを作成する方法については「MsgBox関数を使ったダイアログボックスの表示」を参照されてください。

(Last modified: )

ダイアログボックスのボタンの種類を選択する

MsgBox 関数では省略可能な 2 番目の引数にボタンの種類を設定することができます。

MsgBox (prompt, buttons)

設定可能な種類は次の通りです。

定義済み定数説明
vbOKOnly0「OK」ボタン
vbOKCancel1「OK」、「キャンセル」ボタン
vbAbortRetryIgnore2「中止」、「再試行」、「無視」
vbYesNoCancel3「はい」、「いいえ」、「キャンセル」
vbYesNo4「はい」、「いいえ」
vbRetryCancel5「再試行」、「キャンセル」

省略した場合のデフォルトは vbOKOnly となっており「OK」ボタンだけが表示されます。

いずれかのボタンがダイアログボックスでクリックされると、 MsgBox 関数の戻り値としてクリックされたボタンを表す値が返されます。どのボタンをクリックするとどの値が返ってくるのかは次のように定義されています。

定義済み定数説明
vbOK1「OK」ボタン
vbCancel2「キャンセル」ボタン
vbAbort3「中止」ボタン
vbRetry4「再試行」ボタン
vbIgnore5「無視」ボタン
vbYes6「はい」ボタン
vbNo7「いいえ」ボタン

例えば「vbOKCancel」ボタンを使ったダイアログボックスを表示した場合、ボタンは「OK」と「キャンセル」が表示されます。どちらのボタンがクリックされたのかを判定するには次のように記述することができます。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("実行しますか?", vbOKCancel)

    If ans = vbOK Then
        'OKボタンがクリックされたときの処理
    Else
        'キャンセルボタンがクリックされたときの処理
    End If
End Sub

それではボタンの種類を指定したときに実際にどのように表示されるのか確認してみます。

vbOKOnly(OKボタン)

MsgBox 関数の 2 番目の引数を省略するか、または vbOKOnly を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("完了しました", vbOKOnly)
End Sub

vbOKOnly(OKボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「OK」ボタンだけが表示されます。

vbOKOnly(OKボタン)(2)

vbOKCancel(OKボタン、キャンセルボタン)

MsgBox 関数の 2 番目の引数に vbOKCancel を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("保存してよろしいでしょうか?", vbOKCancel)
End Sub

vbOKCancel(OKボタン、キャンセルボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「OK」ボタンと「キャンセル」ボタンが表示されます。

vbOKCancel(OKボタン、キャンセルボタン)(2)

vbAbortRetryIgnore(中止ボタン、再試行ボタン、無視ボタン)

MsgBox 関数の 2 番目の引数に vbAbortRetryIgnore を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("失敗しました。再度実行しますか?", vbAbortRetryIgnore)
End Sub

vbAbortRetryIgnore(中止ボタン、再試行ボタン、無視ボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「中止」ボタン、「再試行」ボタン、「無視」ボタンが表示されます。

vbAbortRetryIgnore(中止ボタン、再試行ボタン、無視ボタン)(2)

vbYesNoCancel(はいボタン、いいえボタン、キャンセルボタン)

MsgBox 関数の 2 番目の引数に vbYesNoCancel を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("ファイルを削除します。宜しいですか?", vbYesNoCancel)
End Sub

vbYesNoCancel(はいボタン、いいえボタン、キャンセルボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「はい」ボタン、「いいえ」ボタン、「キャンセル」ボタンが表示されます。

vbYesNoCancel(はいボタン、いいえボタン、キャンセルボタン)(2)

vbYesNo(はいボタン、いいえボタン)

MsgBox 関数の 2 番目の引数に vbYesNo を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("終了します。宜しいですか?", vbYesNo)
End Sub

vbYesNo(はいボタン、いいえボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「はい」ボタンと「いいえ」ボタンが表示されます。

vbYesNo(はいボタン、いいえボタン)(2)

vbRetryCancel(再試行ボタン、キャンセルボタン)

MsgBox 関数の 2 番目の引数に vbRetryCancel を指定した場合です。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("ファイルの読み込みに失敗しました", vbRetryCancel)
End Sub

vbRetryCancel(再試行ボタン、キャンセルボタン)(1)

このプログラムを実行すると次のようなダイアログボックスが表示され「再試行」ボタンと「キャンセル」ボタンが表示されます。

vbRetryCancel(再試行ボタン、キャンセルボタン)(2)

デフォルトボタンを設定する

複数のボタンが表示されるダイアログボックスを作成した場合、一番左に表示されているボタンがデフォルトボタンとなります。例えば MsgBox 関数の 2 番目の引数に vbYesNoCancel を指定した場合は「はい」ボタンがデフォルトボタンとなっており、 Enter キーを押すと「はい」がクリックされたのと同じ結果となります。

デフォルトボタンを設定する(1)

デフォルトボタンを別のボタンに設定する場合、省略可能な 2 番目の引数でボタンの種類とあわせてデフォルトボタンを設定します。

設定可能な種類は次の通りです。

定義済み定数説明
vbDefaultButton101 番目のボタン
vbDefaultButton22562 番目のボタン
vbDefaultButton35123 番目のボタン
vbDefaultButton47684 番目のボタン

例えば vbYesNoCancel ボタンと vbDefaultButton2 アイコンを使ったダイアログボックスを表示する場合、 MsgBox の 2 番目の引数に次のように記述します。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("ファイルを削除します。宜しいですか?", vbYesNoCancel + vbDefaultButton2)
End Sub

又は Or 演算子を使って次のように記述してもいいです。

Option Explicit

Sub MsgBox関数()
    Dim res As Integer
    res = MsgBox("ファイルを削除します。宜しいですか?", vbYesNoCancel Or vbDefaultButton2)
End Sub

どちらの方法であっても今回の場合は vbYesNoCancel の値は 3 で vbQuestion の値は 256 のため、 2 番目の引数は 259 となります。

それでは実際にプログラムを実行してみます。

デフォルトボタンを設定する(2)

2 番目のボタンがデフォルトボタンになっているのが確認できます。

-- --

Excel VBA でダイアログボックスに表示するボタンの種類を選択する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。