Excel VBA | Cells を使った電話番号クリーニング(ハイフン削除+桁数チェック)

Excel VBA VBA
スポンサーリンク

実務でよくあるのが「電話番号の入力がバラバラ」問題です。
例:03-1234-5678090-1111-222208012345678 など。
これを ハイフンを削除して桁数チェック すれば、データをきれいに整えられます。


コード例

Sub CleanPhoneNumbers()
    Dim i As Long, lastRow As Long
    Dim phone As String
    
    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastRow
        phone = Cells(i, 1).Value
        
        ' 空白セルはスキップ
        If phone <> "" Then
            ' ハイフンを削除
            phone = Replace(phone, "-", "")
            
            ' 前後の空白を削除
            phone = Trim(phone)
            
            ' 数字だけ残す(万一文字が混じっていた場合)
            phone = Replace(phone, " ", "")
            
            ' 桁数チェック(日本の電話番号は10桁または11桁が一般的)
            If Len(phone) = 10 Or Len(phone) = 11 Then
                Cells(i, 2).Value = phone          ' B列にクリーン番号
                Cells(i, 2).Font.Color = vbBlack   ' 正常 → 黒文字
            Else
                Cells(i, 2).Value = "不正: " & phone
                Cells(i, 2).Font.Color = vbRed     ' 不正 → 赤文字
            End If
        End If
    Next i
End Sub
VB

解説

  • Replace(phone, "-", "") → ハイフンを削除
  • Trim(phone) → 前後の空白を削除
  • Len(phone) → 文字数をチェック
  • 条件分岐で「10桁 or 11桁ならOK」「それ以外は不正」と判定

実行イメージ

A列(元データ)B列(クリーニング後)
03-1234-56780312345678
090-1111-222209011112222
0801234567808012345678
123-456不正: 123456(赤文字)

応用ポイント

  • 国際番号対応+81 を残す処理を追加
  • 数字以外を削除 → ループで数字だけ抽出する方法も有効
  • 不正データを別シートに出力 → データ監査に使える

👉 この処理を応用すれば「顧客リストの電話番号を一括クリーニング」できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました