VBAで顧客データの記入漏れ・形式チェックを自動化する方法|IsNumeric・InStr・Likeの使い方

顧客データを入力した後、郵便番号の桁数が合っているか、電話番号のハイフンが抜けていないか、必須項目が空欄になっていないか——こうした確認を目視で行うのは時間がかかるうえ見落としも発生します。

この記事では、記入漏れと形式の不備を自動チェックし、エラー行を別シートに書き出すマクロを解説します。

顧客データの入力チェックを自動化するには?

今回は「顧客データ」シートと「エラーリスト」シートの2シート構成を使います。マクロを実行すると、不備のある行だけが「エラーリスト」シートに自動転記されます。

チェック内容は3つです。

  • 必須項目(顧客名・郵便番号・住所・電話番号)の空欄
  • 郵便番号が7桁の数字かどうか
  • 電話番号にハイフン(-)が含まれているかどうか
Sub CheckCustomerData()
    Dim wsSource As Worksheet
    Dim wsError As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim errorRow As Long

    Set wsSource = ThisWorkbook.Sheets("顧客データ")
    Set wsError = ThisWorkbook.Sheets("エラーリスト")

    ' エラーリストシートを初期化
    With wsError
        .Cells.ClearContents
        .Range("A1").Value = "行番号"
        .Range("B1").Value = "顧客名"
        .Range("C1").Value = "郵便番号"
        .Range("D1").Value = "住所"
        .Range("E1").Value = "電話番号"
    End With

    errorRow = 2
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        Dim hasError As Boolean
        hasError = False

        ' 必須項目の空欄チェック
        If wsSource.Cells(i, 1).Value = "" Or wsSource.Cells(i, 2).Value = "" Or _
           wsSource.Cells(i, 3).Value = "" Or wsSource.Cells(i, 4).Value = "" Then
            hasError = True
        End If

        ' 郵便番号チェック:7桁の数字か?
        If Len(wsSource.Cells(i, 2).Value) <> 7 Or _
           Not IsNumeric(wsSource.Cells(i, 2).Value) Then
            hasError = True
        End If

        ' 電話番号チェック:ハイフンが含まれているか?
        If InStr(wsSource.Cells(i, 4).Value, "-") = 0 Then
            hasError = True
        End If

        ' エラーがあれば別シートに転記
        If hasError = True Then
            wsError.Cells(errorRow, 1).Value = i
            wsSource.Range(wsSource.Cells(i, 1), wsSource.Cells(i, 4)).Copy _
                wsError.Cells(errorRow, 2)
            errorRow = errorRow + 1
        End If

    Next i

    MsgBox "チェックが完了しました!エラーリストを確認してください。"
End Sub

コードのポイントを理解するには?

IsNumeric():指定した値が数字かどうかを判定する関数です。郵便番号が「すべて数字」かをチェックするために使います。

InStr(文字列, "-"):文字列の中に特定の文字が含まれているかを調べる関数です。0 を返す場合は含まれていないことを意味します。

エラーリストの初期化:マクロを実行するたびに ClearContents でシートをクリアしてからチェック結果を書き出すため、前回の結果が残りません。

チェック条件をカスタマイズするには?

郵便番号にハイフン(123-4567形式)を含める場合は桁数チェックを変更します。

' ハイフンあり形式(###-####)で確認する場合
If Not wsSource.Cells(i, 2).Value Like "###-####" Then
    hasError = True
End If

エラー箇所のセルを色付けしたい場合は転記処理の前後に追加できます。

wsSource.Cells(i, 2).Interior.Color = RGB(255, 200, 200)  ' 薄赤

まとめ

  • 空欄チェックはIf セル.Value = ""、桁数は Len() で確認する
  • IsNumeric() で値が数字かどうかを判定できる
  • InStr(文字列, "-") でハイフンの有無を確認できる
  • エラー行を別シートに自動転記することで、修正箇所の一覧が作れる
  • チェック条件は Like 演算子を使うことで形式(パターン)照合にも応用できる

よくある質問

郵便番号にハイフンを含む形式(123-4567)でチェックしたい場合はどうしますか?

Like "###-####" を使うと「数字3桁-数字4桁」のパターン照合ができます。IsNumericLen の組み合わせより柔軟に形式チェックできます。

電話番号の桁数もチェックできますか?

できます。Len(wsSource.Cells(i, 4).Value) で文字数を取得し、想定桁数と比較する条件を追加してください。ハイフンを含む場合はハイフンの文字数分も考慮して桁数を指定します。

エラーのあるセルを色付けするにはどうすればいいですか?

.Interior.Color = RGB(255, 200, 200) をエラーが検出された行のセルに適用すると薄赤にハイライトできます。元に戻すときは Interior.ColorIndex = xlNone を使います。

チェック対象の列を増やすことはできますか?

できます。If wsSource.Cells(i, 5).Value = "" のように列番号を追加するだけで、5列目・6列目のチェックも同じ構造で追加できます。

このマクロを毎回手動で実行せず、入力のたびに自動で動かすことはできますか?

できます。Worksheet_Change イベントを使うと、シートのセルが変更されるたびに自動でチェックを走らせることができます。ただし処理負荷が増えるため、データ量が多い場合はボタン実行の方が実用的です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール