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


コメント