himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

昨年からずっと忙しくて、いろいろ書きたいネタはあったんだけど、結局まる一年更新さぼってたので軽いネタでとりあえず埋め草。

住所記入欄から都道府県を抽出する
※ 住所文字列より左(前)に空白他、住所以外の文字が入っていないこと。

※ 〓→住所文字列格納セル(例:A1)

=IF(OR(MID(〓,3,1)="都",MID(〓,3,1)="道",MID(〓,3,1)="府",MID(〓,3,1)="県"),LEFT(〓,3),LEFT(〓,4))

OR()の中がくどいので、Access の In 演算子みたいなのが欲しい。
書式はこんな感じ。

IsIn(MID(〓,3,1),("都","道","府","県"))

戻り値は、何番目の要素にヒットしたか、その順番。0のときはヒットしなかったということ。
これを使って都道府県切り出しを書き直すと…

=IF(ISIN(MID(〓,3,1),("都","道","府","県"))<>0,LEFT(〓,3),LEFT(〓,4))

…どうせ VBA でユーザー関数作るなら VBS 呼び出して正規表現でパターンマッチした方がいいかも。
正規表現でパターンマッチするユーザー関数を TESTRE とすると…

testRE(LEFT(〓,3),"[都|道|府|県]$")

これはいずれかにマッチしたかどうかしかわからない。これを使って書き直したら…

=IF(TESTRE(LEFT(〓,3),"[都|道|府|県]$")),LEFT(〓,3),LEFT(〓,4))

ISIN() と TESTRE() はいずれも必要性高そうなのでソースコード書いたら後で追記する(つもり)