エクセルVBAのMsgBoxの活用ワザ!改行もできる!
初心者エクセルVBAでMsgBoxを使いこなしたい!メッセージの改行ってどうやるの?



メッセージボックスってマクロでよく使うから、マスターしたいよね!
エクセルの操作でよく見かける「メッセージボックス」は、エクセルVBAで自作できます。
この記事では、メッセージボックスを表示するコードMsgBoxの基本の使い方から知っておくと便利な活用ワザまで、マクロ初心者でも分かりやすいように解説しています。
MsgBoxの基本ポイントMsgBoxの基本構文はMsgBox メッセージ, ボタンとアイコン, タイトル- ボタンとアイコンは定数で指定し、両方使うときは
+でつなぐ - メッセージ内の改行は
vbCrLfを使う
ボタンなどの定数や改行にはアルファベットのコードが使われるため、コードだけ見ると難しそうに見えますが、基本構文のとおりに分解すれば難しくありません。
ぜひ、簡単なメッセージから試してみましょう。
また、MsgBoxの活用の幅が広がる「マクロの基礎」はこちらからご覧ください。
エクセルマクロの基礎をゼロから学ぶ!有効化やボタン設置!
※本記事は『OS:Windows11』画像は『Excelのバージョン:Microsoft365』を用いて解説をしています。
エクセルVBAのMsgBox基本の使い方
エクセルVBAのMsgBoxは、マクロを実行したときにメッセージボックスを表示するコードです。
例えば次のような場合に使います。
- シートをコピーをする前に「本当に実行しますか?」と確認をする
- 処理が完了したときに「完了しました!」とお知らせする
- 入力内容に問題があるときに「エラーが発生しました」と警告する
メッセージボックスには「OK」や「キャンセル」などのボタンがついています。
ボタンをクリックするまでマクロの処理が止まるため、エクセルを操作する人に確実にメッセージを伝えられます。
まずは基本の構文から確認していきましょう。


作例では一部、上記の「テストの点数一覧表」を使いますが、新規のワークブックでも構いません。
メッセージボックスを出す基本構文
MsgBoxの基本の構文は次のとおりです。
MsgBox Prompt, Buttons, Title Prompt:メッセージの内容Buttons:ボタンやアイコンの種類Title:タイトルバーに表示するテキスト
引数の間は,カンマで区切ります。
また、ButtonsとTitleは省略できます。
Buttonsを省略すると「OK」ボタンのみ、Titleを省略すると「Microsoft Excel」と表示されます。
まずは、ButtonsとTitleを省略した最もシンプルなコードを作ってみましょう。


- 「開発」タブを押す
- 「Visual Basic」をクリック


- 「挿入」タブをクリック
- 「標準モジュール」を選択


- 「挿入」タブを選択
- 「プロシージャ」をクリック


- 「名前」欄を入力
- 「OK」ボタンを押す


Public Sub メッセージ表示()~End Subの間に以下のコードをコピーしましょう。
MsgBox "これはテストです"""ダブルクォーテーションの中のテキストは自由に入力してかまいません。


- 「▶」実行をクリック
- STEP4で設定したマクロ名を選択
- 「実行」ボタンを押す


入力したテキストがメッセージボックスに表示されたことを確認しましょう。
まずはこの基本のコードについて、テキストを色々と変えて試してみて下さい。
メッセージボックスにつけられるボタンとアイコン
MsgBoxのButtonsという引数を指定することで、メッセージボックスに表示するボタンやアイコンの種類を変えられます。
ボタン、アイコンともに決められた値を使って指定します。
指定する方法は次の2通りです。
- 定数:
vbYesNoやvbOKOnlyなど - 数値:例えば
vbYesNoなら4など、定数に対応する数字
定数・数値どちらでも処理結果は同じですが、コードを読みやすくするため定数を使うのが一般的です。



この記事ではすべて定数で解説するよ!
ボタンの種類と定数の一覧
ボタンの種類を指定する定数は次の6種類です。
| 定数 | 数値 | 表示されるボタン |
|---|---|---|
vbOKOnly | 0 | OKのみ |
vbOKCancel | 1 | OK・キャンセル |
vbAbortRetryIgnore | 2 | 中止・再試行・無視 |
vbYesNoCancel | 3 | はい・いいえ・キャンセル |
vbYesNo | 4 | はい・いいえ |
vbRetryCancel | 5 | 再試行・キャンセル |


よく使われるのは、「はい・いいえ」の選択ができるvbYesNoです。


