この記事ではVBAのメッセージボックス(MsgBox)の種類と使い方をまとめています。
基本のメッセージボックスの書き方からユーザーが「はい」「いいえ」ボタンを選択するメッセージの書き方についても解説しています。
下の見出しをクリックすると記事に飛べますので知りたいところをクリックしてご覧ください。
メッセージボックスとは
メッセージボックスとはマクロ処理の中でユーザーに向けてお知らせなどを表示する機能のことです。よくマクロ処理の終わりにこんなメッセージを出したりして使用します。
上のようなシンプルなメッセージの使い方もできますし、使う人に「はい」「いいえ」などの選択肢を選んでもらい処理を分岐させる使い方もできますので順に説明していきます。
メッセージボックス(Msgbox)の基本の書き方
メッセージボックスを表示させるには下の構文でコードを書きます。
MegBox “メッセージ内容” , ボタン種類 + アイコン + デフォルトボタン , ”タイトル”
メッセージ内容は必須ですが、他の引数は省略することができます。
シンプルにメッセージだけを表示したい場合は 「MsgBox “メッセージ内容”」だけでOKです。
MsgBox "こんにちわ"
メッセージボックスの左上にタイトルを設定することも可能です。
デフォルトでは「Microsoft Excel」と表示されていますが例えば「挨拶」と表示させてみます。
MsgBox "こんにちわ", , "挨拶"
この場合はボタンの設定の部分を省略しているのでメッセージのあとにカンマを2つ書いて、そのあとにタイトルを指定しています。
メッセージに表示するアイコンの種類
メッセージ内容の後にカンマで区切って「ボタン種類」と「アイコン」と「デフォルトボタン」を指定することができます。すべて省略することもできますし、「アイコン」だけ指定することも可能です。
MegBox “メッセージ内容” , ボタン種類 + アイコン + デフォルトボタン , ”タイトル”
アイコンの種類は4種類あり、メッセージの左側に指定したアイコンを表示させることができます。
アイコンの種類 | アイコンの意味 |
vbInformation | 情報 |
vbQuestion | 疑問符(?) |
vbExclamation | 警告 |
vbCritical | エラー |
コードを書くときは下のように書きます。(ボタンの種類とデフォルトボタン、タイトルは省略)
MsgBox "情報のアイコンです", vbInformation
MsgBox "警告のアイコンです", vbCritical
MsgBox "疑問符のアイコンです", vbQuestion
MsgBox "注意のアイコンです", vbExclamation
それぞれのアイコンは↓のように表示されます。
メッセージの内容によって使い分けると使う人に分かりやすいですね。
メッセージボックス内で改行する・変数を使用する
メッセージ内容は変数と組み合わせたり、メッセージ内で改行することも可能です。
改行する場合は改行コード「vbLf」を間に挟んで「&」でメッセージをつなげます。
MsgBox "改行" & vbLf & "できました。"
メッセージ内容は変数を使用することも可能です。
先に変数にメッセージを格納しておいて、MsgBoxの後に変数を指定することで変数の中の文字列を表示させます。
'メッセージを変数に格納
Dim MsgStr As String
’変数にメッセージを格納する
MsgStr = "こんにちわ"
’メッセージボックスを表示する
MsgBox MsgStr
ここで1点だけ注意があります。
変数を使用せずにメッセージを書くときは長文のメッセージを使う場面は少ないと思いますが、変数を使用してエラー情報などを追加していく場合は思いがけずメッセージが長くなってしまう場合があります。
メッセージボックスで表示できる文字数には上限(1,025文字)があり、上限値を超えた分が表示されなくなってしまいますので上限を超えないように注意が必要です。
「はい」「いいえ」ボタンを選択するメッセージ(vbYesNo)
ボタンの種類でよく使う「はい」「いいえ」ボタンを選択してもらうメッセージの書き方について説明します。「はい」「いいえ」ボタンを選ぶメッセージはボタン種類に「vbYesNo」と指定します。
MegBox “メッセージ内容” , ボタン種類 + アイコン + デフォルトボタン , ”タイトル”
下の例では「処理を開始しますか?」という質問をメッセージで表示し、ユーザーが「はい」か「いいえ」で答えるメッセージボックスです。
選択式のボタンを設置する場合は、何のボタンが押されたのかの「戻り値」を取得して、それによって処理を分岐させる必要があります。
下の例では変数「anser」を用意しておいてユーザーが選択したボタンの戻り値を変数に格納しています。変数の名前はなんでもOKですが、一旦変数に入れて、そのあと処理を分岐させる方法は共通です。
変数「anser」に「vbYes」が入っていたら「はい」が選択された場合の処理、「vbNo」が入っていたら「いいえ」が選択された場合の処理を行います。
'ボタン:「はい」「いいえ」
'アイコン:疑問符
'デフォルトボタン:「はい」
'タイトル:確認
Dim anser As VbMsgBoxResult
anser = MsgBox("処理を開始しますか?", vbYesNo + vbQuestion + vbDefaultButton1, "確認")
Select Case anser '押されたボタンによって処理を分岐
Case vbYes
MsgBox "処理を続行します。"
Case vbNo
MsgBox "処理を中止します。"
End Select
マクロを実行すると下のような動きになります。
「はい」が選択された場合は「処理を続行します。」のメッセージを表示
「いいえ」が選択された場合は「処理を中止します。」のメッセージを表示
MegBox “メッセージ内容” , ボタン種類 + アイコン + デフォルトボタン , ”タイトル”
デフォルトボタンの指定はメッセージが表示されたときに何のボタンをアクティブにしておくのかを指定することができます。
「vbDefaultButton1」は1個目のボタンをアクティブにする(「はい」を選択)
「vbDefaultButton2」は2個目のボタンをアクティブにする(「いいえ」を選択)
という意味になります。
ボタンの種類と戻り値
ボタンの種類には6種類の定数を指定することができます。
ですが実際よく使うのは上の2つくらいで(わたしの場合)他はほとんど使う場面がありません。
ボタンの種類に指定する定数 | 説明 |
vbOKOnly | OKボタンのみ |
vbYesNo | はい・いいえ |
vbYesNoCancel | はい・いいえ・キャンセル |
vbOKCancel | OK・キャンセル |
vbAbortRetryIgnore | 中止・再試行・無視 |
vbRetryCancel | 再試行・キャンセル |
設置したボタンの種類によって戻り値を判別する必要があるため、戻り値も書いておきます。
ボタンの戻り値 | 押されたボタン |
vbOK | 「OK」ボタンが押された |
vbCancel | 「キャンセル」ボタンが押された |
vbAbort | 「中止」ボタンが押された |
vbRetry | 「再試行」ボタンが押された |
vbIgnore | 「無視」ボタンが押された |
vbYes | 「はい」ボタンが押された |
vbNo | 「いいえ」ボタンが押された |
ボタンの種類と戻り値の判定を使い分けることで色々な処理の分岐が可能です。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。