VBAのマクロは処理が終わっても自動では通知を出しません。MsgBox関数を使うことで、完了通知・確認ダイアログ・エラー表示など、ユーザーへのメッセージを柔軟に実装できます。
この記事では、MsgBox関数の基本から、タイトル・アイコン・ボタンのカスタマイズ、ボタン選択後の処理の分岐まで解説します。
MsgBoxの基本的な使い方とは?
最もシンプルな書き方は文字列を渡すだけです。OKボタンのみのダイアログが表示されます。
MsgBox "完了しました"
タイトルとアイコンをカスタマイズするには?
タイトルは Title 引数、アイコンは Buttons 引数で指定します。
' タイトルを設定する
MsgBox "完了しました", Title:="完了"
' エラーアイコン付きのダイアログ
MsgBox "完了できませんでした", Buttons:=vbCritical, Title:="エラー"

アイコンの種類は4つあります。
| 定数 | アイコンの意味 |
|---|---|
vbCritical | エラー(赤い×) |
vbQuestion | 疑問(?) |
vbExclamation | 警告(!) |
vbInformation | 情報(i) |
ボタンの種類を変えるには?
ボタンの種類も Buttons 引数で指定します。アイコンと + で組み合わせることができます。
' 「はい」「いいえ」ボタン+警告アイコン
MsgBox "完了できませんでした", Buttons:=vbYesNo + vbCritical, Title:="確認"

主なボタンの種類をまとめます。
| 定数 | 表示されるボタン |
|---|---|
vbOKOnly | OKのみ(省略時のデフォルト) |
vbOKCancel | OK・キャンセル |
vbYesNo | はい・いいえ |
vbYesNoCancel | はい・いいえ・キャンセル |
vbRetryCancel | 再試行・キャンセル |
ボタン選択後に処理を分岐するには?
MsgBoxの戻り値を変数に受け取り、If〜End If で処理を分岐します。
Dim r As Integer
r = MsgBox("本当に削除しますか?", Buttons:=vbYesNo + vbCritical, Title:="確認")
If r = vbYes Then
' 「はい」を選択した場合
MsgBox "削除を実行しました"
Else
' 「いいえ」を選択した場合
MsgBox "削除をキャンセルしました"
End If
「はい」を押すと vbYes、「いいえ」を押すと vbNo が変数 r に入ります。これを If で判定して処理を切り替えます。
まとめ
MsgBox "メッセージ"でOKボタンのみのダイアログを表示できるTitle:="タイトル"でダイアログのタイトルを変更できるButtons:=vbCriticalなどでアイコンの種類を指定できる- アイコンとボタンは
Buttons:=vbYesNo + vbCriticalのように+で組み合わせる - 戻り値を変数に受け取り
If r = vbYes Thenで処理を分岐できる
よくある質問
MsgBoxを表示せずに処理を進めたいときはどうすればいいですか?
Application.DisplayAlerts = False を使うと、Excelが自動表示する確認ダイアログを非表示にできます。MsgBox自体を消したい場合はコードから削除するか、条件分岐で表示しないようにします。
MsgBoxのメッセージに改行を入れるにはどうすればいいですか?
vbCrLf または Chr(13) & Chr(10) を文字列の間に挟みます。例:MsgBox "1行目" & vbCrLf & "2行目"
キャンセルボタンが押されたときの戻り値は何ですか?
vbCancel(値:2)が返されます。vbYes(6)・vbNo(7)・vbOK(1)・vbAbort(3)などそれぞれの定数で判定できます。
MsgBoxはループの中で何度も表示できますか?
できますが、件数が多いとOKを押す回数が増えて使いにくくなります。ループ終了後に1回だけ表示するか、件数をまとめて表示する設計にすることをおすすめします。
ユーザーがどのボタンを押したかログに記録できますか?
できます。MsgBoxの戻り値を変数に入れてからログファイルに書き出す処理を追加すれば、どのボタンが選ばれたかを記録できます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



