7-2.メッセージに関する関数

今回は、メッセージに関する関数として、MsgBox関数とInputBox関数について説明します。

MsgBox関数

○構文
MsgBox Prompt,Buttons,Title,HelpFile,Context

○処理
Promptに指定した文字列または変数の値をメッセージダイアログボックスに表示します。

処理の完了メッセージを表示したり、エラー発生時にオリジナルのエラー文を表示したりする場合に使用できます。

メッセージダイアログボックスが表示されている間、VBAの処理は中断されます。
ダイアログボックスのいずれかのボタンを押してダイアログボックスを閉じると処理が再開されます。

選択したボタンの内容を、関数の戻り値として取得できます。

○引数

引数必須データ型内容
Prompt必須メッセージダイアログボックスに表示するメッセージを指定します
Buttons省略可定数メッセージダイアログボックスに配置するボタンの種類を指定します
Title省略可メッセージダイアログボックスに表示するタイトルを指定します
HelpFile省略可メッセージダイアログボックスにヘルプを表示する場合に、表示するヘルプファイルを指定します
Contextとセットで指定します
Context省略可表示するヘルプファイルのコンテキスト番号を指定します
HelpFileとセットで指定します

<Buttonsの定数>
引数Buttonsには、下表の定数を指定します。

定数内容
vbOKOnly0[OK] ボタンのみを表示します。
vbOKCancel1[OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore2[中止]、[再試行]、[無視] の各ボタンを表示します。
vbYesNoCancel3[はい]、[いいえ]、[キャンセル] の各ボタンを表示します。
vbYesNo4[はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel5[再試行] ボタンと [キャンセル] ボタンを表示します。
vbCritical16[重大なメッセージ] アイコンを表示します。
vbQuestion32[警告クエリ] アイコンを表示します。
vbExclamation48[警告メッセージ] アイコンを表示します。
vbInformation64[情報メッセージ] アイコンを表示します。
vbDefaultButton101 番目のボタンが既定です。
vbDefaultButton22562 番目のボタンが既定です。
vbDefaultButton35123 番目のボタンが既定です。
vbDefaultButton47684 番目のボタンが既定です。
vbApplicationModal0アプリケーション モーダル。現在のアプリケーションでの作業を続行するには、ユーザーはメッセージ ボックスに応答する必要があります。
vbSystemModal4096システム モーダル。ユーザーがメッセージ ボックスに応答するまで、すべてのアプリケーションが中断します。
vbMsgBoxHelpButton16384メッセージ ボックスに [ヘルプ] ボタンを追加します。
vbMsgBoxSetForeground65536[メッセージ ボックス] ウィンドウを前景ウィンドウとして指定します。
vbMsgBoxRight524288テキストを右揃えにします。
vbMsgBoxRtlReading1048576ヘブライ語とアラビア語のシステムでテキストが右から左に読む形式で表示されるように指定します。

vbDefaultButtonには、メッセージダイアログボックスを表示した際に、デフォルトで選択するボタンの種類を指定します。

<Buttonsの戻り値>
メッセージダイアログボックスで選択したボタンの内容によって、下表の戻り値が返ります。
戻り値を利用することで、選択したボタンの内容ごとに処理を分けることができます。

定数戻り値ボタンの内容
vbOK1OK
vbCancel2Cancel
vbAbort3中止
vbRetry4再試行
vbIgnore5無視
vbYes6はい
vbNo7いいえ

<改行やタブを表すコード>
表示するメッセージを改行したり、タブでインデントしたりする場合は、メッセージの文字列に改行コードやタブコードを入力する必要があります。

改行コードは、vbCrLf / vbCr/ vbLf のいずれかです。本来、使い分けが必要ですが、MsgBoxで使う分にはどれでも構いません。
タブコードは、vbTab です。

これらのコードは、MsgBox関数特有のものではなくVBAの仕様なので、いろいろな場面で使用できます。

Sub MsgBox関数()
    
    '基本の使い方
    MsgBox "メッセージを表示"
    
    '改行文を表示
    MsgBox "メッセージを" & vbCrLf & "表示"
    'タブ文を表示
    MsgBox "タブの範囲は" & vbTab & "これくらい"
    
    '戻り値を変数に格納
    Dim msg As Variant
    msg = MsgBox(Prompt:="処理を続行しますか?", Buttons:=vbOKCancel)
    
    '格納した戻り値で分岐処理
    If msg = vbCancel Then End
    
End Sub

InputBox関数

○構文
InputBox Prompt,Title,Default,Xpos,Ypos,HelpFile,Context

○処理
メッセージ入力用のダイアログボックスを表示し、ユーザーが任意のデータを入力することができます。

ダイアログボックスが表示されている間、VBAの処理は中断されます。
ダイアログボックスのいずれかのボタンを押してダイアログボックスを閉じると処理が再開されます。

入力されたデータは、戻り値として返ります。
戻り値は入力された値に関わらず、文字列として扱われます。

値を入力せずOKを押した場合、または、キャンセルを押した場合、空白文字列が返ります。

○引数

引数必須データ型内容
Prompt必須ダイアログボックスに表示するメッセージを指定します
Title省略可ダイアログボックスに表示するタイトルを指定します
Default省略可メッセージ入力欄にデフォルトで入力しておく値を指定します
Xpos省略可ダイアログボックスを表示する横方向の位置を指定します
画面左端からの距離を指定します
Ypos省略可ダイアログボックスを表示する縦方向の位置を指定します
画面上端からの距離を指定します
HelpFile省略可メッセージダイアログボックスにヘルプを表示する場合に、表示するヘルプファイルを指定します
Contextとセットで指定します
Context省略可表示するヘルプファイルのコンテキスト番号を指定します
HelpFileとセットで指定します
Sub InputBox関数()
    
    '戻り値を変数に格納
    Dim msg As Variant
    msg = InputBox("値を入力してください")
    MsgBox (msg)
    
    '戻り値で分岐処理
    Dim v As Integer
    v = InputBox("1+1=?")
    
    If 1 + 1 = v Then
        MsgBox ("正解です")
    Else
        MsgBox ("勉強しましょう")
    End If
    
End Sub

InputBoxメソッド

関数ではありませんが、InputBox関数と似た機能を持つ、InputBoxメソッドをご紹介します。
InputBox関数との大きな違いは引数Typeです。

○構文
Application.InputBox Prompt,Title,Default,Left,Top,HelpFile,HopContextId,Type

Applicationオブジェクトは省略できません。省略した場合、InputBox関数として処理されます。

○処理
メッセージ入力用のダイアログボックスを表示し、ユーザーが任意のデータを入力することができます。

入力されたデータは、戻り値として返ります。
戻り値のデータ型は、引数Typeで指定することができます。

値を入力せずOKを押した場合は、空白文字列が返ります。
キャンセルを押した場合は、Falseが返ります。ただし、引数Typeをセル参照にしている場合、エラーとなります。

○引数

引数必須データ型内容
Prompt必須ダイアログボックスに表示するメッセージを指定します
Title省略可ダイアログボックスに表示するタイトルを指定します
Default省略可メッセージ入力欄にデフォルトで入力しておく値を指定します
Left省略可ダイアログボックスを表示する横方向の位置を指定します
画面左端からの距離を指定します
Top省略可ダイアログボックスを表示する縦方向の位置を指定します
画面上端からの距離を指定します
HelpFile省略可メッセージダイアログボックスにヘルプを表示する場合に、表示するヘルプファイルを指定します
Contextとセットで指定します
HelpContextId省略可表示するヘルプファイルのコンテキスト番号を指定します
HelpFileとセットで指定します
Type省略可入力される値のデータ型を指定します
省略すると文字列型になります
複数の型を指定する場合は、値の合計値を指定します

<Typeの値>
Typeにセル参照を設定した場合、ダイアログボックスが表示されている時に、対象のセル範囲を選択することで、入力欄にセル範囲を指定できます。

データ型
0数式
1数値
2文字列
4True / False
8セル参照
16エラー値
64数値配列
Sub InputBoxメソッド()

    'セル範囲を入力
    Dim rng As Range
    Set rng = Application.InputBox(Prompt:="処理対象のセルを指定", Type:=8)
    MsgBox rng.Address
    
End Sub

コメント