エクセルVBAのMsgBoxの活用ワザ!改行もできる!

初心者

エクセルVBAMsgBoxを使いこなしたい!メッセージの改行ってどうやるの?

Dr.オフィス

メッセージボックスってマクロでよく使うから、マスターしたいよね!

エクセルの操作でよく見かける「メッセージボックス」は、エクセルVBAで自作できます。

この記事では、メッセージボックスを表示するコードMsgBoxの基本の使い方から知っておくと便利な活用ワザまで、マクロ初心者でも分かりやすいように解説しています。

MsgBoxの基本ポイント
  1. MsgBoxの基本構文はMsgBox メッセージ, ボタンとアイコン, タイトル
  2. ボタンとアイコンは定数で指定し、両方使うときは+でつなぐ
  3. メッセージ内の改行はvbCrLfを使う

ボタンなどの定数や改行にはアルファベットのコードが使われるため、コードだけ見ると難しそうに見えますが、基本構文のとおりに分解すれば難しくありません。

ぜひ、簡単なメッセージから試してみましょう。

また、MsgBoxの活用の幅が広がる「マクロの基礎」はこちらからご覧ください。

エクセルマクロの基礎をゼロから学ぶ!有効化やボタン設置!

※本記事は『OS:Windows11』画像は『Excelのバージョン:Microsoft365』を用いて解説をしています。

\ Officeドクター読者限定・無料Q&A /

この記事の内容でわからないことや、今すぐ解決したいOfficeのお悩みはありませんか?
Officeドクターの中の人が、公式LINEで直接ご質問にお答えします!
下のボタンをタップして、表示された入力欄からそのまま送信してくださいね。

目次

エクセルVBAのMsgBox基本の使い方

エクセルVBAのMsgBoxは、マクロを実行したときにメッセージボックスを表示するコードです。

例えば次のような場合に使います。

  • シートをコピーをする前に「本当に実行しますか?」と確認をする
  • 処理が完了したときに「完了しました!」とお知らせする
  • 入力内容に問題があるときに「エラーが発生しました」と警告する

メッセージボックスには「OK」や「キャンセル」などのボタンがついています。

ボタンをクリックするまでマクロの処理が止まるため、エクセルを操作する人に確実にメッセージを伝えられます。

まずは基本の構文から確認していきましょう。

新規のワークブックでもOKです
新規のワークブックでもOKです

作例では一部、上記の「テストの点数一覧表」を使いますが、新規のワークブックでも構いません。

メッセージボックスを出す基本構文

MsgBoxの基本の構文は次のとおりです。

MsgBox Prompt, Buttons, Title 
  • Prompt:メッセージの内容
  • Buttons:ボタンやアイコンの種類
  • Title:タイトルバーに表示するテキスト

引数の間は,カンマで区切ります。

また、ButtonsTitleは省略できます。

Buttonsを省略すると「OK」ボタンのみ、Titleを省略すると「Microsoft Excel」と表示されます。

まずは、ButtonsTitleを省略した最もシンプルなコードを作ってみましょう。

STEP
「Visual Basic」を開く
「開発」タブより始める
「開発」タブより始める
  • 「開発」タブを押す
  • 「Visual Basic」をクリック
STEP
「標準モジュール」を挿入
「挿入」タブを押す
「挿入」タブを押す
  • 「挿入」タブをクリック
  • 「標準モジュール」を選択
STEP
「プロシージャ」を挿入
プロシージャも「挿入」タブから操作
プロシージャも「挿入」タブから操作
  • 「挿入」タブを選択
  • 「プロシージャ」をクリック
STEP
マクロ名を付ける
名前は日本語でOK
名前は日本語でOK
  • 「名前」欄を入力
  • 「OK」ボタンを押す
STEP
コードを入力する
ダブルクォーテーションを忘れずに入力
ダブルクォーテーションを忘れずに入力

Public Sub メッセージ表示()End Subの間に以下のコードをコピーしましょう。

MsgBox "これはテストです"

""ダブルクォーテーションの中のテキストは自由に入力してかまいません。

STEP
マクロを実行する
マクロ名を選択して実行
マクロ名を選択して実行
  • 「▶」実行をクリック
  • STEP4で設定したマクロ名を選択
  • 「実行」ボタンを押す
STEP
メッセージボックスが表示されることを確認
メッセージを確認
メッセージを確認

入力したテキストがメッセージボックスに表示されたことを確認しましょう。

まずはこの基本のコードについて、テキストを色々と変えて試してみて下さい。

メッセージボックスにつけられるボタンとアイコン

MsgBoxButtonsという引数を指定することで、メッセージボックスに表示するボタンやアイコンの種類を変えられます。

ボタン、アイコンともに決められた値を使って指定します。

指定する方法は次の2通りです。

  1. 定数:vbYesNovbOKOnlyなど
  2. 数値:例えばvbYesNoなら4など、定数に対応する数字

定数・数値どちらでも処理結果は同じですが、コードを読みやすくするため定数を使うのが一般的です。

Dr.オフィス

この記事ではすべて定数で解説するよ!

ボタンの種類と定数の一覧

ボタンの種類を指定する定数は次の6種類です。

定数数値表示されるボタン
vbOKOnly0OKのみ
vbOKCancel1OK・キャンセル
vbAbortRetryIgnore2中止・再試行・無視
vbYesNoCancel3はい・いいえ・キャンセル
vbYesNo4はい・いいえ
vbRetryCancel5再試行・キャンセル
vbAbortRetryIgnore
vbAbortRetryIgnore

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

vbYesNo
vbYesNo

例えば上記のように「はい・いいえ」が選択できるメッセージボックスは、コードを次のように書きます。

Public Sub 実行確認()
    MsgBox "マクロを実行しますか?", vbYesNo
End Sub

このマクロを実行すると「はい・いいえ」のボタンが表示されるものの、メッセージボックスを表示するコードしか書かれていないためどちらのボタンを押しても処理は変わりません。

実際の業務で使うマクロは、このコードの後に、ボタンの選択によって処理を分岐させるコードが続きます。

アイコンの種類と定数の一覧

アイコンの種類を指定する定数は次の4種類があります。

定数数値表示されるボタン使いみち
vbCritical16赤いバツマークエラーや重大な警告
vbQuestion32?マーク確認や質問
vbExclamation48!マーク注意や警告
vbInformation64iマークお知らせや完了通知
vbExclamation
vbExclamation
vbInformation
vbInformation

目的に合ったアイコンを使って、内容の重要度が直感的に分かるメッセージボックスを作りましょう。

なお、先に説明したボタンと、アイコンを同時に指定するには、2つの定数を+プラスでつなぎます。

ボタンとアイコンの両方を設定
ボタンとアイコンの両方を設定

例えば上記のように「はい・いいえ」が選択できてアイコンが表示されているメッセージボックスは、コードを次のように書きましょう。

Public Sub 実行確認アイコン付き()
    MsgBox "マクロを実行しますか?", vbYesNo + vbCritical
End Sub

vbYesNo + vbCriticalと指定することで、「はい・いいえ」のボタンと「×マーク」のアイコンを同時に表示できます。

ボタンとアイコンの同時表示はよく使われるので、必ず覚えておきましょう。

メッセージボックスにタイトルバーを設定しよう

メッセージボックスのタイトルバーに表示されるテキストを変えるには、MsgBoxTitleという引数を指定しましょう。

自分でタイトルを設定することで、より実用的なマクロが作れます。

タイトルを入力
タイトルを入力

上記のメッセージボックスは、以下のコードで作成しています。

Public Sub タイトル設定()
    MsgBox "データの保存が完了しました!", vbInformation, "保存完了"
End Sub

メッセージボックスのテキストと同様、タイトルも""ダブルクォーテーションで囲みましょう。

ボタンやアイコンを設定せず、タイトルを設定したい場合は次のようにメッセージの後にカンマを2つ打ちます。

MsgBox "メッセージ",, "タイトル"

タイトル・ボタン・アイコンをすべて設定したメッセージボックスのコードは以下のとおりです。

併せてご確認ください。

引数をすべて活用した例
引数をすべて活用した例
Public Sub 引数をすべて活用()
    MsgBox "選択したデータを削除します。よろしいですか?", vbYesNoCancel + vbExclamation, "削除の確認"
End Sub

vbYesNoCancel + vbExclamationで「はい・いいえ・キャンセル」ボタンと「!」アイコンを表示し、"削除の確認"でタイトルを設定しています。

コードを見ると複雑そうに見えますが、一つひとつを分解するとそれほど難しくありません。

削除や上書き保存など、マクロを実施する際に特に注意を促したい場面では、このようにボタンとアイコン、タイトルを組み合わせたメッセージボックスを表示してみましょう。

MsgBoxのYes/Noで処理を分岐させよう

実際のマクロでは、「はい」ボタンと「いいえ」ボタンで後続の処理を変えることがほとんどです。

処理を変えるために「戻り値」を活用します。

MsgBoxの戻り値とは、それぞれのボタンに対応する数値のことです。

戻り値を使ってIf文と組み合わせることで、ボタンの選択によって後続の処理を分岐させることができます。

前章のボタンやアイコンと同様、戻り値にも数値と定数が用意されています。

戻り値は7種類です。

定数数値押されたボタン
vbOK1OK
vbCancel2キャンセル
vbAbort3中止
vbRetry4再試行
vbIgnore5無視
vbYes6はい
vbNo7いいえ

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 ThenEnd Ifの処理が実行されることです。

いいえで処理を実行
いいえで処理を実行

マクロを実務で使う場合、「いいえ」を押したときに処理を終了したい場合がほとんどです。

その場合は、Exit Subを使って処理を終了させます。

「はい」を押したときは、If文を何もせずに通過し、その先にある処理を実行します。

この書き方は定番の書き方ですので、ぜひ覚えておいてください。

エクセルVBAでMsgBoxをさらに使いこなそう

ここからはMsgBoxをより使いやすくするテクニックを3つご紹介します。

  1. メッセージボックス内で改行する方法
  2. セルの値や変数をメッセージボックスに表示
  3. VBAの関数をメッセージボックスに表示

どの活用ワザも実務でよく使われます。

コードをコピーしてアレンジできるようまとめていますので、ぜひ、活用してください。

メッセージボックス内で改行する方法

メッセージが長くなるときは、途中で改行を入れることで読みやすくなります。

メッセージボックス内で改行するには「改行コード」と呼ばれる特殊な定数を使います。

エクセルVBAで使える改行コードは主に以下の3種類です。

  1. vbCrLf:Windowsで最もよく使われる標準コード
  2. vbLf:Mac系で使われる改行コード
  3. 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に上書き保存する」というイメージです。

初心者

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

Dr.オフィス

最終的に、msgには4行分の文字列がまとめて入った状態になり、それをMsgBoxに渡しているよ!

コードを実行した結果は以下の図のとおりです。

1行ずつ変数に格納していく
1行ずつ変数に格納していく

改行が多いメッセージボックスを作る場合は、このように変数に1行ずつ追加していく方法も活用しましょう。

セルの値や変数をメッセージボックスに表示

前節で解説したとおり、MsgBoxのメッセージには、変数に格納された値を表示することができます。

同様に、セルの値も表示可能です。

セルの値を表示する方法は、次の2通りあります。

  1. セルの値を変数に格納する
  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

セルの表示やメッセージと組み合わせて、より分かりやすいメッセージを作りましょう。

入力を受け取るInputBoxMsgBoxとセットで使おう!

エクセルVBAでは、MsgBoxと似た機能にInputBoxがあります。

MsgBoxがメッセージを表示するのに対し、InputBoxはユーザーに文字や数値を入力してもらうものです。

セットで覚えておくことで、実務に柔軟に対応するマクロが作れます。

InputBoxの基本の構文は次のとおりです。

InputBox Prompt,Title,Default
  • Prompt:メッセージの内容
  • 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の結果をMsgBoxに表示
InputBoxの結果をMsgBoxに表示

なお、InputBoxでキャンセルを押したときは、""空文字が返ってきます。

If count = "" Thenでキャンセルされたかどうかをチェックし、空文字の場合はExit Subで処理を終了するのが定番の書き方です。

このように、InputBoxMsgBoxを組み合わせると、入力してもらった内容を確認する一連の流れをスムーズに作れるので、セットで覚えておきましょう。

InputBoxは入力された値を必ず文字列として返します。
計算に使いたい場合は、文字列から数値に変換する必要があるので注意しましょう。

エクセルVBAのMsgBoxに関するQ&A

MsgBoxが表示されません。何が原因でしょうか?

マクロの中でApplication.DisplayAlerts = Falseを設定していると、すべてのダイアログが表示されません。

コードを検索してApplication.DisplayAlerts = Falseが無いか確認し、もしもあった場合はMsgBoxの直前にApplication.DisplayAlerts = Trueを追加しましょう。

また、On Error Resume Nextでエラーを飛ばして処理を続行している場合も、MsgBoxがスキップされる可能性があります。

MsgBoxの文字数制限はありますか?

MsgBoxのメッセージ本文に入力できる文字数は、マイクロソフト公式サイトによると最大で約1,024文字です。

最大文字数を超えるとエラーが発生するため、長いメッセージを表示する場合は、MsgBoxを2つ以上作って分割して表示しましょう。

MsgBoxを自動で閉じる方法はありますか?

エクセルVBAの標準機能だけでMsgBoxを自動で閉じることはできません。

自動で閉じるにはWindowsの外部機能を呼び出す必要があります。

なお、VBAのユーザーフォームを活用する方法もありますが、コードが複雑になるため中級者以上の内容となります。

エクセルVBAのMsgBoxで親切なマクロを作ろう!

エクセルVBAのMsgBoxの使い方について、基本構文からボタン・アイコンの設定、Yes/Noによる処理の分岐、改行やセルの値の表示、InputBoxとの使い分けまで幅広く解説しました。

MsgBoxを使いこなすことで、マクロを実行する前に確認を取ったり、処理の結果をユーザーにわかりやすく伝えたりなど、より親切で実用的なマクロが作れます。

まずは基本のコードをコピーして動かすことから始めてみましょう。

それではおさらいです。

おさらい
  1. MsgBoxの基本構文はMsgBox メッセージ, ボタンとアイコン, タイトル
  2. ボタンとアイコンは定数で指定し、両方使うときは+でつなぐ
  3. メッセージ内の改行はvbCrLfを使う

MsgBoxはVBAの中でも特によく使う機能のひとつです。

この記事のコードをベースに、ご自身のマクロにどんどん取り入れてみてください。

MsgBoxと併せて活用できるマクロの基本を以下の記事にまとめましたので、ぜひご活用ください。

エクセルマクロの基礎をゼロから学ぶ!有効化やボタン設置!

よかったらシェアしてね!
  • URLをコピーしました!
目次