Excel VBA ダイアログボックスでメッセージを表示させるには「MsgBox」関数を使います
「MsgBox」関数は、ダイアログ ボックスにメッセージを表示し、どのボタンがクリックされたかを示す値を返します
< スポンサーリンク >
「MsgBox」関数の構文
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
prompt = メッセージの文字
buttons = ボタンの種類
title = ダイアログボックスのタイトル
helpfile と context は私は使いません
buttonsの設定値
第1のグループはボタンの種類です
定 数 | 値 | 表示するボタン |
vbOKOnly | 0 | [OK] |
vbOKCancel | 1 | [OK] [キャンセル] |
vbAbortRetryIgnore | 2 | [中止] [再試行] [無視] |
vbYesNoCancel | 3 | [はい] [いいえ] [キャンセル] |
vbYesNo | 4 | [はい] [いいえ] |
vbRetryCancel | 5 | [再試行] [キャンセル] |
第2のグループはアイコンの種類です
定 数 | 値 | 表示するアイコン |
vbCritical | 16 | 警告メッセージアイコン |
vbQuestion | 32 | 問い合わせメッセージアイコン |
vbExclamation | 48 | 注意メッセージアイコン |
vbInformation | 3 | 情報メッセージアイコン |
第3のグループはどのボタンを選択状態にするかです
定 数 | 値 | ボタンの選択状態 |
vbDefaultButton1 | 0 | 第1ボタンを選択 |
vbDefaultButton2 | 256 | 第2ボタンを選択 |
vbDefaultButton3 | 512 | 第3ボタンを選択 |
vbDefaultButton4 | 768 | 第4ボタンを選択 |
第4のグループはボックスがモーダルかどうかを指定します
定 数 | 値 | モーダルの状態 |
vbApplicationModal | 0 | アプリケーション モーダルに設定 |
vbSystemModal | 4096 | システム モーダルに設定 |
その他のグループ
定 数 | 値 | 内 容 |
vbMsgBoxHelpButton | 16384 | ヘルプ ボタンを追加 |
VbMsgBoxSetForeground | 65536 | 最前面のウィンドウとして表示 |
vbMsgBoxRight | 524288 | テキストを右寄せで表示 |
vbMsgBoxRtlReading | 1048576 | テキストを右から左の方向で表示 |
上記の各グループから値を1つずつ選択して加算した合計値を指定します
「MsgBox」関数例
- ダイアログボックスのタイトルは「MSGタイトル」
- メッセージの内容は、「メッセージを右寄せで表示」
- ボタンの種類は、vbYesNoCancel [はい] [いいえ] [キャンセル]
- アイコンの種類は、vbQuestion 問い合わせメッセージアイコン
- ボタンの選択状態は、vbDefaultButton3 3番目のボタンを選択
- モーダルの状態は、vbSystemModal システムモーダルの状態
- その他のグループから、vbMsgBoxRight 文字を右寄せ
これを設定してみると
Sub test()
Dim msg As Integer
msg = MsgBox(“メッセージを右寄せで表示”, _
vbYesNoCancel + _
vbQuestion + _
vbDefaultButton3 + _
vbSystemModal + _
vbMsgBoxRight, “MSGタイトル”)
End Sub
これを実行してみると下図のようになります
ちなみに、定数の値を指定しみてたらどうなるのかな?と思い試してみました
vbYesNoCancel の値は 3
vbQuestion の値は 32
vbDefaultButton3 の値は 512
vbSystemModal の値は 4096
vbMsgBoxRight の値は 524288
3 + 32 + 512 + 4096 + 524288 = 528931 なので
Sub test()
Dim msg As Integer
msg = MsgBox(“メッセージを右寄せで表示”, 528931, “MSGタイトル”)
End Sub
結果は、定数と同じでした
戻り値
どのボタンをがクリックされたかを示す値が返されます
定 数 | 値 | 説 明 |
vbOK | 1 | [OK] |
vbCancel | 2 | [キャンセル] |
vbAbort | 3 | [中止] |
vbRetry | 4 | [再試行] |
vbIgnore | 5 | [無視] |
vbYes | 6 | [はい] |
vbNo | 7 | [いいえ] |
先ほどのプロシージャに追加してみます
Sub test()
Dim msg As Integer
msg = MsgBox(“メッセージを右寄せで表示”, ?
vbYesNoCancel + _
vbQuestion + _
vbDefaultButton3 + _
vbSystemModal + _
vbMsgBoxRight, “MSGタイトル”)
If msg = vbYes Then
MsgBox “[はい] がクリックされました”
ElseIf msg = vbNo Then
MsgBox “[いいえ] がクリックされました”
ElseIf msg = vbCancel Then
MsgBox “[キャンセル] がクリックされました”
End If
End Sub
[はい] がクリックされると
[いいえ] がクリックされると
[キャンセル] がクリックされると
戻り値が必要ない場合は、下記のように記述するだけです
Sub test()
MsgBox “メッセージ”
End Sub
メモ
メッセージを改行したい場合は
- キャリッジリターン (Chr(13))
- ラインフィード (Chr(10))
を使います
Sub test()
MsgBox “メッセージ” & Chr(13) & “改行しました”
End Sub
こんな記事も書いています