MsgBoxで、どんなときに括弧を使うのかと、メッセージを改行する"改行コード"について、詳しい解説を動画で公開しています。ぜひ、こちらもご覧ください。Youtubeでは、ほかにもたくさんの動画を公開しています。チャンネル登録をお忘れなく!
Office TANAKAチャンネル
■VBAのコードで、括弧はどんなときに使うのか
■実はよく分かっていない"改行コード"徹底解説
構文
引数promptは必ず指定します、ダイアログボックスに表示するメッセージを指定します。
引数buttonは省略可能です。ダイアログボックスに表示する、ボタンの種類やタイプなどを指定します。
引数titleは省略可能です。ダイアログボックスのタイトルバーに表示する文字列を指定します。
引数helpfileは省略可能です。ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定します。引数helpfileを指定する場合は、引数contextも必ず指定しなければなりません。
解説
MsgBox関数は、ダイアログボックスにメッセージとボタンを表示し、どのボタンが押されたかを示す整数型の数値を返します。
引数promptに指定できる文字数は、1バイト文字で約1024文字です。ただし使用する文字の幅によって使用できる文字数は異なります。引数promptの中で強制的に改行する場合は、キャリッジリターン(Chr(13))とラインフィールド(Chr(10))を使用します。これらの文字はVisualBasicの定数として定義されていますので、vbCr(キャリッジリターン)、vbLf(ラインフィールド)、vbCrLf(キャリッジリターン+ラインフィールド)を使用することもできます。
引数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 | 情報メッセージアイコンを表示します |
vbDefaultButton1 | 0 | 第1ボタンを標準ボタンにします |
vbDefaultButton2 | 256 | 第2ボタンを標準ボタンにします |
vbDefaultButton3 | 512 | 第3ボタンを標準ボタンにします |
vbDefaultButton4 | 768 | 第4ボタンを標準ボタンにします |
vbApplicationModal | 0 | アプリケーションモーダルに設定します。メッセージボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません |
vbSystemModal | 4096 | システムモーダルに設定します。メッセージボックスに応答するまで、すべてのアプリケーションが中断されます |
たとえば、[はい]ボタンと[いいえ]ボタンを表示し、注意メッセージアイコンを表示するには、引数buttonsに、定数vbYesNo と 定数vbExclamation の合計(vbYesNo + vbExclamation)を指定します。
MsgBox関数の戻り値は次のとおりです。
定数 | 値 | 説明 |
---|---|---|
vbOK | 1 | [OK]ボタンが押された |
vbCancel | 2 | [キャンセル]ボタンが押された |
vbAbort | 3 | [中止]ボタンが押された |
vbRetry | 4 | [再試行]ボタンが押された |
vbIgnore | 5 | [無視]ボタンが押された |
vbYes | 6 | [はい]ボタンが押された |
vbNo | 7 | [いいえ]ボタンが押された |
引数titleを省略すると、タイトルバーには「Microsoft Excel」と表示されます。
引数helpfileを指定した場合、ダイアログボックスが表示されているとき[F1]キーを押すと、引数helpfileで指定したヘルプファイルのうち引数contextで指定したトピックが表示されます。引数helpfileを指定すると、ダイアログボックスに[ヘルプ]ボタンが表示されます。
サンプル
次の例は、[はい]ボタンと[いいえ]ボタン、問い合わせメッセージアイコンのあるダイアログボックスを表示します。
Sub Sample() Dim rc As Integer rc = MsgBox("処理を行いますか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then MsgBox "処理を行います" Else MsgBox "処理を中断します" End If End Sub
所見
いろいろな場面でよく使われる MsgBox は「関数」です。関数であるからには、何らかの結果を返します。MsgBox関数が返すものは「ユーザーが、どのボタンをクリックしたか」です。したがって、たとえば次のような使い方をします。
Sub Sample() Dim 結果 As Long 結果 = MsgBox("続けますか?", vbYesNo) If 結果 が OKボタン だったら 処理をする Else 処理を中止する End If End Sub
MsgBox関数は「ユーザーが、どのボタンをクリックしたか」を数値で返しますので、上記のように、返り値を受け取る変数は、長整数型(Long)などにします。
どんなボタンを表示するか?あるいは、どんなアイコンを表示するか?などは、2番目の引数「buttons」に指定します。
引数「buttons」には、一般的に「vbYesNo」や「vbExclamation」などの定数を指定します。
そしてもう一つ、MsgBox関数は、「ユーザーが、どのボタンをクリックしたか」を調べる以外に、「ただ、ユーザーに何かを伝える(画面に表示する)」だけに使われることも多いです。たとえば、次のコードは、"終了しました"という文字列を画面に表示します。
Sub Sample() MsgBox "終了しました" End Sub
この場合は一般的に、メッセージボックスを閉じるための[OK]ボタンしか表示しません。[OK]ボタンしかないのですから「ユーザーが、どのボタンをクリックしたか」を知る必要もありません。つまり、MsgBox関数の返り値を使いません。VBAのルールでは、返り値を使わないとき、引数を括弧で囲みません。反対に、上記のように「ユーザーが、どのボタンをクリックしたか」を知るためには、MsgBox関数の返り値を調べなければなりません。この場合は、返り値を使うので、引数を括弧で囲まなければなりません。
引数を括弧で囲むかどうかのルールに関しては、下記のページをご覧ください。
メッセージボックスに表示する文字列を改行するときは、&演算子と改行コードを使います。なお、本コンテンツでは、見やすくするために全角の&を使用していますが、VBAのコード内では半角の&を使用してください。
&演算子は「左辺と右辺を結合(合体)」させる働きをします。
"田中" & "亨" → "田中亨"
1 & 2 → 12
左辺や右辺に、セルや変数を指定することもできます。もし、セルA1に"AKB"という文字列が入力されていて、変数Aに"48"という値が格納されているなら、
Range("A1") & A → "AKB48"
となります。
文字列が改行して表示されているときは、改行されている位置に、目には見えない改行コードが入力されています。
この、改行コードにはvbCrLfという定数が割り当てられています。したがって、メッセージボックスに表示する文字列を改行するには、次のようにします。
Sub Sample() MsgBox "田中" & vbCrLf & "亨" End Sub
【メッセージを表示するだけ(返り値を使わない)】
MsgBox "終了しました"
MsgBox "データを更新しました", vbInformation
MsgBox "データが存在しません", vbExclamation
MsgBox "データが存在しません" & vbCrLf & "処理を中止しました", vbCritical
【ユーザーに処理を選択してもらう(返り値を使う)】
Sub Sample() Dim Result As Long Result = MsgBox("処理を続けますか?", vbYesNo + vbExclamation) If Result = vbYes Then ''[はい]がクリックされたときの処理 Else ''[いいえ]がクリックされたときの処理 End If End Sub
Result = MsgBox("すべてのデータを削除しますか?", vbYesNo + vbExclamation + vbDefaultButton2)
任意の画像を表示したり、表示する位置を指定したいようなときは、MsgBox関数ではなく、UserFormを使ってください。