1. 概要
MsgBox
関数は、VBAにおいて最も基本的で頻繁に使われるダイアログボックス表示関数の一つです。
ユーザーに情報を伝えたり、警告を表示したり、またユーザーからの簡単な選択(ボタン操作)を取得する目的で使います。
Excel、Access、Wordなど様々なOfficeアプリケーションで共通して利用可能です。
2. MsgBoxの基本的な構文
result = MsgBox(prompt [, buttons] [, title] [, helpfile, context])
- prompt(必須):表示したいメッセージ文字列や式。
- buttons(省略可能):メッセージボックスのボタンの種類やアイコン、既定値、モーダルの種類などを設定する定数。
- title(省略可能):メッセージボックスのタイトルバーに表示する文字列。
- helpfile(省略可能):ヘルプファイルのパス(ほとんど使わない)。
- context(省略可能):ヘルプコンテキストID(ほとんど使わない)。
3. MsgBoxの戻り値
MsgBox
はユーザーが押したボタンに応じて、どのボタンが押されたかを示す定数を返します。
戻り値はVbMsgBoxResult
列挙定数で表され、主なものは以下の通りです。
定数名 | 値 | 説明 |
---|---|---|
vbOK | 1 | OKボタンが押された |
vbCancel | 2 | キャンセルボタンが押された |
vbAbort | 3 | 中止ボタンが押された |
vbRetry | 4 | 再試行ボタンが押された |
vbIgnore | 5 | 無視ボタンが押された |
vbYes | 6 | はいボタンが押された |
vbNo | 7 | いいえボタンが押された |
4. buttons引数の詳細
buttons
引数では、以下の種類のオプションを組み合わせて設定します。
4-1. ボタンの種類
定数名 | 値 | 内容 |
---|---|---|
vbOKOnly | 0 | OKボタンのみ |
vbOKCancel | 1 | OKボタンとキャンセルボタン |
vbAbortRetryIgnore | 2 | 中止・再試行・無視ボタン |
vbYesNoCancel | 3 | はい・いいえ・キャンセル |
vbYesNo | 4 | はい・いいえ |
vbRetryCancel | 5 | 再試行・キャンセル |
4-2. アイコンの種類
定数名 | 値 | 内容 |
---|---|---|
vbCritical | 16 | エラーアイコン(赤い×) |
vbQuestion | 32 | 質問アイコン(?) |
vbExclamation | 48 | 警告アイコン(!) |
vbInformation | 64 | 情報アイコン(青いi) |
4-3. ボタンの既定値(フォーカスの初期位置)
定数名 | 値 | 内容 |
---|---|---|
vbDefaultButton1 | 0 | 1番目のボタンが既定 |
vbDefaultButton2 | 256 | 2番目のボタンが既定 |
vbDefaultButton3 | 512 | 3番目のボタンが既定 |
vbDefaultButton4 | 768 | 4番目のボタンが既定 |
4-4. モーダルタイプ
定数名 | 値 | 内容 |
---|---|---|
vbApplicationModal | 0 | アプリケーションモーダル(既定) |
vbSystemModal | 4096 | システムモーダル(全画面操作不可) |
5. 基本的な使用例
5-1. 単純なメッセージ表示
MsgBox "処理が完了しました。"
OKボタン付きで、タイトルはアプリ名(既定)となります。
5-2. タイトルとアイコンを指定
MsgBox "ファイルが見つかりません。", vbCritical, "エラー"
赤いエラーアイコン付きのメッセージボックスを表示。
5-3. Yes/Noの選択を促す
Dim result As VbMsgBoxResult
result = MsgBox("保存しますか?", vbYesNo + vbQuestion, "確認")
If result = vbYes Then
MsgBox "保存処理を実行します。"
Else
MsgBox "保存をキャンセルしました。"
End If
ユーザーの選択に応じた処理が可能。
6. buttonsの複数定数の組み合わせ方法
buttons
引数は加算(+
)またはビット演算子(Or
)で複数の定数を組み合わせます。
MsgBox "削除しますか?", vbYesNo + vbExclamation, "警告"
もしくは
MsgBox "削除しますか?", vbYesNo Or vbExclamation, "警告"
7. MsgBox関数の戻り値を使った高度な制御例
ユーザーの入力を取得し、処理を分岐させる典型的な例を示します。
Sub DeleteConfirmation()
Dim userChoice As VbMsgBoxResult
userChoice = MsgBox("本当に削除しますか?", vbYesNo + vbCritical, "削除の確認")
Select Case userChoice
Case vbYes
Call DeleteData
Case vbNo
MsgBox "削除はキャンセルされました。"
End Select
End Sub
Sub DeleteData()
' 削除処理のコード
MsgBox "データを削除しました。", vbInformation
End Sub
8. MsgBoxのモーダル性
- モーダルダイアログなので、ユーザーがメッセージボックスを閉じるまで、VBAのコードは一時停止します。
vbApplicationModal
(既定)では、同一アプリケーション内の他のウィンドウの操作をブロックします。vbSystemModal
では全OSレベルでの操作を一時停止させ、非常に強制力が強いが通常は使いません。
9. MsgBoxの制限と注意点
- 表示内容はテキストのみで、リッチテキストや画像は表示できません。
- 長文は読みにくくなるため、適切に改行(
vbCrLf
)を入れることが望ましい。 - フォームなどより複雑なUIを作りたい場合はUserFormの使用が推奨されます。
10. MsgBoxの改行の方法
メッセージの改行にはVB定数を使います。
MsgBox "処理が完了しました。" & vbCrLf & "次の操作を選択してください。"
代表的な改行コードは
vbCrLf
(キャリッジリターン+ラインフィード)vbNewLine
(環境依存の改行コード)vbLf
(ラインフィード)
11. MsgBoxとInputBoxの違い
項目 | MsgBox | InputBox |
---|---|---|
用途 | 情報表示や選択肢提示 | ユーザーからテキスト入力を受け取る |
ユーザー操作 | ボタンを押すだけ | 文字を入力してOKやキャンセルを押す |
戻り値 | 押したボタンの定数(vbOKなど) | 入力された文字列(キャンセルは””) |
12. 便利な定数の一覧(代表例)
定数名 | 説明 |
---|---|
vbOKOnly | OKボタンのみ |
vbOKCancel | OKとキャンセル |
vbAbortRetryIgnore | 中止・再試行・無視 |
vbYesNoCancel | はい・いいえ・キャンセル |
vbYesNo | はい・いいえ |
vbRetryCancel | 再試行・キャンセル |
vbCritical | エラーアイコン |
vbQuestion | 質問アイコン |
vbExclamation | 警告アイコン |
vbInformation | 情報アイコン |
13. MsgBoxの応用例:エラーハンドリングでの利用
Sub SampleErrorHandling()
On Error GoTo ErrHandler
' エラー発生が予想される処理
Dim x As Integer
x = 1 / 0 ' 故意のエラー
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました。処理を中止します。", vbCritical, "エラー"
End Sub
14. まとめ
ポイント | 説明 |
---|---|
用途 | ユーザーへのメッセージ表示や簡単な選択肢入力取得 |
戻り値 | 押されたボタンの定数(vbOK、vbCancelなど) |
主要引数 | prompt(メッセージ)、buttons(ボタン種類+アイコンなど)、title(タイトル) |
モーダル性 | ダイアログ表示中は処理停止し、ユーザー操作を待つ |
改行 | vbCrLf等を使ってメッセージ内改行可能 |
使いどころ | 簡易なユーザー通知や確認ダイアログ、エラーメッセージ表示 |
限界 | 複雑なUIには不向き、UserFormの使用推奨 |