MsgBox


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