【メッセージボックス】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

上記サンプルを実行すると、下図が表示されます。
メッセージボックスのサンプルプログラム1の実行結果

メッセージボックスにアイコンを表示させる

メッセージボックスにアイコンを表示させます。

Sub Sample_MsgBox2()
    MsgBox "マクロが実行されました", vbInformation
End Sub

下記の図が表示されます。
メッセージボックスのサンプルプログラム1の実行結果
vbInformationで「ⅰ」のアイコンが表示されます。
第二引数で、どのアイコンを表示するかを指定できます。
他のアイコンについては下表を参照してください。

定数アイコン使用用途
vbInformation情報メッセージのアイコン[ 情報メッセージ ] アイコンを表示します。
vbQuestion問い合わせメッセージのアイコン[ 問い合わせメッセージ ] アイコンを表示します。
vbCritical重大なメッセージのアイコン[ 重大なメッセージ ] アイコンを表示します。
vbExclamation警告メッセージのアイコン[ 警告メッセージ ] アイコンを表示します。

「OK」以外のボタンを表示する

今回は「OK」ボタン以外のボタンを表示してみましょう。
表示する文字の後ろに「 , 」をつけ、『vbYesNo』と指定してみましょう。
下記のサンプルをコピペして実行しましょう。

Sub Sample_MsgBox3()
    MsgBox "今日は晴れですか?", vbYesNo
End Sub

実行すると下の図が表示されます。
メッセージボックスのサンプルプログラム1の実行結果
第二引数(buttons)に「vbYesNo」と指定したため、「OK」ボタンから「Yes」と「No」のボタンに変更されました。
「vbOKCancel」と指定すると「OK」と「キャンセル」の2つのボタンになります。
なお、ボタンの種類を指定しないと「vbOKOnly」と指定したと判断されるため、「OK」ボタンのみの表示となります。

ボタン一覧表を記載します。

定数説明
vbOKOnly0[ OK ] ボタンのみを表示します(デフォルトの設定)
vbYesNo0[ はい ] 、 [ いいえ ] ボタンを表示します。
vbOKCancel1[ OK ] 、 [ キャンセル ] ボタンを表示します。
vbAbortRetryIgnore2[はい] 、 [いいえ] 、 [キャンセル] ボタンを表示します。

アイコンを表示させ、「OK」以外のボタンを表示する

アイコンと指定のボタンを表示する方法です。
第二引数に『アイコンの種類 + ボタンの種類』と指定します。

Sub Sample_MsgBox4()
    MsgBox "今日は晴れですか?", vbYesNo + vbQuestion
End Sub
実行すると下の図が表示されます。
メッセージボックスのサンプルプログラム1の実行結果

タイトルを変更する

メッセージボックスの左上に表示されているタイトルを変更します。
早速、サンプルプログラムをコピペして実行をしましょう。

Sub Sample_MsgBox5()
    MsgBox "今日は晴れですか?", vbYesNo + vbQuestion, "お天気は・・・?"
End Sub

実行すると下の図が表示されます。左上のタイトルが「お天気は・・・?」になっていますね。
メッセージボックスのサンプルプログラム1の実行結果

メッセージボックスの戻り値一覧(クリックしたボタンでの分岐処理)

メッセージボックスで戻り値(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

戻り値の一覧表です。

定数説明
vbOK1OKボタン
vbCancel2Cancel
vbAbort3中止
vbRetry4再試行
vbIgnore5無視
vbYes6はい
vbNo7いいえ

メッセージボックスのボタンの規定値を変更する

メッセージボックスで複数のボタンを設置したとき、通常だと一番左のボタンが選択されています。
第二引数に特定の定数を加算することで変更することができます。

Sub Sample_MsgBox7()
    MsgBox "スライムを仲間にしますか?", vbYesNoCancel + vbDefaultButton2
End Sub

規定値を変更するとキーボード操作しているユーザーはEnterを押すだけで済むようになるので、
少し楽になったり、誤操作が減ったりします。
メッセージボックスのサンプルプログラム7の実行結果

ボタンの規定値の一覧表です。

定数説明
vbDefaultButton11番目のボタンを既定にします。(デフォルトの設定)
vbDefaultButton22番目のボタンを既定にします。
vbDefaultButton33番目のボタンを既定にします。
vbDefaultButton44番目のボタンを既定にします。

確認テスト

次の問いに答えなさい。

  1. メッセージボックスに文字列"処理が完了しました。"と表示させなさい。

    【解答例】

    Sub Test_MsgBox1()
    
        MsgBox "処理が完了しました。"
    
    End Sub
    
  2. メッセージボックスに文字列"処理に失敗しました。"と表示させ、「×」のアイコンを表示させなさい。

    【解答例】

    Sub Test_MsgBox2()
    
        MsgBox "処理に失敗しました。", vbCritical
    
    End Sub
    
  3. メッセージボックスに文字列"処理を続行しますか?"と表示させ、「?」のアイコンと「OK」および「キャンセル」のボタン表示させなさい。

    【解答例】

    Sub Test_MsgBox3()
    
        MsgBox "処理を続行しますか?", vbOKCancel + vbQuestion
    
    End Sub
    
  4. メッセージボックスに文字列"処理が完了しました。"と表示させ、タイトルに「マクロ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
    

関連リンク

ページの先頭へ