VBAでMsgBoxを使ってメッセージを表示する方法|基本構文と応用テクニック

VBAのMsgBoxとは 2026

ExcelのVBAでマクロを作っていると、「処理が完了したことをユーザーに知らせたい」「削除する前に確認を取りたい」「エラーが発生したときに原因を表示したい」という場面が必ず出てきます。

そのときに使うのがMsgBox関数です。ダイアログボックスを表示してユーザーにメッセージを伝えたり、ボタンの選択結果を受け取って処理を分岐させたりできる、VBAの基本かつ重要な機能のひとつです。しかし「ボタンの種類が多くてどれを使えばいいか分からない」「返り値をどう扱えばいいか迷う」「メッセージを見やすくする方法を知りたい」という方も多いのではないでしょうか。

本記事では、MsgBoxの基本構文から引数の使い方、ボタン種類と返り値の一覧、条件分岐への応用、実践的な使用例まで、初心者の方でもすぐに活用できるよう体系的に解説します。

  1. VBAのMsgBoxとは
    1. MsgBoxの基本概念
    2. 表示できるメッセージの種類
      1. 情報メッセージ
      2. 警告メッセージ
      3. 質問メッセージ
  2. MsgBoxの基本構文
    1. 基本的な書き方
    2. 引数の意味(Prompt, Buttons, Title)
      1. Prompt:表示する文字列
      2. Buttons:ボタンの種類とアイコン
      3. Title:タイトルバーに表示する文字列
  3. ボタンの種類と返り値
    1. OK、OKCancel、YesNo、YesNoCancelなどの使い分け
    2. 返り値を変数に格納して条件分岐
      1. vbOK、vbCancel、vbYes、vbNoなどの定数
      2. 条件分岐で処理を変える例
  4. MsgBoxの応用テクニック
    1. 複数条件に応じた処理分岐
    2. ループ処理内での確認メッセージ
    3. ユーザー入力に応じて処理を制御
      1. ファイル削除や上書き確認の例
      2. 選択肢によって処理内容を分ける
  5. メッセージのカスタマイズ
    1. アイコンの種類と意味(情報・警告・停止など)
    2. タイトルや文章の書き方で伝わりやすくする
      1. 改行や記号の活用
      2. 文字列結合で動的メッセージ作成
  6. VBA MsgBoxでよくある注意点
    1. 長文メッセージの可読性
    2. ユーザーの選択を正しく判定する
    3. 複数ボタンの選択肢を分かりやすく表示
      1. 返り値の確認忘れに注意
      2. ボタン種類の適切な選択
  7. MsgBoxを活用した実践例
    1. 処理完了の通知
    2. エラーメッセージ表示
    3. ユーザーの意思確認(保存・削除・終了)
      1. 簡単な業務自動化での活用
      2. 複数ステップ処理の確認用メッセージ
  8. まとめ
    1. MsgBoxはVBAで簡単にメッセージを表示する基本ツール
    2. ボタン種類と返り値を理解して条件分岐に活用
    3. 実務では通知・確認・エラーメッセージなど幅広く応用可能

VBAのMsgBoxとは

VBAのMsgBoxとは

MsgBoxの基本概念

MsgBox(メッセージボックス)はVBAに組み込まれた関数で、画面上にダイアログボックスを表示してユーザーにメッセージを伝えます。マクロの実行中に一時停止してユーザーの応答を待ち、選択したボタンに応じて次の処理を制御することができます。

MsgBoxには2つの使い方があります。

  • ステートメントとして使う:メッセージを表示するだけで返り値を使わない
  • 関数として使う:返り値を変数に格納してボタンの選択結果を処理に活用する

表示できるメッセージの種類

情報メッセージ

処理の完了通知や結果の報告など、ユーザーに情報を伝えるためのメッセージです。青い「i」のアイコンが表示され、OKボタンのみが配置されるのが一般的です。

警告メッセージ