例えば上記のように「はい・いいえ」が選択できるメッセージボックスは、コードを次のように書きます。
Public Sub 実行確認()
MsgBox "マクロを実行しますか?", vbYesNo
End Subこのマクロを実行すると「はい・いいえ」のボタンが表示されるものの、メッセージボックスを表示するコードしか書かれていないためどちらのボタンを押しても処理は変わりません。
実際の業務で使うマクロは、このコードの後に、ボタンの選択によって処理を分岐させるコードが続きます。
アイコンの種類と定数の一覧
アイコンの種類を指定する定数は次の4種類があります。
| 定数 | 数値 | 表示されるボタン | 使いみち |
|---|---|---|---|
vbCritical | 16 | 赤いバツマーク | エラーや重大な警告 |
vbQuestion | 32 | ?マーク | 確認や質問 |
vbExclamation | 48 | !マーク | 注意や警告 |
vbInformation | 64 | iマーク | お知らせや完了通知 |




目的に合ったアイコンを使って、内容の重要度が直感的に分かるメッセージボックスを作りましょう。
なお、先に説明したボタンと、アイコンを同時に指定するには、2つの定数を+プラスでつなぎます。


例えば上記のように「はい・いいえ」が選択できてアイコンが表示されているメッセージボックスは、コードを次のように書きましょう。
Public Sub 実行確認アイコン付き()
MsgBox "マクロを実行しますか?", vbYesNo + vbCritical
End SubvbYesNo + vbCriticalと指定することで、「はい・いいえ」のボタンと「×マーク」のアイコンを同時に表示できます。
ボタンとアイコンの同時表示はよく使われるので、必ず覚えておきましょう。
メッセージボックスにタイトルバーを設定しよう
メッセージボックスのタイトルバーに表示されるテキストを変えるには、MsgBoxのTitleという引数を指定しましょう。
自分でタイトルを設定することで、より実用的なマクロが作れます。


上記のメッセージボックスは、以下のコードで作成しています。
Public Sub タイトル設定()
MsgBox "データの保存が完了しました!", vbInformation, "保存完了"
End Subメッセージボックスのテキストと同様、タイトルも""ダブルクォーテーションで囲みましょう。
ボタンやアイコンを設定せず、タイトルを設定したい場合は次のようにメッセージの後にカンマを2つ打ちます。
MsgBox "メッセージ",, "タイトル"タイトル・ボタン・アイコンをすべて設定したメッセージボックスのコードは以下のとおりです。
併せてご確認ください。


Public Sub 引数をすべて活用()
MsgBox "選択したデータを削除します。よろしいですか?", vbYesNoCancel + vbExclamation, "削除の確認"
End SubvbYesNoCancel + vbExclamationで「はい・いいえ・キャンセル」ボタンと「!」アイコンを表示し、"削除の確認"でタイトルを設定しています。
コードを見ると複雑そうに見えますが、一つひとつを分解するとそれほど難しくありません。
削除や上書き保存など、マクロを実施する際に特に注意を促したい場面では、このようにボタンとアイコン、タイトルを組み合わせたメッセージボックスを表示してみましょう。
MsgBoxのYes/Noで処理を分岐させよう
実際のマクロでは、「はい」ボタンと「いいえ」ボタンで後続の処理を変えることがほとんどです。
処理を変えるために「戻り値」を活用します。
MsgBoxの戻り値とは、それぞれのボタンに対応する数値のことです。
戻り値を使ってIf文と組み合わせることで、ボタンの選択によって後続の処理を分岐させることができます。
前章のボタンやアイコンと同様、戻り値にも数値と定数が用意されています。
戻り値は7種類です。
| 定数 | 数値 | 押されたボタン |
|---|---|---|
vbOK | 1 | OK |
vbCancel | 2 | キャンセル |
vbAbort | 3 | 中止 |
vbRetry | 4 | 再試行 |
vbIgnore | 5 | 無視 |
vbYes | 6 | はい |
vbNo | 7 | いいえ |
If文と組み合わせるときは、数値ではなく定数を使うのが一般的です。
また、戻り値を受け取るためには、ボタンを押した結果を変数に格納します。
よく使う「はい・いいえ」の分岐コードを見てみましょう。
Public Sub データ削除()
Dim result As Integer
result = MsgBox("選択したデータを削除します。よろしいですか?", vbYesNo + vbExclamation, "削除の確認")
If result = vbNo Then
MsgBox "削除をキャンセルしました。", vbInformation, "キャンセル"
Exit Sub '処理をここで終了する
End If
'「はい」を押したときだけここから先の処理が実行される
MsgBox "データを削除しました。", vbInformation, "完了"
End Subこのコードでは、MsgBoxでボタンを押した結果を変数resultに格納しています。
ここでポイントとなるのが、If文で「いいえ」を押したときにIf result = vbNo Then~End Ifの処理が実行されることです。


