Excel VBAで住所と電話番号を半角に変換し、番地のハイフン処理を正確に行う方法

Excel

Excelで全角数字や漢字入り住所を半角数字とハイフンに変換する際、ビル名などが入ると誤ったハイフンが入ることがあります。VBAを使うことで、番地部分のみ正確に変換し、電話番号も整形できます。

番地部分だけを半角に変換する方法

正規表現を使うと、住所の中の「数字+丁目」「数字+番」「数字+号」などの部分だけを抽出して半角に変換し、ハイフンで結合できます。

例として、住所「〇〇県〇〇市1丁目2番3号 〇〇ビル」を「〇〇県〇〇市1-2-3 〇〇ビル」に変換することが可能です。

VBAコードの例

下記のコードは、列Aにある住所を列Bに変換して出力する例です。

Sub ConvertAddress()
    Dim ws As Worksheet
    Dim rng As Range, cell As Range
    Dim regEx As Object, matches As Object
    Dim baseAddr As String, numStr As String

    Set ws = ActiveSheet
    Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Global = True
    regEx.Pattern = "([0-90-9]+)丁目|([0-90-9]+)番|([0-90-9]+)号"

    For Each cell In rng
        baseAddr = cell.Value
        Set matches = regEx.Execute(baseAddr)
        numStr = ""
        For Each m In matches
            numStr = numStr & ConvertToHalfWidth(m.Value) & "-"
        Next m
        If Right(numStr, 1) = "-" Then numStr = Left(numStr, Len(numStr) - 1)
        '番地部分を置換
        ws.Cells(cell.Row, "B").Value = regEx.Replace(baseAddr, "") & numStr
    Next cell
End Sub

Function ConvertToHalfWidth(str As String) As String
    Dim i As Long, c As String
    For i = 1 To Len(str)
        c = Mid(str, i, 1)
        Select Case c
            Case "0" To "9": Mid(str, i, 1) = Chr(Asc(c) - &HFF10 + 48)
        End Select
    Next i
    ConvertToHalfWidth = str
End Function

電話番号の変換

電話番号も同様に全角→半角変換し、正規表現でハイフンを挿入することができます。

例として「08012345678」を「080-1234-5678」に変換可能です。正規表現で数字のグループ化とハイフン挿入を行います。

注意点

ビル名など番地以外の文字列はそのまま保持するように、正規表現で番地部分のみ抽出することが重要です。住所表記のバリエーションに応じてパターンを追加してください。

まとめ

VBAを使用すると、住所や電話番号の全角→半角変換と、番地のハイフン整形を効率的に行えます。正規表現を活用することで、ビル名など余計な部分にハイフンが入る問題も防ぐことができます。

コメント

タイトルとURLをコピーしました