こんにちは、Ryoです。
VBAを扱う中でメッセージボックスを表示させて必要に応じたボタンを配置することは、柔軟性の高いプログラムを作るうえで欠かせないものです。今回はそのMsgBox関数について設定項目や引数buttonsに指定する定数や値などについて書いていきたいと思います。
1.MsgBox関数の構文
MsgBox(prompt[ ,buttons][ ,title][ ,helpline, context])
構文としてはこの通りなので一見わかりにくく難しそうな感じですが、最小限必要なのは「prompt=メッセージとして表示する文字列」だけでOKです。
Sub Sample1() MsgBox "prompt=表示する文字列" End Sub
MSgBox関数はこの通りメッセージボックスを表示するものです。ただ表示するだけではなく、必要に応じてボタンを配置したりボタン毎に処理を分岐させたり、メッセージと併せてアイコン表示も可能なので使い勝手がよいことから利用頻度も高いです。
文字列表示設定などを行う引数(prompt,buttons,title,helpfile,context)の内容については、以下の通りになっています。
値 | 内容 |
prompt | メッセージ表示する文字列を指定(最大:半角1,024文字/全角512文字まで)vbCrLfを利用すると改行も可能 |
buttons(省略可) | 表示するボタンの種類/個数/アイコンスタイル/標準ボタンなどの指定で複数指定も可。省略すると「0」⇒「OK」ボタンのみ |
title(省略可) | タイトルバーの表示文字列を指定。省略するとアプリケーション名になるので「Microsoft Excel」 |
helpfile(省略可) | 状況依存のヘルプ設定を目的としたヘルプファイルを設定し、引数helpfileを指定した場合は引数contextも指定が必要。 |
context(省略可) | ヘルプトピックに指定したコンテキスト番号を指定。引数contextを指定した場合は引数helpfileも指定が必要。 |
これら引数の中で利用頻度が高いものはprompt/buttons/titleなので、通常ではあまり使わないhelpfileとcontextは特に気にしなくて良いと思います。
ちなみに「prompt」欄に記載したvbCrLfを利用した改行はこの通りです。
Sub Sample2() MsgBox "改行" & vbCrLf & "しています" End Sub
この改行(vbCrLf)を利用すると以下のような表現もできますので、ご参考までに。
Sub Sample3() Dim i As Integer Dim msg As String For i = 1 To 5 msg = msg & i & vbCrLf Next i MsgBox msg End Sub
変数msgに指定値&改行を指定回数繰り返しながら文字を連結することで、このような表示になります。例えば複数のデータ(OK/NG対象番号、点数など)をまとめて表示したいときなどに便利なので、私はよく使っています。
2.引数buttonsの設定詳細
この引数buttonsの部分で使い勝手に応じた指定をすることが多々発生すると思いますので、そこに指定する定数や値などについて以下に書いていきます。
定数 | 値 | 内容 | 画像 |
vbOkOnly(既定値) | 0 | 「OK」ボタンのみ表示(省略した場合に選択) | |
vbOkCancel | 1 | 「OK」「キャンセル」ボタン | |
vbAbortRetryIgnore | 2 | 「中止」「再試行」「無視」ボタン表示 | |
vbYesNoCancel | 3 | 「はい」「いいえ」「キャンセル」ボタン表示 | |
vbYesNo | 4 | 「はい」「いいえ」ボタン表示 | |
vbRetryCancel | 5 | 「再試行」「キャンセル」ボタン |
表内の「値」について補足しておきますが、この「値」は定数の代わりに指定しても良いので、例を以下に示します。もちろんSample4()とSample5()は同じ結果になります。
Sub Sample4() MsgBox "「vbOkOnly」の表示" MsgBox "「vbOkCancel」の表示", vbOKCancel MsgBox "「vbAbortRetryIgnore」の表示", vbAbortRetryIgnore MsgBox "「vbYesNoCancel」の表示", vbYesNoCancel MsgBox "「vbYesNo」の表示", vbYesNo MsgBox "「vbRetryCancel」の表示", vbRetryCancel End Sub
Sub Sample5() MsgBox "「vbOkOnly」の表示", 0 MsgBox "「vbOkCancel」の表示", 1 MsgBox "「vbAbortRetryIgnore」の表示", 2 MsgBox "「vbYesNoCancel」の表示", 3 MsgBox "「vbYesNo」の表示", 4 MsgBox "「vbRetryCancel」の表示", 5 End Sub
次にメッセージと併せて表示することができる「アイコン」について書いていきます。
定数 | 値 | 内容 | 画像 |
vbCritical | 16 | 警告アイコンの表示 | |
vbQuestion | 32 | 問合せアイコンの表示 | |
vbExclamation | 48 | 注意アイコンの表示 | |
vbInformation | 64 | 情報メッセージアイコンの表示 |
Sub Sample6() MsgBox "「警告アイコン」の表示", vbCritical MsgBox "「問合せアイコン」の表示", vbQuestion MsgBox "「注意アイコン」の表示", vbExclamation MsgBox "「情報メッセージ」の表示", vbInformation End Sub
見ての通りアイコンと併せて利用することで視覚的に意図を伝えることができますから、更に使い勝手を良くすることができます。
主に使用機会が多いのは上記だと思います。他には「デフォルトボタンの設定」や「メッセージボックス自体の応答設定」などがありますので、参考までに書いておきます。
≪デフォルト(標準)ボタンの設定≫
定数 | 値 | 内容 |
vbDefaultButton1(既定値) | 0 | 第1ボタンを標準 |
vbDefaultButton2 | 256 | 第2ボタンを標準 |
vbDefaultButton3 | 512 | 第3ボタンを標準 |
vbDefaultButton4 | 768 | 第4ボタンを標準 |
≪メッセージボックス応答設定≫
定数 | 値 | 内容 |
vbApplicationModal(既定値) | 0 | アプリケーションモーダルに設定(既定)し、メッセージボックスに応答するまでExcelの操作不可 |
vbSystemModal | 4096 | システムモーダルに設定し、メッセージボックスに応答するまで全てのアプリケーションが操作不可 |
≪その他≫
定数 | 値 | 内容 |
vbMsgBoxHelpButton | 16384 | ヘルプボタンの追加 |
vbMsgBoxSetForeground | 65536 | 最前面のウィンドウとして表示 |
vbMsgBoxRight | 524288 | テキストを右寄せ表示 |
3.MsgBox関数の戻り値
メッセージボックスを表示した際に設定したボタンも表示されますが、それらを押した際に「戻り値」が発生します。ここでは触れませんが、その戻り値を利用することで分岐処理を行う内容を以前書いていますので、ご参考までに。
MsgBox関数の戻り値については以下の通りになります。
定数 | 値 | 内容 |
vbOK | 1 | 「OK」ボタン |
vbCancel | 2 | 「キャンセル」ボタン |
vbAbort | 3 | 「中止」ボタン |
vbRetry | 4 | 「再試行」ボタン |
vbIgnore | 5 | 「無視」ボタン |
vbYes | 6 | 「はい」ボタン |
vbNo | 7 | 「いいえ」ボタン |
vbOKとvbYes、vbCancelとvbNoは似たような用途で使用すると思いますが「値」が違いますのでご注意を。
4.まとめ
メッセージボックスは便利なので利用機会が多く、対話型プログラムには欠かせないものですね。ただ便利な反面、個人的に思うのは「多用しすぎない」ことが大事です。
ユーザーの使い勝手を向上させることが目的であるものの、多用すれば都度ユーザーの手もプログラムの処理も止まるという本末転倒なことになりますから、ご留意を。
私も利用機会が多い割には設定値などが思い出せなかったりすることもあるので、備忘録も兼ねて「メッセージボックスを表示する」内ようについて書いてみました。今回の記事が何かの参考になれば幸いです。
Ryo