Excelで住所クレンジングをしてみた。

#CRM #クレンジング #SFA #住所 #名寄せ #住所正規化

こんにちは、『INCREMENT P Inside.』の中の人です。
今回は、住所クレンジングAPIをExcelで使う方法の紹介です。

なんだかんだで、データの取りまとめはExcelが現役なところも多く、
仕事をしていると・・・

「大大大好きなExcelで全部処理したい!」
「パパッとRestAPIを叩いて!」
「返ってきたJSONをポンッとパースして!」
「それっぽい表をサクサクッと作ってくれ!」

みたいな声がどこかから聞こえて来ることがあります。(テレワーク中)
読者の皆さんも心当たりあるのではないでしょうか? ありますよね。
ということで、PRも兼ねて、弊社で提供している住所クレンジングAPIを題材に、この声に答えられるかやってみたいと思います。

目次

「パパッとRestAPIを叩いて!」

Excelでパパッと処理するならば、RestAPIをそのまま叩ける関数がほしいですが、ちょうどいいものはぱっと見つかりませんでした。WEBSERVICE関数という惜しいものもありましたが、ヘッダ指定の方法がわかりませんでした。(住所クレンジングAPIは、APIキーをヘッダで指定している)
また、Excelであれば、PowerQueryでデータ読み込みにRestAPIを叩くことができるのですが、関数ライクな使い方はできないので、これも要件にあわず。

諦めてRestAPIのURLとAPIキーを入れると、レスポンスを取得してきてくれるユーザ定義関数をVBAで書いてみます。

Excelを立ち上げて、開発タブ→VisualBasicをクリック、Microsoft VisualBasic for Applicationのウィンドウを立ち上げます。


編集モジュールを追加して、関数のコードを書いていきます。


今回はMicrosoftが提供してくれているXMLHTTPを使いました。


Excelのセルで実際に試してみます。


住所クレンジングサービスのAPI仕様を確認しながら、以下のようにセルにURLを入れています。URLに入れる住所文字列はENCODEURL関数でURLエンコーディングしておきましょう。でないと文字化けします。

				
					=ANORMAPI("https://api-anorm.mapfan.com/v1/"&ENCODEURL("岩手県盛岡市盛岡駅西通2丁目9-1")&".json","API-KEY-VALUE")
				
			

 

結果、無事以下のようなレスポンスとして、取得できました。
バッチリですね。

 

				
					{
   "type": "FeatureCollection",
   "query": [
       "岩手県盛岡市盛岡駅西通2丁目9-1"
   ],
   "features": [
       {
           "type": "Feature",
           "geometry": {
               "type": "Point",
               "coordinates": [
                   141.133660,
                   39.701281
               ]
           },
           "properties": {
               "query": "岩手県盛岡市盛岡駅西通2丁目9-1",
               "place_name": "岩手県盛岡市盛岡駅西通2丁目 9-1",
               "pref": "岩手県",
               "pref_kana": "イワテケン",
               "city": "盛岡市",
               "city_kana": "モリオカシ",
               "area": "盛岡駅西通",
               "area_kana": "モリオカエキニシドオリ",
               "koaza_chome": "2丁目",
               "koaza_chome_kana": "2チョウメ",
               "banchi_go": "9-1",
               "building": "",
               "building_number": "",
               "zipcode": "0200045",
               "geocoding_level": 8,
               "geocoding_level_desc": "号レベルでマッチしました(8)",
               "log": ""
           }
       }
   ],
   "attribution": "(c) INCREMENT P CORPORATION"
}
				
			

「返ってきたJSONをポンッとパースして!」

当然、JSONテキストのままではExcelで扱いづらいため、パースして表に展開したいです。今回も諦めてVBAで・・とはせず、PowerQueryを活用してみたいと思います。

Excelのセル範囲をテーブルとしてPowerQueryに読むこむにはリボンのデータタブ→「テーブルまたは範囲から」をクリックして、選択範囲を取り込みます。

 

PowerQueryエディターウィンドウが立ち上がったら、JSONテキストの入った列をJSON解析します。

 

 

これでパース完了です。

「それっぽい表をサクサクッと作ってくれ!」

JSONがパースできたら、住所正規化結果をExcel表形式になるようにクエリしましょう。変換タブの「構造化列」→「展開」を行います。propartiesが入っているfeaturesの要素のみを選択して、展開します。

 

featuresの中身も入れ子になっているので、更にpropertiesを展開します。

 

 

全部展開するとproperties内の要素が横に並んだテーブルになります。ほしかったやつです。ということで、PowerQueryを閉じて読み込みます。

 


取り込んだ結果は、PowerQueryのクエリ結果として、Excelに表に出てきます。目的達成です!やったね!


最後に

宣伝です!

今回のネタで使った住所クレンジングサービスは、住所文字列データを正規化&構造化したり、ジオコーディングして、地図に重ねて分析に利用したりするのに便利なサービスです!

WebAPIサービスなので開発知識がないと使えないのでは?と思われるかもしれませんが、ここで書いたようなExcelや各種OSSツールを用いての導入方法もご提案可能です!

ご興味あればお気軽にご相談ください。

<問い合わせ、無料トライアルのお申込み> https://anorm.mapfan.com/contact/