住所から郵便番号を検索したり、郵便番号から住所を検索したりは、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)
)