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



