vbaでInStr(住所を示す文字列,"市")では、前から検索のため、市川市を抽出できない。ところが、InStrRevならば、後ろから検索なので、市川市を抽出できる。つまり、前から攻めて駄目(InStr)ならば、後ろから攻めろ(InStrRev)ってことだね。
Function AREA(address as String) as String
If inStrRev(address,"市")>0 then
AREA = Left(address,InstrRev(address,"市"))
End If
End function
最初は、以下のコードで市川市を特異点として特別に扱うこと(2段構造)で回避してたんだけど、InStrRevなら1回で済ませることができると勘違いしたんだ。
Function AREA(address as String) as String
If inStr(address,"市川市")>0 then
AREA = Left(address,Instr(address,"市")+2)
ElseIf inStr(address,"市")>0 then
AREA = Left(address,Instr(address,"市"))
End If
End function
ところが、InStrRevには思いもかけない副作用があった。それは○○市の後に市という文字が付く町、例えば、○○市市場町の場合、○○市市を抽出してしまうのだ。あーそれそれ。やっパリ、以下のコードが一番良い。市原市も市川市と同じ考慮が必要だよ。
Function AREA(address as String) as String
If inStr(address,"市川市")>0 then
AREA = Left(address,Instr(address,"市")+2)
ElseIf inStr(address,"市原市")>0 then
AREA = Left(address,Instr(address,"市")+2)
ElseIf inStr(address,"市")>0 then
AREA = Left(address,Instr(address,"市"))
End If
End function
0 件のコメント:
コメントを投稿