なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:住所を分割する

住所から郵便番号を検索したり、郵便番号から住所を検索したりは、WebAPIの力を借りれば比較的簡単にできるようになった。今回はそれらの合わせ技。手入力された住所情報を「都道府県名」「市区町村名」「地名」「番号」「それ以外」に分割する。

まずはテーブルの「住所」列に入力された住所情報から郵便番号を検索する。

郵便番号
=IF([@住所]="","",WEBSERVICE(     "https://api.excelapi.org/post/zipcode?address="&ENCODEURL([@住所]) ))

ExcelAPIの力を借りれば、ここはすんなり終わる。同様に郵便番号から住所を検索して「都道府県名」「市区町村名」「地名」をそれぞれ表示させる。

都道府県名
=IF([@住所]="","",WEBSERVICE(     "https://api.excelapi.org/post/address?zipcode="&[@郵便番号]&"&parts=1" ))
市区町村名
=IF([@住所]="","",WEBSERVICE(     "https://api.excelapi.org/post/address?zipcode="&[@郵便番号]&"&parts=2" ))
地名
=IF([@住所]="","",WEBSERVICE(     "https://api.excelapi.org/post/address?zipcode="&[@郵便番号]&"&parts=3" ))

やること一緒なんで、ここまではさらっと。最後が若干面倒で、番号とそれ以外を分割する。古いバージョンだとこれにやたらと手間がかかるんだけど、Microsoft365ならそれほどでもない。

番号
=LET(     _x,REPLACE([@住所],1,LEN(CONCAT(テーブル1[@[都道府県]:[地名]])),""),     _y,TEXTSPLIT(_x,VSTACK(SEQUENCE(10,,0),"-","丁目","番","号","番地"),,TRUE),     IFERROR(INDEX(TEXTSPLIT(_x,_y),1),_x) )

ここまでくれば最後は簡単。REPLACE関数で左からそれまでの文字数分だけ取り除いてやればいい。

ビルマンション名他
=REPLACE([@住所],1,LEN(CONCAT(テーブル1[@[都道府県]:[番地]])),"")

Microsoft365の場合ならテーブルを使わずに全部スピルで表示させられなくもない。

一括で分割する場合
=LET(     _rng,A2,     _url,"https://api.excelapi.org/post/",     _add2zip,WEBSERVICE(_url&"zipcode?address="&ENCODEURL(_rng)),     _zip2add,WEBSERVICE(_url&"address?zipcode="&_add2zip&"&parts="&{1,2,3}),     _x,REPLACE(_rng,1,LEN(CONCAT(_zip2add)),""),     _y,TEXTSPLIT(_x,VSTACK(SEQUENCE(10,,0),"-","丁目","番","号","番地"),,TRUE),     _add1,IFERROR(INDEX(TEXTSPLIT(_x,_y),1),_x),     _add2,REPLACE(_x,1,LEN(_add1),""),     HSTACK(_zip2add,_add1,_add2) )