Excel VBA | Excel VBAで作る「住所録の自動整形マクロ」

Excel VBA VBA
スポンサーリンク

郵便番号が「未入力 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なら「全件正常」とメッセージを出す。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました