正規表現を使えば住所を「都道府県」「市区町村」「町域」「丁目・番地」「建物名」まで分割することが可能です。
以下にサンプルコードを示します。
サンプルコード(正規表現で住所を分割)
Sub SplitAddressRegex()
Dim reg As Object
Dim matches As Object
Dim addr As String
Dim lastRow As Long, i As Long
' A列に住所が入っている想定
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 正規表現オブジェクト作成
Set reg = CreateObject("VBScript.RegExp")
reg.IgnoreCase = True
reg.Global = True
' 都道府県・市区町村・町域・丁目番地・建物名を抽出するパターン
' (シンプル版:実務では郵便番号データや市区町村マスタと組み合わせると精度UP)
reg.Pattern = "^(東京都|北海道|(?:京都|大阪)府|.{2,3}県)" & _
"(.+?[市区町村])" & _
"(.+?[町丁目])" & _
"(.+?[0-9\-]+)" & _
"(.*)$"
For i = 2 To lastRow
addr = Cells(i, 1).Value
If reg.Test(addr) Then
Set matches = reg.Execute(addr)
If matches.Count > 0 Then
Cells(i, 2).Value = matches(0).SubMatches(0) ' 都道府県
Cells(i, 3).Value = matches(0).SubMatches(1) ' 市区町村
Cells(i, 4).Value = matches(0).SubMatches(2) ' 町域
Cells(i, 5).Value = matches(0).SubMatches(3) ' 丁目・番地
Cells(i, 6).Value = matches(0).SubMatches(4) ' 建物名
End If
End If
Next i
End Sub
VB✅ 実行例
| A列(住所) | B列(都道府県) | C列(市区町村) | D列(町域) | E列(丁目・番地) | F列(建物名) |
|---|---|---|---|---|---|
| 東京都江東区豊洲3丁目2-20 豊洲フロント10F | 東京都 | 江東区 | 豊洲 | 3丁目2-20 | 豊洲フロント10F |
| 大阪府大阪市北区梅田1丁目1-1 グランフロント大阪 | 大阪府 | 大阪市北区 | 梅田 | 1丁目1-1 | グランフロント大阪 |
💡 ポイント
- 正規表現を使うと柔軟に分割可能ですが、住所表記の揺れ(「ヶ」と「ケ」、「大字」「字」など)に注意が必要です。
- 郵便番号データや市区町村マスタと組み合わせると精度が大幅に向上します。
- 建物名や部屋番号は任意要素なので、正規表現の最後に
(.*)を入れて吸収しています。
