目次
✅ この記事で学べること
- 入力内容をその場でチェックしてエラーを防止する方法
- セルに数値・文字列を強制するリアルタイム処理
- メッセージボックスや色分けで「気づかせる」工夫
- ワークシート関数では難しい動的チェックのVBA化
 A子さん
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プロシージャで一括判定 | 提出前の確認 | 

コメント