📊 Excel VBA Top100
🔧

ShowMessageBox

ユーティリティ

カスタマイズ可能なメッセージボックスを表示する

VBAのMsgBox関数を使ってユーザーにメッセージを表示するマクロです。情報・警告・エラーなどのアイコンと、OK・はい/いいえ・キャンセルなどのボタン組み合わせを設定できます。ユーザーの選択(はい/いいえ)に応じて処理を分岐させる確認ダイアログや、処理完了の通知として広く使用されます。Application.DisplayAlertsと組み合わせたエラー処理にも活用できます。内部ではMsgBox関数の第2引数にアイコン定数(vbInformation等)とボタン定数(vbYesNo等)をOr演算子で組み合わせて渡しており、戻り値をSelect Caseで分岐させることでユーザーの選択に応じた処理を実装できます。DeleteSheetやClearAllNamedRangesのような取り消しの効かない処理の直前に組み込むことで、誤操作の防止策として機能します。

ShowMessageBox デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: メッセージと種類を選択肢から指定してメッセージボックスを表示

🎯 活用シーン

  • ✓重要データ削除前に「本当に削除しますか?」の確認ダイアログを表示
  • ✓長時間処理の完了時に「処理が完了しました」の通知を表示
  • ✓処理中に問題が発生した際に警告メッセージとエラー内容を表示
  • ✓大量データを一括削除する処理の前に、件数を明示した確認ダイアログを表示して誤削除を防ぎたいとき
  • ✓外部システムとの連携処理が失敗した際に、担当者へ具体的なエラー内容を分かりやすく提示したいとき

💡 実装のヒント

  • ▸MsgBox戻り値: vbYes / vbNo / vbOK / vbCancel で分岐できます
  • ▸vbInformation / vbWarning / vbCritical でアイコンの種類を指定します
  • ▸第2引数にボタンとアイコンをOrで組み合わせて指定します
  • ▸処理に時間がかかる場合は、開始時と完了時の両方でメッセージを表示し、ユーザーが処理状況を把握できるようにしてください。
  • ▸エラー発生時のメッセージには、原因の推測や次に取るべきアクションを含めると、ユーザーが自力で解決しやすくなります。

💻 VBAコード

' ShowMessageBox
' -----------------
' Macro Name: ShowMessageBox
' Description: カスタマイズ可能なメッセージボックスを表示する
' Parameters: なし
' Returns: なし
' Usage: メッセージと種類を選択肢から指定してメッセージボックスを表示
' -----------------

Sub ShowMessageBox()
    Dim msgText As String
    Dim msgType As String
    Dim iconType As VbMsgBoxStyle
    Dim result As VbMsgBoxResult

    On Error GoTo ErrorHandler

    msgText = InputBox("表示するメッセージを入力:", "メッセージボックス表示", " Hello, World! ")

    If msgText = "" Then
        Exit Sub
    End If

    msgType = InputBox("種類を選択:" & vbCrLf & _
                "1: 情報 (OKのみ)" & vbCrLf & _
                "2: 警告 (OKのみ)" & vbCrLf & _
                "3: エラー (OKのみ)" & vbCrLf & _
                "4: 確認 (はい/いいえ)" & vbCrLf & _
                "5: 詳細確認 (はい/いいえ/キャンセル)", "種類選択", "1")

    Select Case msgType
        Case "1": iconType = vbInformation
        Case "2": iconType = vbExclamation
        Case "3": iconType = vbCritical
        Case "4": iconType = vbYesNo + vbQuestion
        Case "5": iconType = vbYesNoCancel + vbQuestion
        Case Else
            MsgBox "無効な選択です。", vbExclamation
            Exit Sub
    End Select

    result = MsgBox(msgText, iconType, "カスタムメッセージ")

    Select Case result
        Case vbYes: MsgBox "「はい」が選択されました。", vbInformation
        Case vbNo: MsgBox "「いいえ」が選択されました。", vbInformation
        Case vbCancel: MsgBox "「キャンセル」が選択されました。", vbInformation
        Case vbOK: MsgBox "「OK」が選択されました。", vbInformation
    End Select
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub