ExcelのVBAを利用した、住所の分割

Excelを利用して住所管理をしていると、1つのセルに入力してしまった長い住所を、

番地より前と、番地以降に分割したい場合があります。

 

そんな時には、VBAで次のような仕様のユーザー定義関数を作成しておくと便利です。 


 関数名 : SepStr

 機能  : 文字列から、指定した区切り文字より前、もしくは以降の文字列を取り出す

 引数1 :(strLine)     分割したい元の文字列
 引数2 :(strChrList)  区切り文字とする文字列群
 引数3 :(intPart)     取り出す部分(1:前半部  2:後半部)

(個人的には、全角半角の区別を無くす引数や、末尾から検索する引数等をサポート
 したもう少し複雑な仕様になっているのですが、ここでは簡略化いたしました)


  

 

これんな関数があれば、次のように住所文字列の分割が簡単にできます。 

JushoBunkatu.jpg

 

セルB2の計算式 : =sepstr(A2,"123456789",1)

セルC2の計算式 : =sepstr(A2,"123456789",2)

「A列の文字列から、「123456789」のいずれかの文字を発見したら、そこで区切れ」

 といった意味の計算式です。

 

それぞれの計算式を下方向にコピーし、値貼り付けをすれば、分割された住所の

出来上がりです。

 

ということで、そんな便利なSepStr関数を作ってみました。

コードは、以下のような感じです。

 

Option Explicit

Public Function SepStr(strLine As String, strChrList As String, intPart As Integer) As String

    Application.Volatile
   
    SepStr = ""
   
    If Len(strLine) = 0 Or Len(strChrList) = 0 Then
        Exit Function
    End If
   
    Dim intPosi As Integer: intPosi = 0
    Dim intLen As Integer: intLen = Len(strLine)
    Dim intII As Integer
       
    For intII = 1 To intLen
        If InStr(1, strChrList, Mid(strLine, intII, 1), vbBinaryCompare) > 0 Then
            intPosi = intII
            Exit For
        End If
    Next intII
   
    If intPosi > 0 Then
        If intPart = 1 Then
            SepStr = Left(strLine, intPosi - 1)
        ElseIf intPart = 2 Then
            SepStr = Mid(strLine, intPosi)
        End If
    Else
        If intPart = 1 Then
            SepStr = strLine
        ElseIf intPart = 2 Then
            SepStr = ""
        End If
    End If
   
End Function