MsgBox関数
構文
引数
prompt は必ず指定します、ダイアログボックスに
表示するメッセージ を指定します。
引数
button は省略可能です。ダイアログボックスに表示する、
ボタンの種類やタイプ などを指定します。
引数
title は省略可能です。ダイアログボックスの
タイトルバーに表示する文字列 を指定します。
引数helpfileは省略可能です。ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定します。引数helpfileを指定する場合は、引数contextも必ず指定しなければなりません。
解説
MsgBox関数は、ダイアログボックスにメッセージとボタンを表示し、どのボタンが押されたかを示す整数型の数値を返します。
引数promptに指定できる文字数は、1バイト文字で約1024文字です。ただし使用する文字の幅によって使用できる文字数は異なります。引数promptの中で強制的に改行する場合は、キャリッジリターン(Chr(13))とラインフィールド(Chr(10))を使用します。これらの文字はVisualBasicの定数として定義されていますので、vbCr(キャリッジリターン)、vbLf(ラインフィールド)、vbCrLf(キャリッジリターン+ラインフィールド)を使用することもできます。
引数buttonsには、次の定数を使用できます。
定数
値
内容
vbOKOnly
0
[OK]ボタンのみを表示します
vbOKCancel
1
[OK]ボタンと[キャンセル]ボタンを表示します
vbAbortRetryIgnore
2
[中止]、[再試行]、および[無視]の3つのボタンを表示します
vbYesNoCancel
3
[はい]、[いいえ]、および[キャンセル]の3つのボタンを表示します
vbYesNo
4
[はい]ボタンと[いいえ]ボタンを表示します
vbRetryCancel
5
[再試行]ボタンと[キャンセル]ボタンを表示します
vbCritical
16
警告メッセージアイコンを表示します
vbQuestion
32
問い合わせメッセージアイコンを表示します
vbExclamation
48
注意メッセージアイコンを表示します
vbInformation
64
情報メッセージアイコンを表示します
vbDefaultButton1
0
第1ボタンを標準ボタンにします
vbDefaultButton2
256
第2ボタンを標準ボタンにします
vbDefaultButton3
512
第3ボタンを標準ボタンにします
vbDefaultButton4
768
第4ボタンを標準ボタンにします
vbApplicationModal
0
アプリケーションモーダルに設定します。メッセージボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません
vbSystemModal
4096
システムモーダルに設定します。メッセージボックスに応答するまで、すべてのアプリケーションが中断されます
たとえば、[はい]ボタンと[いいえ]ボタンを表示し、注意メッセージアイコンを表示するには、引数buttonsに、定数vbYesNo と 定数vbExclamation の合計(vbYesNo + vbExclamation)を指定します。
MsgBox関数の戻り値は次のとおりです。
定数
値
説明
vbOK
1
[OK]ボタンが押された
vbCancel
2
[キャンセル]ボタンが押された
vbAbort
3
[中止]ボタンが押された
vbRetry
4
[再試行]ボタンが押された
vbIgnore
5
[無視]ボタンが押された
vbYes
6
[はい]ボタンが押された
vbNo
7
[いいえ]ボタンが押された
引数titleを省略すると、タイトルバーには「Microsoft Excel」と表示されます。
引数helpfileを指定した場合、ダイアログボックスが表示されているとき[F1]キーを押すと、引数helpfileで指定したヘルプファイルのうち引数contextで指定したトピックが表示されます。引数helpfileを指定すると、ダイアログボックスに[ヘルプ]ボタンが表示されます。
サンプル
次の例は、[はい]ボタンと[いいえ]ボタン、問い合わせメッセージアイコンのあるダイアログボックスを表示します。
Sub Sample()
Dim rc As Integer
rc = MsgBox("処理を行いますか?", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
MsgBox "処理を行います"
Else
MsgBox "処理を中断します"
End If
End Sub
所見
いろいろな場面でよく使われる MsgBox は「関数」です。関数であるからには、何らかの結果を返します。MsgBox関数が返すものは「
ユーザーが、どのボタンをクリックしたか 」です。したがって、たとえば次のような使い方をします。
Sub Sample()
Dim 結果 As Long
結果 = MsgBox ("続けますか?", vbYesNo)
If 結果 が OKボタン だったら
処理をする
Else
処理を中止する
End If
End Sub
MsgBox関数は「ユーザーが、どのボタンをクリックしたか」を
数値 で返しますので、上記のように、返り値を受け取る変数は、長整数型(Long)などにします。
どんなボタンを表示するか?あるいは、どんなアイコンを表示するか?などは、2番目の引数「buttons」に指定します。
引数「buttons」には、一般的に「vbYesNo」や「vbExclamation」などの定数を指定します。
そしてもう一つ、MsgBox関数は、「ユーザーが、どのボタンをクリックしたか」を調べる以外に、「ただ、ユーザーに何かを伝える(画面に表示する)」だけに使われることも多いです。たとえば、次のコードは、"終了しました"という文字列を画面に表示します。
Sub Sample()
MsgBox "終了しました"
End Sub
この場合は一般的に、メッセージボックスを閉じるための[OK]ボタンしか表示しません。[OK]ボタンしかないのですから「ユーザーが、どのボタンをクリックしたか」を知る必要もありません。つまり、MsgBox関数の
返り値を使いません 。VBAのルールでは、返り値を使わないとき、
引数を括弧で囲みません 。反対に、上記のように「ユーザーが、どのボタンをクリックしたか」を知るためには、MsgBox関数の返り値を調べなければなりません。この場合は、返り値を使うので、
引数を括弧で囲まなければなりません 。
引数を括弧で囲むかどうかのルールに関しては、下記のページをご覧ください。
メッセージを改行する
メッセージボックスに表示する文字列を改行するときは、
&演算子 と
改行コード を使います。なお、本コンテンツでは、見やすくするために全角の&を使用していますが、VBAのコード内では半角の&を使用してください。
&演算子は「左辺と右辺を結合(合体)」させる働きをします。
"田中" & "亨" → "田中亨"
1 & 2 → 12
左辺や右辺に、セルや変数を指定することもできます。もし、セルA1に"AKB"という文字列が入力されていて、変数Aに"48"という値が格納されているなら、
Range("A1") & A → "AKB48"
となります。
文字列が改行して表示されているときは、改行されている位置に、目には見えない
改行コード が入力されています。
この、改行コードには
vbCrLf という定数が割り当てられています。したがって、メッセージボックスに表示する文字列を改行するには、次のようにします。
Sub Sample()
MsgBox "田中" & vbCrLf & "亨"
End Sub
よく使う例
【メッセージを表示するだけ(返り値を使わない)】
MsgBox "データを更新しました", vbInformation
MsgBox "データが存在しません", vbExclamation
MsgBox "データが存在しません" & vbCrLf & "処理を中止しました", vbCritical
【ユーザーに処理を選択してもらう(返り値を使う)】
Result = MsgBox("処理を続けますか?", vbYesNo + vbExclamation)
Result = MsgBox("すべてのデータを削除しますか?", vbYesNo + vbExclamation + vbDefaultButton2)
制限事項
あらかじめ用意されているアイコン以外の画像は表示できません
表示する位置を指定することはできません
そのほか、あまり凝ったことはできません
任意の画像を表示したり、表示する位置を指定したいようなときは、MsgBox関数ではなく、UserFormを使ってください。