Excel VBA | VBA 文字列操作関数一覧

Excel VBA VBA
スポンサーリンク

正規表現を使えば住所を「都道府県」「市区町村」「町域」「丁目・番地」「建物名」まで分割することが可能です。
以下にサンプルコードを示します。


サンプルコード(正規表現で住所を分割)

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グランフロント大阪

💡 ポイント

  • 正規表現を使うと柔軟に分割可能ですが、住所表記の揺れ(「ヶ」と「ケ」、「大字」「字」など)に注意が必要です。
  • 郵便番号データや市区町村マスタと組み合わせると精度が大幅に向上します。
  • 建物名や部屋番号は任意要素なので、正規表現の最後に (.*) を入れて吸収しています。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました