郵便番号が「未入力 or 桁数不正」な人をまとめてチェックするマクロ
住所録を扱うときにありがちな「郵便番号が空欄」または「7桁でない/数字以外が混じっている」ケースを自動で抽出して一覧化するマクロです。
未入力だけでなく、桁数不正や入力ミスも同時にチェックできるようにしました。
マクロコード例
Sub 郵便番号チェック_未入力と不正()
Dim lastRow As Long
Dim i As Long
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim destRow As Long
Dim zipCode As String
' 元データのシートを設定(例:Sheet1)
Set wsSrc = ThisWorkbook.Sheets("Sheet1")
' 出力先シートを用意(なければ新規作成)
On Error Resume Next
Set wsDest = ThisWorkbook.Sheets("郵便番号チェック結果")
On Error GoTo 0
If wsDest Is Nothing Then
Set wsDest = ThisWorkbook.Sheets.Add
wsDest.Name = "郵便番号チェック結果"
Else
wsDest.Cells.Clear ' 既存の内容をクリア
End If
' 見出しを設定
wsDest.Range("A1").Value = "氏名"
wsDest.Range("B1").Value = "郵便番号"
wsDest.Range("C1").Value = "エラー内容"
wsDest.Range("D1").Value = "行番号"
destRow = 2
' A列:氏名、B列:郵便番号 と仮定
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow ' 1行目は見出しと仮定
zipCode = Trim(wsSrc.Cells(i, "B").Value)
zipCode = Replace(zipCode, "-", "") ' ハイフンを除去
If zipCode = "" Then
' 未入力
wsDest.Cells(destRow, "A").Value = wsSrc.Cells(i, "A").Value
wsDest.Cells(destRow, "B").Value = "(未入力)"
wsDest.Cells(destRow, "C").Value = "郵便番号が未入力"
wsDest.Cells(destRow, "D").Value = i
destRow = destRow + 1
ElseIf Len(zipCode) <> 7 Or Not IsNumeric(zipCode) Then
' 桁数不正 or 数字以外
wsDest.Cells(destRow, "A").Value = wsSrc.Cells(i, "A").Value
wsDest.Cells(destRow, "B").Value = wsSrc.Cells(i, "B").Value
wsDest.Cells(destRow, "C").Value = "桁数不正または数字以外を含む"
wsDest.Cells(destRow, "D").Value = i
destRow = destRow + 1
End If
Next i
MsgBox "チェックが完了しました。エラー件数: " & destRow - 2, vbInformation
End Sub
VBコードのポイント
- 未入力チェック:
Trim(...) = ""で空白も未入力扱い。 - 桁数チェック:
Len(zipCode) <> 7で7桁以外を検出。 - 数字チェック:
IsNumeric(zipCode)で数字以外を検出。 - ハイフン除去:
Replace(zipCode, "-", "")で入力済みのハイフンを無視して判定。
実行後のイメージ(郵便番号チェック結果シート)
| 氏名 | 郵便番号 | エラー内容 | 行番号 |
|---|---|---|---|
| 山田太郎 | (未入力) | 郵便番号が未入力 | 5 |
| 佐藤花子 | 12345 | 桁数不正または数字以外を含む | 12 |
| 鈴木一郎 | 12A-4567 | 桁数不正または数字以外を含む | 20 |
応用アイデア
- エラーがある行を元シートで赤色にマーキングする。
- 正しい郵便番号は自動で「123-4567」形式に整形する。
- エラー件数が0なら「全件正常」とメッセージを出す。

