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を使用してください。