VBAの MsgBox の使用方法で困っていませんか?
たとえば、メッセージを2行に分けたいときは、文字列の間に vbCrLf を入れます。
MsgBox "1行目" & vbCrLf & "2行目"MsgBoxで改行するなら、まず vbCrLf を使えば大丈夫です。
変数を一緒に表示したいときは & でつなぎ、確認メッセージで処理を分けたいときは vbYesNo と戻り値を使います。
Sub MsgBoxQuickSample()
Dim count As Long
count = 12
MsgBox "処理件数: " & count & "件" & vbCrLf & _
"処理が完了しました。", vbInformation, "完了"
End Subこの記事では、VBAのMsgBoxで改行する方法、変数を表示する方法、Yes/Noで分岐する方法、ボタン・アイコン定数の使い分け、実務でよくあるミスをまとめます。
【 この記事の概要 】
| よく使う度 | |
| 難しさ | |
| 覚えておくと安心度 |
VBAのMsgBoxで改行する基本コードをサクッと解説
MsgBoxで複数行のメッセージを表示したい場合は、文字列と文字列の間に vbCrLf を入れます。
使用頻度は多いため、覚えておきましょう。
Sub ShowMessageWithLineBreak()
MsgBox "1行目" & vbCrLf & "2行目"
End Sub実行すると、メッセージボックス内で「1行目」と「2行目」が別の行に表示されます。

vbCrLfで2行・3行に分けて表示する
3行以上にしたい場合も、同じように vbCrLf をつなげます。
Sub ShowThreeLineMessage()
MsgBox "確認してください。" & vbCrLf & _
"A列に空白があります。" & vbCrLf & _
"修正後にもう一度実行してください。"
End SubVBAでは長い1行を読みやすくするために、半角スペースと _ を使ってコードの記載を折り返せます。vbCrLf は表示結果の改行、_ はコード上の折り返しです。この2つは役割が違います。
| 書き方 | 何をするものか | MsgBoxでのおすすめ |
|---|---|---|
vbCrLf | 改行を入れる定数 | Windows版Excelでは基本これでOK |
vbNewLine | 実行環境に合わせた改行定数 | Windows以外も意識するなら候補 |
Chr(10) | LFだけを入れる | MsgBoxでは基本的に優先しなくてよい |
Chr(13) & Chr(10) | CRとLFを直接書く | vbCrLf のほうが読みやすい |
Microsoft Learnでは、複数行のメッセージは Chr(13)、Chr(10)、またはその組み合わせで区切れると説明されています。
VBA側には vbCrLf という定数が用意されているため、通常は数値や Chr を直接書かずに vbCrLf を使うほうが読みやすいです。
変数と文字列を一緒に表示する
MsgBoxに変数を表示するときは、文字列と変数を & でつなぎます。
Sub ShowVariableMessage()
Dim userName As String
Dim count As Long
userName = "田中"
count = 12
MsgBox userName & "さん" & vbCrLf & _
"処理件数は " & count & " 件です。"
End Subこの例では、1行目に名前、2行目に処理件数を表示します。
数値の変数も & でつなげますが、単位や説明文を一緒に入れると、後から見たときに意味が分かりやすくなります。

よくある失敗は、文字列の外に説明を書いてしまうことです。
'// エラーになりやすい例
' MsgBox 処理件数は & count & 件です
'// 正しい例
MsgBox "処理件数は " & count & " 件です。"日本語の説明文は " " で囲み、変数は囲まずに & でつなぎましょう。
MsgBoxの基本構文と設定方法
MsgBoxは、次の5つの引数で設定します。初心者が最初に覚えるべきなのは prompt、buttons、title の3つです。 helpfile と context は古いヘルプ機能と組み合わせる引数なので、通常のExcel VBAでは「存在だけ知っておく」くらいで問題ありません。
実際のメッセージボックスでは、prompt が本文、buttons がボタンやアイコン、title がタイトルバーに対応します。 下の図のように、コードの引数と画面の場所を結びつけて覚えると迷いにくいです。


