【メッセージボックス】MsgBox関数
今回の目標
- メッセージボックスを表示させ、アイコンやタイトルを変更する。
- メッセージボックスの戻り値によって処理を分岐させる。
説明
メッセージを表示する
メッセージボックス関数の使い方についてです。
Microsoft公式は基本構文は下記のとおりに使用します。
MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])
Msgbox関数の引数についてです。
引数名 | 省略可能か | 役割 |
---|---|---|
prompt | 不可 | メッセージボックスのメインに表示する文字。省略不可。 |
buttons | 可能 | メッセージボックスに表示するボタンとアイコンを指定する。引数の省略可能で、省略時はアイコンはなく、「OK」ボタンのみ表示される。 |
title | 可能 | メッセージボックスのタイトルに表示する文字。 引数の省略可能。省略時は[Microsoft Excel]と表示される。 |
helpfile | 可能 | 通常のメッセージ表示では指定せず、エラー発生時等のヘルプファイルを開く時のみ本引数を指定する。 第二引数[buttons]に"vbMsgBoxHelpButton"を指定する必要がある。例外処理を熟知している必要があり、本引数には Err.HelpFile を指定する※。 |
context | 可能 | 通常のメッセージ表示では指定せず、エラー発生時等のヘルプファイルを開く時のみ本引数を指定する。 第四引数[helpfile]と同様に、第二引数[buttons]に"helpfile"を指定する必要がある。例外処理を熟知している必要があり、本引数には Err.HelpContext を指定する※。 |
例外処理の【メッセージボックスにエラーのヘルプを用意する】を参照ください。
最も簡単なサンプルです。
省略可能な引数は全て省略しています。
Sub Sample_MsgBox1()
MsgBox "マクロが実行されました。"
End Sub
上記サンプルを実行すると、下図が表示されます。
メッセージボックスにアイコンを表示させる
メッセージボックスにアイコンを表示させます。
Sub Sample_MsgBox2()
MsgBox "マクロが実行されました", vbInformation
End Sub
下記の図が表示されます。
vbInformationで「ⅰ」のアイコンが表示されます。
第二引数で、どのアイコンを表示するかを指定できます。
他のアイコンについては下表を参照してください。
定数 | アイコン | 使用用途 |
---|---|---|
vbInformation | ![]() | [ 情報メッセージ ] アイコンを表示します。 |
vbQuestion | ![]() | [ 問い合わせメッセージ ] アイコンを表示します。 |
vbCritical | ![]() | [ 重大なメッセージ ] アイコンを表示します。 |
vbExclamation | ![]() | [ 警告メッセージ ] アイコンを表示します。 |
「OK」以外のボタンを表示する
今回は「OK」ボタン以外のボタンを表示してみましょう。
表示する文字の後ろに「 , 」をつけ、『vbYesNo』と指定してみましょう。
下記のサンプルをコピペして実行しましょう。
Sub Sample_MsgBox3()
MsgBox "今日は晴れですか?", vbYesNo
End Sub
実行すると下の図が表示されます。
第二引数(buttons)に「vbYesNo」と指定したため、「OK」ボタンから「Yes」と「No」のボタンに変更されました。
「vbOKCancel」と指定すると「OK」と「キャンセル」の2つのボタンになります。
なお、ボタンの種類を指定しないと「vbOKOnly」と指定したと判断されるため、「OK」ボタンのみの表示となります。
ボタン一覧表を記載します。
定数 | 値 | 説明 |
---|---|---|
vbOKOnly | 0 | [ OK ] ボタンのみを表示します(デフォルトの設定) |
vbYesNo | 0 | [ はい ] 、 [ いいえ ] ボタンを表示します。 |
vbOKCancel | 1 | [ OK ] 、 [ キャンセル ] ボタンを表示します。 |
vbAbortRetryIgnore | 2 | [はい] 、 [いいえ] 、 [キャンセル] ボタンを表示します。 |
アイコンを表示させ、「OK」以外のボタンを表示する
アイコンと指定のボタンを表示する方法です。
第二引数に『アイコンの種類 + ボタンの種類』と指定します。
Sub Sample_MsgBox4()
MsgBox "今日は晴れですか?", vbYesNo + vbQuestion
End Sub
実行すると下の図が表示されます。
タイトルを変更する
メッセージボックスの左上に表示されているタイトルを変更します。
早速、サンプルプログラムをコピペして実行をしましょう。
Sub Sample_MsgBox5()
MsgBox "今日は晴れですか?", vbYesNo + vbQuestion, "お天気は・・・?"
End Sub
実行すると下の図が表示されます。左上のタイトルが「お天気は・・・?」になっていますね。
メッセージボックスの戻り値一覧(クリックしたボタンでの分岐処理)
メッセージボックスで戻り値(Long型)を取得することによって、どのボタンをクリックしたか判断できます。
戻り値を取得するため、MsgBoxの後ろに()で囲む必要があります。
Sub Sample_MsgBox6()
Dim ans As Long
ans = MsgBox("お寿司は好きですか?", vbYesNoCancel)
' 「はい」を選択したとき
If ans = vbYes Then
MsgBox "今度、一緒に行きましょう!"
' 「いいえ」を選択したとき
ElseIf ans = vbNo Then
MsgBox "では、焼肉に行きましょう!"
Else
MsgBox "キャンセルボタンがクリックされました。"
End If
End Sub
戻り値の一覧表です。
定数 | 値 | 説明 |
---|---|---|
vbOK | 1 | OKボタン |
vbCancel | 2 | Cancel |
vbAbort | 3 | 中止 |
vbRetry | 4 | 再試行 |
vbIgnore | 5 | 無視 |
vbYes | 6 | はい |
vbNo | 7 | いいえ |
メッセージボックスのボタンの規定値を変更する
メッセージボックスで複数のボタンを設置したとき、通常だと一番左のボタンが選択されています。
第二引数に特定の定数を加算することで変更することができます。
Sub Sample_MsgBox7()
MsgBox "スライムを仲間にしますか?", vbYesNoCancel + vbDefaultButton2
End Sub
規定値を変更するとキーボード操作しているユーザーはEnterを押すだけで済むようになるので、
少し楽になったり、誤操作が減ったりします。
ボタンの規定値の一覧表です。
定数 | 説明 |
---|---|
vbDefaultButton1 | 1番目のボタンを既定にします。(デフォルトの設定) |
vbDefaultButton2 | 2番目のボタンを既定にします。 |
vbDefaultButton3 | 3番目のボタンを既定にします。 |
vbDefaultButton4 | 4番目のボタンを既定にします。 |
確認テスト
次の問いに答えなさい。
-
メッセージボックスに文字列"処理が完了しました。"と表示させなさい。
【解答例】
Sub Test_MsgBox1() MsgBox "処理が完了しました。" End Sub
-
メッセージボックスに文字列"処理に失敗しました。"と表示させ、「×」のアイコンを表示させなさい。
【解答例】
Sub Test_MsgBox2() MsgBox "処理に失敗しました。", vbCritical End Sub
-
メッセージボックスに文字列"処理を続行しますか?"と表示させ、「?」のアイコンと「OK」および「キャンセル」のボタン表示させなさい。
【解答例】
Sub Test_MsgBox3() MsgBox "処理を続行しますか?", vbOKCancel + vbQuestion End Sub
-
メッセージボックスに文字列"処理が完了しました。"と表示させ、タイトルに「マクロVer1.0」と表示させなさい。このとき、アイコンは表示せず、ボタンは「OK」ボタンのみ表示させること。
【解答例】
この解答は主に答えが3通りあり、解答例1~3として記載しています。結果は全て同様です。どれか1つ作成できれば大丈夫です。
解答例1はボタン・アイコンを指定せず「, ,」を使用するパターンです。
Sub Test_MsgBox4_Ans1() MsgBox "処理が完了しました。", , "ツール Ver1.0" End Sub
解答例2は「Title:=」を使用する例です。
Sub Test_MsgBox4_Ans2() MsgBox "マクロVer1.0", Title:="ツール Ver1.0" End Sub
解答例3は「vbOKOnly」を使用する例です。
Sub Test_MsgBox4_Ans3() MsgBox "処理が完了しました。", vbOKOnly, "ツール Ver1.0" End Sub