VBAで入力内容に応じて自動メッセージを返す方法|Select Case・MsgBox・Worksheet_Changeの活用

VBAでセルの入力内容に応じて自動メッセージを返すには、If〜ElseIf または Select Case で値を判定し、MsgBox やセルへの書き込みでフィードバックを出すだけです。点数・ステータス・キーワードなど、どんな入力にも対応できます。

この記事では、次の内容を順番に解説します。

  • 数値の範囲に応じてメッセージを出す基本コード
  • 文字列(ステータス)に応じてメッセージを切り替える方法
  • MsgBoxではなく隣のセルにメッセージを書き込む方法
  • Worksheet_Changeで入力と同時に自動表示する方法

数値の範囲に応じてメッセージを出すには?

B2セルの点数を読み取り、範囲に応じたコメントをMsgBoxで表示する例です。

Sub ShowAdviceByScore()

    Dim score As Variant
    score = Range("B2").Value

    '数値でなければ終了
    If Not IsNumeric(score) Or score = "" Then
        MsgBox "B2セルに数値を入力してください。", vbExclamation
        Exit Sub
    End If

    If score >= 80 Then
        MsgBox "よくできました!この調子で続けましょう。", vbInformation
    ElseIf score >= 60 Then
        MsgBox "合格です。さらなる向上を目指しましょう。", vbInformation
    ElseIf score >= 40 Then
        MsgBox "もう少しです。復習をおすすめします。", vbExclamation
    Else
        MsgBox "理解が不十分です。もう一度見直しましょう。", vbCritical
    End If

End Sub

文字列(ステータス)に応じてメッセージを切り替えるには?

「未提出」「確認中」「提出済」のような文字列の値に応じてメッセージを変える場合は Select Case が読みやすくおすすめです。

Sub ShowMessageByStatus()

    Dim status As String
    status = Trim(Range("C2").Value)   'Trimで前後の空白を除去

    Select Case status
        Case "未提出"
            MsgBox "早めの提出をお願いします。", vbExclamation
        Case "確認中"
            MsgBox "確認が終わり次第、提出してください。", vbInformation
        Case "提出済"
            MsgBox "ご対応ありがとうございます。", vbInformation
        Case ""
            MsgBox "C2セルに値が入力されていません。", vbExclamation
        Case Else
            MsgBox "「" & status & "」は未対応のステータスです。", vbExclamation
    End Select

End Sub

隣のセルにメッセージを書き込むには?

MsgBoxのポップアップではなく、入力セルの隣にコメントを書き込む方法です。一覧表で全行を一括チェックする場合に適しています。

Sub WriteMessageToCell()

    Dim ws      As Worksheet
    Dim i       As Long
    Dim score   As Variant
    Dim comment As String

    Set ws = ActiveSheet

    For i = 2 To ws.Cells(ws.Rows.Count, 2).End(xlUp).Row

        score = ws.Cells(i, 2).Value

        If Not IsNumeric(score) Or score = "" Then
            comment = "未入力"
        ElseIf score >= 80 Then
            comment = "優秀"
        ElseIf score >= 60 Then
            comment = "合格"
        ElseIf score >= 40 Then
            comment = "要復習"
        Else
            comment = "要再確認"
        End If

        ws.Cells(i, 3).Value = comment   'C列にコメントを書き込む

    Next i

    MsgBox "コメントの書き込みが完了しました。"

End Sub

入力と同時に自動メッセージを表示するには?

Worksheet_Change イベントを使うと、セルに値を入力した瞬間に自動でメッセージが表示されます。シートモジュールに記述します。

'シートモジュール(Sheet1など)に記述する
Private Sub Worksheet_Change(ByVal Target As Range)

    'B2セルへの入力だけを対象にする
    If Target.Address = "$B$2" Then

        Dim val As Variant
        val = Target.Value

        If val = "" Then Exit Sub

        If Not IsNumeric(val) Then
            MsgBox "B2セルには数値を入力してください。", vbExclamation
            Exit Sub
        End If

        If CDbl(val) < 50 Then
            MsgBox "50点未満です。見直しをおすすめします。", vbExclamation
        ElseIf CDbl(val) >= 80 Then
            MsgBox "80点以上です。素晴らしい!", vbInformation
        End If

    End If

End Sub

まとめ

  • 数値の範囲に応じたメッセージは If〜ElseIf〜Else で分岐する
  • 文字列のステータス判定は Select Case の方が条件が増えても読みやすい
  • 一覧表の全行をチェックするなら 隣のセルにコメントを書き込む 方がポップアップより実用的
  • Worksheet_Change を使うと入力した瞬間に自動でメッセージが出るリアルタイム対応になる
  • 入力値のチェックには IsNumeric・Trim・空欄チェック を組み合わせると誤動作を防げる

よくある質問

全角数字を入力した場合も判定できますか?

IsNumericは全角数字(「123」など)もTrueを返します。ただしセルに全角で入力されると文字列として扱われる場合があり、計算に使いにくいことがあります。Val(str)CDbl で変換するときに半角に統一される挙動になります。

Select CaseとIf ElseIfはどちらを使えばいいですか?

同じ変数に対して複数の値を比較するなら Select Case、範囲(>=・<=)で比較するなら If ElseIf が向いています。条件が3つ以上で同じ変数を判定する場合は Select Case の方が読みやすくなります。

Worksheet_Changeで複数のセルを対象にしたいです

Intersect(Target, Range("B2:B10")) を使うと、B2〜B10のどれかが変更されたときに反応させられます。If Not Intersect(Target, Range("B2:B10")) Is Nothing Then という条件にしてください。

メッセージをMsgBoxではなくセルのコメント機能で表示したいです

cell.AddComment "コメント内容" でセルにコメント(吹き出し)を追加できます。既存のコメントが邪魔になる場合は cell.ClearComments で削除してから追加してください。

メッセージを日本語で出すとき文字化けしますか?

VBAは日本語環境では通常文字化けしません。ただし、ファイルをメール送付先のPCで開いたときに、OSの言語設定によっては化けるケースが稀にあります。その場合はMsgBoxではなくセルへの書き込みで対応する方が安全です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール