A子さんExcelで入力ミスが多くて困ってます……。
日付の形式バラバラ、数字に文字入れちゃう、うっかり書き換え……。
結論:VBAで「リアルタイムなチェック」や「入力制限」を仕込めば、ミスは激減します!
目次
セルの書き換え防止!条件付きで編集不可にする方法
「完了」と書かれている行は書き換え禁止にする。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
Application.EnableEvents = False
If Cells(Target.Row, "B").Value = "完了" Then
MsgBox "完了済みのデータは編集できません。"
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub
日付入力をチェック!正しい形式か判定する方法
入力された内容が日付形式でなければ警告を出す。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then ' C列(例:納期)
If Not IsDate(Target.Value) Then
MsgBox "正しい日付形式で入力してください。(例:2025/07/01)"
Application.Undo
End If
End If
End Sub
選択肢の中からだけ入力させたい!(リスト制限)
方法1:VBAで動的チェック
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 選択肢 As Variant
選択肢 = Array("承認", "保留", "却下")
If Target.Column = 4 Then
If IsError(Application.Match(Target.Value, 選択肢, 0)) Then
MsgBox "選択肢以外の値は入力できません。"
Application.Undo
End If
End If
End Sub
方法2:データの入力規則と組み合わせも有効です。
ユーザーフォームでミスを未然に防ぐチェック項目
使用例:社員番号(数字5桁)、名前(未入力不可)
Private Sub 登録ボタン_Click()
If Not IsNumeric(txt社員番号.Value) Or Len(txt社員番号.Value) <> 5 Then
MsgBox "社員番号は5桁の数字で入力してください。"
Exit Sub
End If
If txt名前.Value = "" Then
MsgBox "名前は必須です。"
Exit Sub
End If
' 登録処理
MsgBox "登録が完了しました。"
End Sub
応用編:複数の条件を組み合わせた堅牢な仕組み
- C列:日付チェック(必須)
- D列:選択肢チェック(承認/保留/却下)
- 完了行は全列保護
VBAで複数条件を組み合わせることで、より実務的なチェック機能を実装できます。
まとめ:小さな仕掛けで大きな効果!
入力ミスは「入力後の修正」より「入力前の予防」が圧倒的にラク!
VBAで事前チェックや入力制限を仕込むだけで、作業精度は一気に向上します。
まずは一つずつ実装して、業務ファイルの信頼性をアップさせましょう!

コメント