目次
✅ この記事で学べること
- 入力内容をその場でチェックしてエラーを防止する方法
- セルに数値・文字列を強制するリアルタイム処理
- メッセージボックスや色分けで「気づかせる」工夫
- ワークシート関数では難しい動的チェックのVBA化
A子さんExcelで、売上金額の列に文字を入れちゃう人がいるのよ…



「それ、VBAで“リアルタイムでチェック”できるよ。しかも、入力と同時に警告を出すこともできるんだ
入力された値が「数値」かどうかをその場で判定
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C2:C100")) Is Nothing Then
If Not IsNumeric(Target.Value) And Target.Value <> "" Then
MsgBox "数値を入力してください", vbExclamation
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If
End If
End Sub
🔍 解説
- 対象はC列(売上金額など)
IsNumericで数値以外を検知- エラー時はメッセージ+セルをクリア
- 無限ループ防止に
Application.EnableEvents = Falseを必ず併用
入力ミスが起きやすいセルを色で可視化
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E2:E100")) Is Nothing Then
If Len(Target.Value) > 10 Then
Target.Interior.Color = RGB(255, 199, 206) ' 薄い赤
Else
Target.Interior.ColorIndex = xlNone
End If
End If
End Sub
🔍 こんなときに便利
- 備考欄など、文字数制限があるフィールド
- 見落とし防止に、即時で色づけ
入力直後にフォーマット修正(例:日付の統一)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D2:D100")) Is Nothing Then
On Error Resume Next
Target.Value = Format(Target.Value, "yyyy/mm/dd")
On Error GoTo 0
End If
End Sub
🔍 解説
- 入力直後に自動で日付フォーマットを揃える
On Error Resume Nextで変換失敗時もスキップ
未入力を検出して警告する(入力完了チェック)
Sub 入力チェック()
Dim rng As Range
For Each rng In Range("A2:A50")
If rng.Value = "" Then
MsgBox rng.Address & " が未入力です", vbExclamation
Exit Sub
End If
Next
MsgBox "すべての入力が完了しています!", vbInformation
End Sub
🔍 解説
- まとめてチェックしたいときは、手動実行用のSubプロシージャで
- 「空欄があるか」→あればメッセージ→なければ完了通知
✅ まとめ|VBAで「ついうっかり」をなくす仕組みを
| 処理内容 | 実装方法 | 主な目的 |
|---|---|---|
| 数値チェック | Worksheet_Change + IsNumeric | 金額・数量など |
| 文字数超過 | Len関数で文字数判定 | コメント・備考欄など |
| 日付の統一 | Format関数で即時変換 | 日報・申請フォーム等 |
| 未入力警告 | Subプロシージャで一括判定 | 提出前の確認 |

コメント