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