Excel VBA
MsgBox is a function in Excel VBA used to display message boxes, presenting messages to users and facilitating the execution of actions based on button selections if needed.
MsgBox関数
画面にメッセージを表示する MsgBox関数は、マクロになくてはならない便利な命令です。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!"
End Sub
実行すると、「OK」ボタンが1つだけある小さなメッセージボックスが表示されます。この MsgBox関数は、他にもいろいろな使い方ができます。
メッセージを表示する
MsgBox関数のよく使う引数は次のとおりです。
VBA
MsgBox Prompt, [Buttons], [Title]
引数 Prompt に、メッセージとして表示する文字列を指定します。
引数 Buttons と Title は省略可能です。省略する場合、区切り文字の「,」も必要ありません。
複数行の文字列を表示するには、改行する部分に改行コード「vbCrLf」を挿入します。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!" & vbCrLf & "はじめまして!"
End Sub
ボタンとアイコンの種類を指定する
上のサンプル2つでは、引数Promptだけを指定しています。
この時、アイコンは表示されず、[OK]ボタンだけが表示されていました。
メッセージボックスに、[OK]ボタン以外のボタンやアイコンを表示するには、引数Buttonsを使用します。引数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 | 情報メッセージ アイコンを表示する |
[OK]ボタンと[キャンセル]ボタンを表示させてみます。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", vbOKCancel
End Sub
情報メッセージ アイコンを表示させてみます。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", vbInformation
End Sub
[OK]ボタンと[キャンセル]ボタンを表示し、さらに情報メッセージ アイコンを表示させてみます。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", vbOKCancel + vbInformation
End Sub
ボタンとアイコンの組み合わせは、定数を足し算して引数Buttonsに指定すれば表示することができます。なお、上記の表の値の数字を使って指定することもできます。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", 1 + 64
End Sub
この数字を使った指定の方法は、数字を足し算した状態での指定でも表示することが可能です。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", 65
End Sub
ただし、この数字を使った指定方法は可読性が著しく下がってしまいますので、ちょっとめんどくさいですがアルファベット表記の定数を使った方が良さそうです。
タイトルを指定する
メッセージボックスのタイトルを表示するには、引数Titleに指定します。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", vbOKCancel + vbInformation, "昼の挨拶"
End Sub
このタイトルですが、このページの一番最初のサンプルにタイトルだけを付けたくて下記のようにしてしまうとエラーになってしまいます。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", "昼の挨拶"
End Sub
この場合も、必ずボタンの指定が必要となりますので、vbOKOnly もしくは 0 を指定してください。
VBA
Sub 昼の挨拶()
MsgBox "こんにちは!", vbOKOnly, "昼の挨拶"
End Sub
ユーザーが選択したボタンを判定する
MsgBox関数はユーザーがどのボタンをクリックしたかを数値で返しますので、選んだボタンによって処理を行うには、この戻り値を利用します。
ここまでは、引数を括弧で囲まずに使用してきましたが、関数の戻り値を利用するときは、引数を括弧で囲むのが VBAの基本ルールとなります。
VBA
Sub 昼の挨拶()
Dim rc As Integer
rc = MsgBox("こんにちは!", vbYesNo, "昼の挨拶")
MsgBox "クリックされたボタンは " & rc & " です"
End Sub
この例では、[はい] をクリックしたときは [6]、[いいえ] をクリックしたときは [7] が返されます。
MsgBox関数はクリックされたボタンを数値で返しますが、それぞれの数値にはあらかじめ定数が定義されています。
定数 | 値 | 内容 |
---|---|---|
vbOK | 1 | [OK]ボタンだ選択された |
vbCancel | 2 | [キャンセル]ボタンが選択された |
vbAbort | 3 | [中止]ボタンが選択された |
vbRetry | 4 | [再試行]ボタンが選択された |
vbIgnore | 5 | [無視]ボタンが選択された |
vbYes | 6 | [はい]ボタンが選択された |
vbNo | 7 | [いいえ]ボタンが選択された |
これらの定数は、VbMsgBoxResult列挙体のメンバです。したがって、クリックされたボタンに応じて処理を行うには、Ifステートメントや Select Caseステートメントを使って次のようにします。
VBA
Sub Sample()
Dim rc As VbMsgBoxResult
rc = MsgBox("処理を続行しますか?", vbYesNo + vbQuestion)
If rc = vbYes Then
MsgBox "処理を続けます", vbInformation
Else
MsgBox "処理を中止します", vbCritical
End If
End Sub
戻り値を受け取る変数 rc は Integer型などで宣言してもいいのですが、VbMsgBoxResult型で宣言しておくと、「If rc = 」まで入力した時に、入力支援機能が働いて列挙体のメンバがずらっと表示されるので、効率よくプログラミングができます。
[×]ボタンで閉じたら
メッセージボックスは、[キャンセル]ボタンを表示しているときだけ、右上の[×]ボタンが有効になります。
このとき、[×]ボタンをクリックしたり、[Esc]キーを押してメッセージボックスを閉じたりすると、[キャンセル]ボタンがクリックされたとみなされ、vbCancelを返します。
VBA
Sub Sample2()
Dim rc As VbMsgBoxResult
rc = MsgBox("送信に失敗しました", vbRetryCancel + vbExclamation)
If rc = vbCancel Then
MsgBox "キャンセルします"
End If
End Sub
この例では、[再試行] ボタンをクリックした場合は何も表示されませんが、[×] ボタン、または [キャンセル] ボタンをクリックするか、キーボードの [Esc] キーを押してメッセージボックスを閉じると、「キャンセルします」のメッセージボックスが表示されます。
標準ボタンを指定する
ボタンが1つしかないシンプルなメッセージボックスの時、マウスでクリックする代わりに[Enter]キーを押すと、メッセージボックスを閉じることができます。このように、メッセージボックの表示時にアクティブになっているボタンを「標準ボタン」といい、[Enter]キーを押すと選択されます。
複数のボタンがある場合、既定では一番左のボタンが標準ボタンになります。しかし、ときには左のボタンがアクティブになっていると困ることもあります。たとえば、「すべてのファイルを削除してよろしいですか?」と [はい] [いいえ] ボタンを表示しているとき、うっかりさんが、ついうっかり [Enter] キーを押して途方に暮れてしまうかもしれません。
このようなうっかりミスの防止や、選んで欲しいボタンをアクティブにするには、引数 Buttons で標準ボタンを変更します。
標準ボタンを指定する定数は次の表のとおりです。これらも、ボタンやアイコンを指定する定数と同じ VbMsgBoxStyle列挙体のメンバです。
定数 | 値 | 内容 |
---|---|---|
vbDefaultButton1 | 0 | 第1ボタンを標準ボタンにする |
vbDefaultButton2 | 256 | 第2ボタンを標準ボタンにする |
vbDefaultButton3 | 512 | 第3ボタンを標準ボタンにする |
vbDefaultButton4 | 768 | 第4ボタンを標準ボタンにする |
次の例は、[はい] [いいえ] ボタンのうち、2つめの [いいえ] ボタンを標準ボタンに指定します。
VBA
Sub Sample()
Dim rc As VbMsgBoxResult
rc = MsgBox("処理を続行しますか?", vbYesNo + vbDefaultButton2)
If rc = vbYes Then
MsgBox "処理を続けます", vbInformation
Else
MsgBox "処理を中止します", vbCritical
End If
End Sub
MsgBox関数では、定数で定義されているアイコン以外のものを表示することはできません。また、表示する文字列の大きさや文字色を指定することもできません。そうした独自のメッセージボックスを表示したいときは、UserFormを使用してください。