実務でよくあるのが「電話番号の入力がバラバラ」問題です。
例:03-1234-5678、090-1111-2222、08012345678 など。
これを ハイフンを削除して桁数チェック すれば、データをきれいに整えられます。
コード例
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-5678 | 0312345678 |
| 090-1111-2222 | 09011112222 |
| 08012345678 | 08012345678 |
| 123-456 | 不正: 123456(赤文字) |
応用ポイント
- 国際番号対応 →
+81を残す処理を追加 - 数字以外を削除 → ループで数字だけ抽出する方法も有効
- 不正データを別シートに出力 → データ監査に使える
👉 この処理を応用すれば「顧客リストの電話番号を一括クリーニング」できます。