| 引数 | 必須/省略 | 指定する内容 | 初心者向けの覚え方 |
|---|---|---|---|
| prompt | 必須 | 表示する本文メッセージ | 画面中央に出る文章 |
| buttons | 省略可能 | ボタン、アイコン、既定ボタン | OK/Yes/Noやアイコンの設定 |
| title | 省略可能 | タイトルバーの文字 | 画面上部の見出し |
| helpfile | 省略可能 | ヘルプファイルのパス | 通常は使わない |
| context | 省略可能 | ヘルプ内のトピック番号 | helpfile とセットで使う |
prompt(必須)の設定方法
prompt は、MsgBoxに表示する本文です。文字列を表示する場合は " " で囲みます。
Sub ShowSimplePrompt()
MsgBox "これはシンプルなメッセージです。"
End Subこのコードを実行すると、本文に「これはシンプルなメッセージです。」と表示されます。
複数の変数や文字列を組み合わせたい場合は、& でつなぎます。
Sub ShowConcatenatedPrompt()
Dim part1 As String
Dim part2 As String
part1 = "こんにちは、"
part2 = "MsgBoxのテストです。"
MsgBox part1 & part2
End Sub改行を入れる場合は、前の章で紹介した vbCrLf を本文の途中につなげます。
Sub ShowPromptWithLineBreak()
MsgBox "行1" & vbCrLf & "行2" & vbCrLf & "行3"
End Subprompt は長い文章も書けますが、業務用の確認メッセージでは「何をするか」「利用者に何をしてほしいか」を短く書くほうが伝わります。
| 目的 | 書き方 | 表示される内容 |
|---|---|---|
| 固定文を出す | MsgBox "処理が完了しました。" | 処理が完了しました。 |
| 変数を出す | MsgBox "件数: " & count & "件" | 変数の値を含むメッセージ |
| 改行して出す | MsgBox "1行目" & vbCrLf & "2行目" | 2行のメッセージ |
buttons(省略可能)の種類とアイコン一覧
MsgBoxはメッセージを表示するだけでなく、OK、キャンセル、はい、いいえなどのボタンを表示できます。ボタンの結果を受け取ると、ユーザーの選択に応じて処理を分けられます。
buttons では、主に次の3種類を組み合わせます。

| 種類 | 何を決めるか | 例 |
|---|---|---|
| 選択ボタン | OK、キャンセル、はい、いいえなど | vbOKOnly、vbYesNo |
| アイコン | 情報、質問、注意、重大な警告など | vbInformation、vbQuestion |
| 既定ボタン | Enterキーで選ばれる初期ボタン | vbDefaultButton1、vbDefaultButton2 |
たとえば、Yes/Noボタン、質問アイコン、タイトルを付ける場合は次のように書きます。
Sub ShowButtonsSample()
MsgBox "処理を続けますか?", vbYesNo + vbQuestion, "確認"
End Sub選択ボタンの種類
| 定数 | 表示されるボタン | 値 | 説明 |
|---|---|---|---|
vbOKOnly | ![]() | 0 | OKボタンだけを表示 |
vbOKCancel | ![]() | 1 | OKとキャンセルを表示 |
vbAbortRetryIgnore | ![]() | 2 | 中止、再試行、無視を表示 |
vbYesNoCancel | ![]() | 3 | はい、いいえ、キャンセルを表示 |
vbYesNo | ![]() | 4 | はい、いいえを表示 |
vbRetryCancel | ![]() | 5 | 再試行、キャンセルを表示 |
アイコンの種類
| 定数 | アイコン | 値 | 使いどころ |
|---|---|---|---|
vbCritical | ![]() | 16 | 重大なエラーや中断が必要な警告 |
vbQuestion | ![]() | 32 | Yes/Noなどの確認 |
vbExclamation | ![]() | 48 | 入力漏れや注意喚起 |
vbInformation | ![]() | 64 | 完了通知や案内 |
既定ボタンの種類
| 定数 | 値 | 内容 |
|---|---|---|
vbDefaultButton1 | 0 | 1番目のボタンを既定にする |
vbDefaultButton2 | 256 | 2番目のボタンを既定にする |
vbDefaultButton3 | 512 | 3番目のボタンを既定にする |
vbDefaultButton4 | 768 | 4番目のボタンを既定にする |
削除や上書きのように戻しにくい処理では、vbDefaultButton2 や vbDefaultButton3 を使い、Enterキーだけでうっかり実行されないようにすると安全です。
戻り値もよく使うものだけ先に覚えれば大丈夫です。Yes/NoやOK/Cancelの結果を受け取ると、ユーザーの選択に応じて処理を分けられます。
| 戻り値 | 意味 | よく使う場面 |
|---|---|---|
vbOK | OKが押された | OK/Cancelの確認 |
vbCancel | キャンセルが押された | 中止処理 |
vbYes | はいが押された | 実行する |
vbNo | いいえが押された | 実行しない |
Microsoft Learnでは、ボタン種別、アイコン、既定ボタン、モーダル指定はそれぞれ別グループから1つずつ選んで組み合わせると説明されています。たとえば、ボタンを2種類同時に vbOKCancel + vbYesNo のように混ぜる必要はありません。
title・helpfile・contextの設定方法
title は、メッセージボックスのタイトルバーに表示する文字列です。省略すると、Excelではアプリケーション名が表示されます。

Sub ShowMessageWithTitle()
MsgBox "処理が完了しました。", vbInformation, "完了"
End Sub実務では「完了」「確認」「エラー」「入力チェック」など、何のメッセージか分かるタイトルを付けると親切です。
helpfile は、MsgBoxに関連付けるヘルプファイルを指定する引数です。context は、そのヘルプファイル内の特定トピック番号を指定する引数です。
Sub HelpFileExample()
MsgBox "詳細はヘルプをご覧ください。", _
vbOKOnly, _
"ヘルプメッセージ", _
"C:\Path\To\HelpFile.chm", _
1
End Subもう1つ、context の値を変えると、ヘルプファイル内の別トピックへジャンプさせる想定になります。
Sub ContextExample()
MsgBox "詳細はヘルプをご覧ください。", _
vbOKOnly, _
"ヘルプメッセージ", _
"C:\Path\To\HelpFile.chm", _
100
End Subただし、現在のExcel VBA実務では helpfile と context を使う場面はかなり少ないです。ヘルプファイルが正しく配置されていないと機能しないため、初心者は prompt、buttons、title を優先して覚えてください。
Yes/No分岐と実務で使うMsgBoxの応用例
MsgBoxは「処理完了を知らせる」だけでなく、削除前の確認、入力漏れの警告、処理件数の表示にも使えます。
ただし、何でもMsgBoxにすると作業が止まりすぎるため、重要な場面に絞って使うのが実務向きです。
Yes/Noで処理を分岐して削除・クリア前に確認する
セルの値を消す前に確認を出す例です。vba_clear 記事のようなクリア処理と組み合わせると、誤操作を減らせます。
Sub ConfirmBeforeClear()
Dim answer As VbMsgBoxResult
answer = MsgBox("入力欄の値をクリアします。" & vbCrLf & _
"よろしいですか?", _
vbYesNo + vbExclamation + vbDefaultButton2, _
"クリア確認")
If answer = vbYes Then
Worksheets("Sheet1").Range("B2:F7").ClearContents
MsgBox "入力欄をクリアしました。", vbInformation, "完了"
Else
MsgBox "クリアを中止しました。", vbInformation, "中止"
End If
End Sub
ポイントは、確認文に「何をするか」を具体的に書くことです。
「実行しますか?」だけだと、読者も利用者も何が起きるのか判断しにくくなります。
| 悪い例 | 良い例 |
|---|---|
| 実行しますか? | 入力欄の値をクリアします。よろしいですか? |
| 削除しますか? | 選択した行を削除します。元に戻せない場合があります。よろしいですか? |
| エラーです | A列に空白があります。修正後にもう一度実行してください。 |
処理件数やエラー内容を変数で表示する
処理結果を表示するときは、件数や対象シート名を変数で入れると分かりやすくなります。
Sub ShowResultSummary()
Dim sheetName As String
Dim processedCount As Long
sheetName = "売上一覧"
processedCount = 125
MsgBox "対象シート: " & sheetName & vbCrLf & _
"処理件数: " & processedCount & "件" & vbCrLf & _
"集計が完了しました。", _
vbInformation, _
"処理結果"
End Subデバッグ目的で一時的に確認したいだけなら Debug.Print のほうが向く場合もあります。 ユーザーに見せる必要がある情報は MsgBox、開発者だけが確認する途中経過は Debug.Print、という使い分けにすると作業が止まりにくくなります。

MsgBoxを使いすぎない判断基準
MsgBoxは表示された時点で処理が止まり、ユーザーがボタンを押すまで次へ進みません。確認が必要な場面では便利ですが、繰り返し処理の中で何度も表示すると、かえって作業効率が落ちます。
| 場面 | MsgBoxを使うか | 理由 |
|---|---|---|
| 削除・上書き前の確認 | 使う | 誤操作を防ぐ価値が高い |
| 処理完了の通知 | 使ってよい | ユーザーが完了を知りたい場合に有効 |
| 入力漏れの警告 | 使う | 修正すべき内容を伝えられる |
| 100行のループ中に毎回表示 | 避ける | 何度も止まって作業にならない |
| 開発中の変数確認 | 場合による | 本番コードでは Debug.Print も検討 |
MsgBoxの文章は、処理内容に合わせて具体化すると使いやすくなります。
AIに頼む場合は、次のように「どの処理の前後に出すか」まで指定すると、業務に合う確認文とコードを作りやすいです。
MsgBoxの文章は、処理内容に合わせて具体化すると使いやすくなります。AIに頼む場合は、次のように「どの処理の前後に出すか」まで指定すると、業務に合う確認文とコードを作りやすいです。
次のVBAコードに、確認用のMsgBoxを追加してください。
目的は「実行前にユーザーへ処理内容を伝え、Yesなら実行、Noなら中止すること」です。
確認文には、対象シート名、対象範囲、実行すると何が変わるかを入れてください。
初心者にも分かるように、変更点と注意点も説明してください。
MsgBoxのよくあるミス・FAQとまとめ
最後に、MsgBoxでつまずきやすいポイントを整理します。
改行、変数、Yes/No分岐の3つを押さえると、実務ではかなり使い回せます。
よくあるミスをご紹介
| ミス | 原因 | 直し方 |
|---|---|---|
| 改行されない | vbCrLf を文字列の外でつないでいない | "1行目" & vbCrLf & "2行目" と書く |
| 変数名がそのまま表示される | 変数を " " で囲んでいる | 変数は囲まず & count & のようにつなぐ |
| Yes/Noの結果で分岐できない | MsgBoxの戻り値を受け取っていない | answer = MsgBox(...) のように変数へ入れる |
| キャンセル時も処理される | vbCancel の条件を見ていない | vbYesNoCancel を使うならCancelも分ける |
| コードが横に長すぎる | 1行に全部書いている | _ でコードを折り返す |
よくある質問
まとめ
実務では、削除・クリア・上書きの前に確認メッセージを入れると安全です。
一方で、ループ中に何度もMsgBoxを出すと作業が止まりすぎるため、完了通知や重要確認に絞って使いましょう。
- MsgBoxで改行したいなら、まず
vbCrLfを使います。
改行について をもう一度見る - 変数を表示するときは
&でつなぎます。
変数と一緒に表示するをもう一度見る - Yes/Noで分岐したいときは戻り値を
VbMsgBoxResult型の変数で受け取ります。
MsgBoxの結果を取得する をもう一度見る
自宅でじっくり学びたい方へ
MsgBoxの使い方が分かったら、次は変数・条件分岐・セル操作を順番に整理しておくと、 実務でVBAを使うときに迷いにくくなります。
※リンク先の記事には、Udemy講座などの広告リンクが含まれます。

- Microsoft Learn: MsgBox function
- Microsoft Learn: Miscellaneous constants












