【Excelマクロ】顧客データの記入漏れ・形式チェックを自動化

毎回こんな確認、していませんか?

  • 顧客データを入力したけど、未入力や間違いがないか心配…
  • 郵便番号が7桁じゃなかったり、電話番号にハイフンが抜けていたり…
  • 一つ一つ目で確認するのは大変!

こうした作業、VBAを使えば一括でチェック可能です。

具体例

VBAを活用して、すべてのチェックを自動化し、修正すべきポイントをわかるようにします。

  • 顧客データの未入力チェック(必須項目が空欄)
  • 郵便番号が7桁か?電話番号にハイフンが入っているか?
  • 不備のあるデータだけを、別シートにリストアップする

シート構成の例

A列B列C列D列
顧客名郵便番号住所電話番号
株式会社A1234567東京都千代田区03-1234-5678
株式会社B123-456大阪市中央区0312345678
株式会社C名古屋市中区052-876-5432

未入力チェック&形式チェックマクロ

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

コードの説明

顧客データシートと、エラーリストシートの2つを利用していますが、エラーリストシートについては、マクロを動作させるたびにデータを一度、クリアしています。

その上で、改めてタイトルを入力し、顧客データシートでエラーがないかを確認の上、エラーリストに一覧が出るような仕様になっています。

  • IsNumeric:指定した値が数字かどうかを判定する関数。郵便番号が「全て数字」かをチェックするために使います。
  • InStr:文字列の中に特定の文字(ここでは「-」)が含まれているかを調べる関数。0を返す場合は含まれていないことを意味します。
  • wsSource:元の顧客データシート(”顧客データ”)
  • wsError:エラーリストを書き出すシート
  • 1行ずつ見て、空欄や形式の間違いをチェック
  • エラーがあれば、エラーリストシートに自動転記

よくある質問(Q&A)

Q1. 郵便番号にハイフンを含めたい場合は?

Len(郵便番号) <> 8 にするか、Like "###-####" を使ってチェック可能です。

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

Len(電話番号) を使えば桁数確認もできます。

Q3. エラー箇所を色付けしたい!

例えば、「.Interior.Color = RGB(255, 200, 200)」を使えば、セルを赤くできます。

まとめ

今回の記事では、顧客データの入力ミスを自動でチェックし、不備がある行だけをリストアップするVBAマクロを紹介しました。

  • 記入漏れの自動チェック
  • 郵便番号・電話番号の形式確認
  • エラーを別シートに自動転記

これで、面倒な目視チェックから解放され、作業時間も大幅短縮されます。

コメント