顧客リストやアンケートデータでは「郵便番号+住所」が一緒に入力されているケースがよくあります。
例:〒123-4567 東京都江東区亀戸1-1-1
これを 郵便番号と住所に分離 すると、データベース化や郵送ラベル作成が効率化されます。
コード例
Sub ExtractPostalCodeAndAddress()
Dim i As Long, lastRow As Long
Dim addr As String
Dim regex As Object
Dim matches As Object
' 正規表現オブジェクトを作成
Set regex = CreateObject("VBScript.RegExp")
regex.IgnoreCase = False
regex.Global = True
' パターン: 郵便番号(〒付きでもOK)+住所
' 郵便番号は「3桁-4桁」または「7桁数字」
regex.Pattern = "〒?\s?(\d{3}-\d{4}|\d{7})\s*(.+)"
' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
addr = Trim(Cells(i, 1).Value)
If addr <> "" Then
If regex.Test(addr) Then
Set matches = regex.Execute(addr)
Cells(i, 2).Value = matches(0).SubMatches(0) ' 郵便番号
Cells(i, 3).Value = matches(0).SubMatches(1) ' 住所
Else
Cells(i, 2).Value = "不明"
Cells(i, 3).Value = addr
End If
End If
Next i
End Sub
VB解説
- 正規表現パターン
〒?→ 「〒」があってもなくてもOK\d{3}-\d{4}→ 3桁-4桁の郵便番号形式|\d{7}→ 7桁連続の数字形式(.+)→ 残りを住所としてキャプチャ
- SubMatches(0) → 郵便番号
- SubMatches(1) → 住所
実行イメージ
| A列(元データ) | B列(郵便番号) | C列(住所) |
|---|---|---|
| 〒123-4567 東京都江東区亀戸1-1-1 | 123-4567 | 東京都江東区亀戸1-1-1 |
| 9876543 大阪府大阪市北区梅田1-1-1 | 9876543 | 大阪府大阪市北区梅田1-1-1 |
| 東京都江東区亀戸1-1-1 | 不明 | 東京都江東区亀戸1-1-1 |
応用ポイント
- 郵便番号を数値化して検索キーに利用
- 住所と郵便番号を別カラムに保存 → データベース化に最適
- 郵便番号辞書と照合 → 実在するかチェック可能
💡 この処理を応用すれば「顧客リストから郵便番号を一括抽出して住所と分離」でき、配送や地域分析が効率化します。