ユーザーに注意を促したい場面で使います。黄色い「!」の警告アイコンが表示されます。操作を続けてよいかどうかを確認するYes/Noボタンと組み合わせることが多いです。

質問メッセージ

ユーザーに選択肢を提示して回答を求める場面で使います。「?」のクエスチョンアイコンが表示され、YesNoやYesNoCancelなどのボタンと組み合わせてユーザーの意思確認を行います。

MsgBoxの基本構文

MsgBoxの基本構文

基本的な書き方

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

' ステートメントとして使う(返り値不要) MsgBox "表示するメッセージ"

' 関数として使う(返り値を変数に格納) Dim result As Integer result = MsgBox("表示するメッセージ", ボタン定数, "タイトル")

最もシンプルな使い方は引数にメッセージ文字列だけを指定する形です。

MsgBox "処理が完了しました。"

これだけでOKボタン付きのダイアログが表示されます。

引数の意味(Prompt, Buttons, Title)

引数 必須・任意 内容
Prompt 必須 ダイアログに表示するメッセージ文字列
Buttons 任意 ボタンの種類・アイコン・デフォルトボタンの指定
Title 任意 タイトルバーに表示する文字列

Prompt:表示する文字列

ダイアログボックスに表示するメッセージです。文字列定数、変数、文字列結合式などを指定できます。最大約1024文字まで表示可能です。

Dim userName As String userName = "田中" MsgBox userName & "さんの処理が完了しました。"

Buttons:ボタンの種類とアイコン

Buttons引数はボタンの種類とアイコンの種類を数値または定数で指定します。複数の設定を組み合わせる場合は+で足し合わせます。

' OKボタン+情報アイコン MsgBox "処理完了", vbOKOnly + vbInformation, "通知"

' はい・いいえボタン+質問アイコン Dim result As Integer result = MsgBox("続けますか?", vbYesNo + vbQuestion, "確認")

Title:タイトルバーに表示する文字列

ダイアログボックスの上部タイトルバーに表示される文字列です。省略するとアプリケーション名(通常は「Microsoft Excel」)が表示されます。システム名やツール名を入れると、どのマクロからのメッセージか分かりやすくなります。

MsgBox "データのバックアップが完了しました。", vbOKOnly + vbInformation, "バックアップツール"

ボタンの種類と返り値

ボタンの種類と返り値

OK、OKCancel、YesNo、YesNoCancelなどの使い分け

定数 表示されるボタン 向いている場面
vbOKOnly 0 OK 通知・完了報告
vbOKCancel 1 OK・キャンセル 続行か中断かの確認
vbYesNo 4 はい・いいえ 二択の意思確認
vbYesNoCancel 3 はい・いいえ・キャンセル 三択の選択処理
vbRetryCancel 5 再試行・キャンセル エラー発生時の再試行確認

アイコンの種類は以下のとおりです。

定数 アイコン 用途
vbCritical 16 赤い×(停止) 重大なエラー
vbQuestion 32 青い? 質問・確認
vbExclamation 48 黄色い! 警告・注意
vbInformation 64 青いi 情報・通知

返り値を変数に格納して条件分岐

vbOK、vbCancel、vbYes、vbNoなどの定数

定数 意味
vbOK 1 OKが押された
vbCancel 2 キャンセルが押された
vbYes 6 はいが押された
vbNo 7 いいえが押された
vbRetry 4 再試行が押された

条件分岐で処理を変える例

Sub ConfirmDelete() Dim result As Integer result = MsgBox("このデータを削除しますか?", vbYesNo + vbQuestion, "削除確認")

If result = vbYes Then
    ' はいが押された場合の処理
    Range("A1").ClearContents
    MsgBox "削除しました。", vbOKOnly + vbInformation, "完了"
Else
    ' いいえが押された場合の処理
    MsgBox "削除をキャンセルしました。", vbOKOnly + vbInformation, "キャンセル"
End If

End Sub

MsgBoxの応用テクニック

複数条件に応じた処理分岐

YesNoCancelの3択ボタンを使うことで、より細かな処理分岐が実現できます。

Sub SaveOrDiscard() Dim result As Integer result = MsgBox("変更を保存しますか?" & Chr(10) & _ "はい:保存して終了" & Chr(10) & _ "いいえ:保存せずに終了" & Chr(10) & _ "キャンセル:処理を中断", _ vbYesNoCancel + vbQuestion, "保存確認")

Select Case result
    Case vbYes
        ' 保存処理
        ActiveWorkbook.Save
        MsgBox "保存しました。", vbInformation, "完了"
    Case vbNo
        ' 保存せずに終了
        MsgBox "変更を破棄しました。", vbInformation, "完了"
    Case vbCancel
        ' 処理を中断
        MsgBox "処理を中断しました。", vbInformation, "中断"
End Select

End Sub

ループ処理内での確認メッセージ

複数の対象に処理を行う前に、それぞれの確認を取りながら処理するパターンです。

Sub ProcessWithConfirmation() Dim i As Integer Dim lastRow As Integer lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
    Dim cellValue As String
    cellValue = Cells(i, 1).Value

    Dim result As Integer
    result = MsgBox(i & "行目「" & cellValue & "」を処理しますか?", _
                    vbYesNoCancel + vbQuestion, "処理確認")

    If result = vbYes Then
        ' 処理を実行
        Cells(i, 2).Value = "処理済み"
    ElseIf result = vbCancel Then
        ' ループを中断
        MsgBox "処理を中断しました。", vbInformation, "中断"
        Exit For
    End If
    ' vbNoの場合はスキップして次の行へ
Next i

End Sub

ユーザー入力に応じて処理を制御

ファイル削除や上書き確認の例

Sub DeleteFileWithConfirm() Dim filePath As String filePath = "C:\Users\user\Documents\data.xlsx"

' ファイルの存在確認
If Dir(filePath) <> "" Then
    Dim result As Integer
    result = MsgBox("以下のファイルを削除します。" & Chr(10) & _
                    filePath & Chr(10) & Chr(10) & _
                    "この操作は元に戻せません。続けますか?", _
                    vbOKCancel + vbCritical, "ファイル削除")

    If result = vbOK Then
        Kill filePath
        MsgBox "ファイルを削除しました。", vbInformation, "完了"
    Else
        MsgBox "削除をキャンセルしました。", vbInformation, "キャンセル"
    End If
Else
    MsgBox "指定したファイルが見つかりません。", vbExclamation, "エラー"
End If

End Sub

選択肢によって処理内容を分ける

複数の処理モードをユーザーに選ばせる場合は、メッセージ内に選択肢の説明を記述して分かりやすく提示します。

Sub SelectProcessMode() Dim result As Integer result = MsgBox("処理モードを選択してください。" & Chr(10) & Chr(10) & _ "【はい】全データを処理します" & Chr(10) & _ "【いいえ】選択範囲のみ処理します", _ vbYesNo + vbQuestion, "処理モード選択")

If result = vbYes Then
    Call ProcessAllData
Else
    Call ProcessSelectedRange
End If

End Sub

メッセージのカスタマイズ

アイコンの種類と意味(情報・警告・停止など)

アイコンの選択はメッセージの緊急度や種類をユーザーに直感的に伝えます。適切なアイコンを選ぶことで、ユーザーがメッセージの意味を素早く理解できます。

  • vbInformation(青いi):処理完了・結果通知など穏やかな情報伝達に使う
  • vbExclamation(黄色い!):注意が必要な操作の前・データが見つからないときなどに使う
  • vbQuestion(青い?):ユーザーに判断を求める確認ダイアログに使う
  • vbCritical(赤い×):重大なエラー・取り返しのつかない操作の前に使う

タイトルや文章の書き方で伝わりやすくする

改行や記号の活用

MsgBoxのメッセージ内で改行するにはChr(10)またはvbCrLfを使います。

' Chr(10)で改行 MsgBox "1行目のメッセージ" & Chr(10) & "2行目のメッセージ"

' vbCrLfでも同じ結果 MsgBox "1行目のメッセージ" & vbCrLf & "2行目のメッセージ"

' 空白行を入れる場合は2回改行 MsgBox "タイトル行" & Chr(10) & Chr(10) & "詳細説明"

文字列結合で動的メッセージ作成

変数の値をメッセージに組み込むことで、状況に応じた動的なメッセージが作れます。

Sub DynamicMessage() Dim processedCount As Integer Dim errorCount As Integer processedCount = 150 errorCount = 3

MsgBox "処理が完了しました。" & Chr(10) & Chr(10) & _
       "処理件数:" & processedCount & "件" & Chr(10) & _
       "エラー件数:" & errorCount & "件" & Chr(10) & Chr(10) & _
       "詳細はログファイルを確認してください。", _
       vbInformation, "処理完了レポート"

End Sub

MsgBox関数の詳しい構文と引数については、moug「VBAのMsgBox関数の使い方」も参考になります。

VBA MsgBoxでよくある注意点

長文メッセージの可読性

MsgBoxに長すぎるメッセージを表示すると、ダイアログが画面からはみ出したり、ユーザーが読まずに閉じてしまうリスクがあります。メッセージは簡潔に、要点を先に伝える形式にしましょう。詳細な情報はログファイルやセルへの書き出しで別途確認できるようにする設計が実用的です。

ユーザーの選択を正しく判定する

MsgBoxを関数として使う場合、返り値を必ず変数に格納してから判定します。返り値を使わずにMsgBoxを呼び出すだけでは、ユーザーの選択結果を取得できません。

' 誤った例:返り値を取得していない MsgBox "削除しますか?", vbYesNo + vbQuestion, "確認" ' ユーザーが何を選んでも処理が変わらない

' 正しい例:返り値を変数に格納して判定 Dim result As Integer result = MsgBox("削除しますか?", vbYesNo + vbQuestion, "確認") If result = vbYes Then ' 削除処理 End If

複数ボタンの選択肢を分かりやすく表示

YesNoCancelのように複数のボタンがある場合、それぞれのボタンが何を意味するかをメッセージ内に明示すると、ユーザーの誤操作を防げます。

返り値の確認忘れに注意

注意:vbOKCancelやvbYesNoCancelを使ったときは、すべてのボタンに対応する処理を書いておかないと、ユーザーの選択が無視される場合があります。特にキャンセルの処理を忘れやすいので意識して記述してください。

ボタン種類の適切な選択

確認を必要としない単純な通知にはvbOKOnlyを使い、ユーザーの判断が必要な場面にだけvbYesNoやvbYesNoCancelを使うようにします。不必要な確認ダイアログが多いと、ユーザーが「とりあえずOK」を押す習慣になり、確認の意味がなくなります。

MsgBoxを活用した実践例

処理完了の通知

Sub NotifyCompletion() ' データ集計処理(省略)

MsgBox "集計が完了しました。" & Chr(10) & Chr(10) & _
       "結果は「集計シート」に出力されました。" & Chr(10) & _
       "内容をご確認ください。", _
       vbOKOnly + vbInformation, "集計完了"

End Sub

エラーメッセージ表示

Sub ShowErrorMessage() On Error GoTo ErrorHandler

' 何らかの処理
Dim val As Integer
val = CInt("abc")  ' 意図的なエラー

Exit Sub

ErrorHandler: MsgBox "エラーが発生しました。" & Chr(10) & Chr(10) & _ "エラー番号:" & Err.Number & Chr(10) & _ "エラー内容:" & Err.Description & Chr(10) & Chr(10) & _ "入力データを確認してから再試行してください。", _ vbCritical, "エラー" End Sub

ユーザーの意思確認(保存・削除・終了)

Sub ConfirmBeforeClose() Dim result As Integer result = MsgBox("ワークブックを閉じる前に保存しますか?" & Chr(10) & Chr(10) & _ "【はい】保存して閉じる" & Chr(10) & _ "【いいえ】保存せずに閉じる" & Chr(10) & _ "【キャンセル】閉じない", _ vbYesNoCancel + vbQuestion, "終了確認")

Select Case result
    Case vbYes
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    Case vbNo
        ActiveWorkbook.Close SaveChanges:=False
    Case vbCancel
        ' 何もしない(処理を継続)
End Select

End Sub

簡単な業務自動化での活用

月次レポート生成マクロにMsgBoxを組み込んで、生成前の確認と生成後の通知を自動化する例です。

Sub GenerateMonthlyReport() ' 実行前確認 Dim startResult As Integer startResult = MsgBox("今月分のレポートを生成します。" & Chr(10) & _ "よろしいですか?", _ vbOKCancel + vbQuestion, "レポート生成")

If startResult = vbCancel Then
    Exit Sub
End If

' レポート生成処理(省略)

' 完了通知
MsgBox "レポートの生成が完了しました。" & Chr(10) & Chr(10) & _
       "保存先:C:\Reports\monthly_report.xlsx", _
       vbInformation, "生成完了"

End Sub

複数ステップ処理の確認用メッセージ

Sub MultiStepProcess() ' ステップ1の確認 If MsgBox("ステップ1:データのクリーニングを実行します。", _ vbOKCancel + vbInformation, "ステップ1") = vbCancel Then Exit Sub ' ステップ1の処理(省略)

' ステップ2の確認
If MsgBox("ステップ2:データの集計を実行します。", _
          vbOKCancel + vbInformation, "ステップ2") = vbCancel Then Exit Sub
' ステップ2の処理(省略)

MsgBox "すべての処理が完了しました。", vbInformation, "完了"

End Sub

MsgBox関数のボタン種類と返り値の詳細については、侍エンジニア「VBAのMsgBox完全ガイド」ExcelVBA解説「MsgBoxの使い方と活用例」FeedSoft「VBAのMsgBox関数リファレンス」も参考にしてください。

VBAをはじめとするExcel活用術や業務効率化のヒントは、kakiro-web.comでも幅広く解説しています。

まとめ

MsgBoxはVBAで簡単にメッセージを表示する基本ツール

MsgBox関数はVBAでダイアログボックスを表示するための基本機能です。1行のコードで実装でき、メッセージの表示からユーザーの応答取得まで完結して処理できます。マクロのUI(ユーザーインターフェース)として最もシンプルかつ強力なツールです。

ボタン種類と返り値を理解して条件分岐に活用

vbYesNo・vbOKCancel・vbYesNoCancelなどのボタン種類と、vbYes・vbNo・vbOK・vbCancelなどの返り値の定数を理解することで、ユーザーの選択に応じた柔軟な処理分岐が実現できます。返り値は必ず変数に格納してから判定することが基本です。

実務では通知・確認・エラーメッセージなど幅広く応用可能

処理完了の通知、重要操作前の確認、エラー発生時の詳細表示、複数ステップ処理の案内——MsgBoxは業務自動化マクロのさまざまな場面で活用できます。アイコン・タイトル・メッセージを適切に組み合わせることで、ユーザーにとって分かりやすい操作体験を提供できます。

  • 単純な通知はMsgBox "メッセージ"のみで実装できる
  • 返り値を使う場合は必ずDim result As Integerに格納する
  • ボタン種類とアイコンは+で組み合わせて指定する
  • 改行にはChr(10)またはvbCrLfを使う
  • アイコンはメッセージの緊急度に合わせて選ぶ(情報・警告・質問・停止)
  • YesNoCancelを使うときはすべてのケースの処理を漏れなく記述する
  • メッセージは簡潔にし、選択肢の説明をメッセージ内に明示すると誤操作を防げる
See also  VBAで配列の要素数を取得する方法|UBoundとLBoundの使い方
Copied title and URL