
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で事前チェックや入力制限を仕込むだけで、作業精度は一気に向上します。
まずは一つずつ実装して、業務ファイルの信頼性をアップさせましょう!
コメント