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

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プロシージャで一括判定 | 提出前の確認 |
コメント