Excelを利用して住所管理をしていると、1つのセルに入力してしまった長い住所を、
番地より前と、番地以降に分割したい場合があります。
そんな時には、VBAで次のような仕様のユーザー定義関数を作成しておくと便利です。
関数名 : SepStr
機能 : 文字列から、指定した区切り文字より前、もしくは以降の文字列を取り出す
引数1 :(strLine) 分割したい元の文字列
引数2 :(strChrList) 区切り文字とする文字列群
引数3 :(intPart) 取り出す部分(1:前半部 2:後半部)
(個人的には、全角半角の区別を無くす引数や、末尾から検索する引数等をサポート
したもう少し複雑な仕様になっているのですが、ここでは簡略化いたしました)
これんな関数があれば、次のように住所文字列の分割が簡単にできます。
セル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