マクロを実務で使う場合、「いいえ」を押したときに処理を終了したい場合がほとんどです。
その場合は、Exit Subを使って処理を終了させます。
「はい」を押したときは、If文を何もせずに通過し、その先にある処理を実行します。
この書き方は定番の書き方ですので、ぜひ覚えておいてください。
エクセルVBAでMsgBoxをさらに使いこなそう
ここからはMsgBoxをより使いやすくするテクニックを3つご紹介します。
- メッセージボックス内で改行する方法
- セルの値や変数をメッセージボックスに表示
- VBAの関数をメッセージボックスに表示
どの活用ワザも実務でよく使われます。
コードをコピーしてアレンジできるようまとめていますので、ぜひ、活用してください。
メッセージボックス内で改行する方法
メッセージが長くなるときは、途中で改行を入れることで読みやすくなります。
メッセージボックス内で改行するには「改行コード」と呼ばれる特殊な定数を使います。
エクセルVBAで使える改行コードは主に以下の3種類です。
vbCrLf:Windowsで最もよく使われる標準コードvbLf:Mac系で使われる改行コードChr(13) & Chr(10):vbCrLfと同じ動作をする
vbCrLfだけ覚えておけば問題ありません。
ただし古いマクロなどでChr(13) & Chr(10)を見かけることもあるので、こちらも余裕があれば覚えておきましょう。
改行コードを使った例を見てみましょう。
メッセージの中で改行したい位置に& vbCrLf &を入れます。
前後のメッセージをそれぞれ""ダブルクォーテーションで囲むのを忘れないようにしましょう。
Public Sub 改行メッセージ()
MsgBox "処理が完了しました。" & vbCrLf & "ファイルを確認してください。", vbInformation, "完了"
End Subこのコードを実行した結果は以下のとおりです。
& vbCrLf &の位置で改行されていることを確認してください。


複数行にわたってメッセージを表示したい場合は、メッセージを変数に格納して組み立ててからMsgBoxに渡すと読みやすいコードになります。
以下のコードは、変数msgにテキストを1行ずつ追加で格納しています。
Public Sub 複数行メッセージ()
Dim msg As String
msg = "以下の処理を実行しました。" & vbCrLf
msg = msg & "・データのコピー" & vbCrLf
msg = msg & "・ファイルの保存" & vbCrLf
msg = msg & "・シートの更新"
MsgBox msg, vbInformation, "処理完了"
End Subこれは変数の独特の書き方で、msg = msg & "追加したい文字"がポイントです。
「今のmsgの内容に、新しい文字列をつなげてmsgに上書き保存する」というイメージです。



料理に例えると、鍋に具材を一つずつ追加しているみたいだね!



最終的に、msgには4行分の文字列がまとめて入った状態になり、それをMsgBoxに渡しているよ!
コードを実行した結果は以下の図のとおりです。


改行が多いメッセージボックスを作る場合は、このように変数に1行ずつ追加していく方法も活用しましょう。
セルの値や変数をメッセージボックスに表示
前節で解説したとおり、MsgBoxのメッセージには、変数に格納された値を表示することができます。
同様に、セルの値も表示可能です。
セルの値を表示する方法は、次の2通りあります。
- セルの値を変数に格納する
- コードにセルの値を直接表示する
結果は同じなので、どちらを採用しても構いません。
ただ、同じセル番地を複数回使う場合は、変数に格納するほうが効率が良いのでお勧めです。
まず、セルの値を変数で表示するサンプルコードをご紹介します。
Public Sub セルの値を変数で表示()
Dim kyouka As String
Dim tensu As Integer
Dim msg As String
kyouka = Range("A4").Value
tensu = Range("B4").Value
msg = "教科:" & kyouka & vbCrLf
msg = msg & "点数:" & tensu & "点でよろしいですか?"
MsgBox msg, vbYesNo + vbQuestion, "点数確認"
End Sub変数kyoukaA4セルの値、tensuにB4セルの値を格納し、その上で変数msgでメッセージの内容を組み立てています。
以下の手順でマクロを実行しましょう。


- 変数に格納するデータがA4セル、B4セルであることを確認
- VBAエディターで「実行」ボタンを押す
- メッセージボックスに表示された内容を確認する
また、セルの値を直接表示させるコードは次のとおりです。
処理がシンプルな場合は、セルの値を直接表示させるほうがコードを短く書けます。
Public Sub セルの値を直接表示()
Dim msg As String
msg = "教科:" & Range("A5").Value & vbCrLf
msg = msg & "点数:" & Range("B5").Value & "点でよろしいですか?"
MsgBox msg, vbYesNo + vbQuestion, "点数確認その2"
End Sub変数kyoukatensuを使う代わりに、Rangeを使ってA5セル、B5セルをコードに直接書き込んでいます。
マクロを以下の流れで実行し、結果を確認しましょう。


- コードに書き込まれているセルがA5セル、B5セルであることを確認
- VBAエディターで「実行」ボタンを押す
- メッセージボックスの内容を確認する
セルの内容をメッセージボックスに表示するマクロは、実務でよく使われますのでポイントを押さえておきましょう。
VBAの関数をメッセージボックスに表示
MsgBoxでは、VBAの組み込み関数も表示できます。
実務でよく使われる主なものをご紹介します。
Date:現在の日付Now:現在の日時Time:現在の時刻ActiveSheet.Name:アクティブなシート名ActiveWorkbook.Name:アクティブなファイル名ThisWorkbook.Path:ファイルの保存場所のパス


上記のメッセージボックスは、以下のマクロを実行することで表示できます。
Public Sub 関数のサンプル()
msg = "現在の日時: " & Now() & vbCrLf
msg = msg & "アクティブシート: " & ActiveSheet.name & vbCrLf
msg = msg & "ファイルの保存場所: " & ThisWorkbook.Path
MsgBox msg, , "関数の確認"
End Subセルの表示やメッセージと組み合わせて、より分かりやすいメッセージを作りましょう。
入力を受け取るInputBoxをMsgBoxとセットで使おう!
エクセルVBAでは、MsgBoxと似た機能にInputBoxがあります。
MsgBoxがメッセージを表示するのに対し、InputBoxはユーザーに文字や数値を入力してもらうものです。
セットで覚えておくことで、実務に柔軟に対応するマクロが作れます。
InputBoxの基本の構文は次のとおりです。
InputBox Prompt,Title,DefaultPrompt:メッセージの内容Title:タイトルバーに表示するテキストDefault:入力欄に最初から表示しておく値
引数の間は,カンマで区切ります。
InputBoxで入力された値をMsgBoxで表示してみましょう。
Public Sub 件数を入力()
Dim count As String
count = InputBox("処理する件数を入力してください。", "件数の入力", "10")
If count = "" Then
MsgBox "キャンセルされました。", vbInformation, "キャンセル"
Exit Sub
End If
MsgBox count & "件を処理します。", vbInformation, "確認"
End Subこのマクロを実行すると、InputBoxで入力された値が変数countに格納され、countの値がメッセージボックスに表示されます。
InputBoxはこのように表示されます。


上記のように入力欄にあらかじめ値を表示しておくことも可能です。
このままOKを押すか、値を書き換えてOKボタンを押すと、以下のようにメッセージボックスが表示されます。


なお、InputBoxでキャンセルを押したときは、""空文字が返ってきます。
If count = "" Thenでキャンセルされたかどうかをチェックし、空文字の場合はExit Subで処理を終了するのが定番の書き方です。
このように、InputBoxとMsgBoxを組み合わせると、入力してもらった内容を確認する一連の流れをスムーズに作れるので、セットで覚えておきましょう。
InputBoxは入力された値を必ず文字列として返します。
計算に使いたい場合は、文字列から数値に変換する必要があるので注意しましょう。
エクセルVBAのMsgBoxに関するQ&A
エクセルVBAのMsgBoxで親切なマクロを作ろう!
エクセルVBAのMsgBoxの使い方について、基本構文からボタン・アイコンの設定、Yes/Noによる処理の分岐、改行やセルの値の表示、InputBoxとの使い分けまで幅広く解説しました。
MsgBoxを使いこなすことで、マクロを実行する前に確認を取ったり、処理の結果をユーザーにわかりやすく伝えたりなど、より親切で実用的なマクロが作れます。
まずは基本のコードをコピーして動かすことから始めてみましょう。
それではおさらいです。
MsgBoxの基本構文はMsgBox メッセージ, ボタンとアイコン, タイトル- ボタンとアイコンは定数で指定し、両方使うときは
+でつなぐ - メッセージ内の改行は
vbCrLfを使う
MsgBoxはVBAの中でも特によく使う機能のひとつです。
この記事のコードをベースに、ご自身のマクロにどんどん取り入れてみてください。
MsgBoxと併せて活用できるマクロの基本を以下の記事にまとめましたので、ぜひご活用ください。
エクセルマクロの基礎をゼロから学ぶ!有効化やボタン設置!