MENU

【初心者向け】VBAで入力ミスを防ぐ!日付形式・選択肢制限・ユーザーフォームでのチェック方法まとめ

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次