
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

こんな記事も書いています
