機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > VBAの関数

MsgBox関数



構文


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



このエントリーをはてなブックマークに追加