【VBA】メッセージボックスを表示する

これで楽に!?VBA活用

こんにちは、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」ボタンのみ表示(省略した場合に選択)
vbOkCancel1「OK」「キャンセル」ボタン
vbAbortRetryIgnore2「中止」「再試行」「無視」ボタン表示
vbYesNoCancel3「はい」「いいえ」「キャンセル」ボタン表示
vbYesNo4「はい」「いいえ」ボタン表示
vbRetryCancel5「再試行」「キャンセル」ボタン

表内の「値」について補足しておきますが、この「値」は定数の代わりに指定しても良いので、例を以下に示します。もちろん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

 

次にメッセージと併せて表示することができる「アイコン」について書いていきます。

定数内容画像
vbCritical16警告アイコンの表示
vbQuestion32問合せアイコンの表示
vbExclamation48注意アイコンの表示
vbInformation64情報メッセージアイコンの表示

 

Sub Sample6()

  MsgBox "「警告アイコン」の表示", vbCritical
  MsgBox "「問合せアイコン」の表示", vbQuestion
  MsgBox "「注意アイコン」の表示", vbExclamation
  MsgBox "「情報メッセージ」の表示", vbInformation
  
End Sub

見ての通りアイコンと併せて利用することで視覚的に意図を伝えることができますから、更に使い勝手を良くすることができます。

主に使用機会が多いのは上記だと思います。他には「デフォルトボタンの設定」や「メッセージボックス自体の応答設定」などがありますので、参考までに書いておきます。

≪デフォルト(標準)ボタンの設定≫

定数内容
vbDefaultButton1(既定値)0第1ボタンを標準
vbDefaultButton2256第2ボタンを標準
vbDefaultButton3512第3ボタンを標準
vbDefaultButton4768第4ボタンを標準

≪メッセージボックス応答設定≫

定数内容
vbApplicationModal(既定値)0アプリケーションモーダルに設定(既定)し、メッセージボックスに応答するまでExcelの操作不可
vbSystemModal4096システムモーダルに設定し、メッセージボックスに応答するまで全てのアプリケーションが操作不可

 

≪その他≫

定数内容
vbMsgBoxHelpButton16384ヘルプボタンの追加
vbMsgBoxSetForeground65536最前面のウィンドウとして表示
vbMsgBoxRight524288テキストを右寄せ表示

3.MsgBox関数の戻り値

メッセージボックスを表示した際に設定したボタンも表示されますが、それらを押した際に「戻り値」が発生します。ここでは触れませんが、その戻り値を利用することで分岐処理を行う内容を以前書いていますので、ご参考までに。

【VBA】メッセージボックスボタンの処理分岐を行う(Y/N)
こんにちは、Ryoです。 VBAで対話型プログラムとして処理したいケースも多々あるかと思いますが、その中で使用頻度が高いと思われるメッセージボックスの「はい」(Y)「いいえ」(N)を表示し、クリックしたボタンに応じて処理を分岐する方法につ...

MsgBox関数の戻り値については以下の通りになります。

定数内容
vbOK1「OK」ボタン
vbCancel2「キャンセル」ボタン
vbAbort3「中止」ボタン
vbRetry4「再試行」ボタン
vbIgnore5「無視」ボタン
vbYes6「はい」ボタン
vbNo7「いいえ」ボタン

vbOKとvbYes、vbCancelとvbNoは似たような用途で使用すると思いますが「値」が違いますのでご注意を。

4.まとめ

メッセージボックスは便利なので利用機会が多く、対話型プログラムには欠かせないものですね。ただ便利な反面、個人的に思うのは「多用しすぎない」ことが大事です。



ユーザーの使い勝手を向上させることが目的であるものの、多用すれば都度ユーザーの手もプログラムの処理も止まるという本末転倒なことになりますから、ご留意を。

私も利用機会が多い割には設定値などが思い出せなかったりすることもあるので、備忘録も兼ねて「メッセージボックスを表示する」内ようについて書いてみました。今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました