第38回の連載で「住所」から「都道府県」を抽出する方法を紹介したが、このテクニックは「住所に都道府県が記されていること」が大前提となる。「名古屋市千種区・・・」のように都道府県を省略した住所には対応できない。そこで今回は、変換用のリストを作成し、それに準拠してデータを抽出する方法を紹介していこう。
都道府県が記載されていない住所に対応するには?
ここ数回の連載で「文字列データ」から「特定の文字」を抜き出す方法を色々と紹介してきた。しかし、一般的な手法ではどうやっても対処できないケースもある。たとえば、「名古屋市千種区・・・」という住所から「愛知県」の文字を抽出することは不可能だ。抽出元のデータに存在しない文字を抜き出す、というのは普通に考えて無理な話である。
とはいえ、このように都道府県を省略した形で住所が入力されているケースは意外と多い。「大阪市が大阪府にあるのは当たり前」とか、「札幌市が北海道にあるのは一般常識」という考えのもと、都道府県の記述を省略する人も沢山いるだろう。荷物の配送なら都道府県を省略しても問題なく届くかもしれないが、データ処理においては非常に厄介な問題となる。
そこで今回は「変換用のリスト」を作成し、それに準拠してデータを抽出する方法を紹介していこう。この処理は、関数FIND、IFERROR、FILTER、INDEXを組み合わせることで実現できる。
今回も「住所」から「都道府県」を抜き出す場合を例にして話を進めていこう。これまでの連載と異なる部分は、「札幌市北区・・・」や「大阪市港区・・・」のように都道府県の記述を省略した住所が散見されることだ。
第38回の連載で紹介したように、「住所」から「都道府県」を抽出するときは「4文字目が"県"であるか?」などのアルゴリズムに従って文字を抽出する。ただし、このアルゴリズムは「住所が必ず都道府県から始まる」ことが大前提となる。
今回の例のように「市町村から始まる住所」が混在していた場合は、正しく「都道府県」を抽出できない。無理を承知のうえで実際に試してみると、以下の図のような結果が得られた。
都道府県を省略した住所は、「札幌市」や「大阪市」、「名古屋」、「福岡市」といった具合に先頭の3文字が抽出される。もちろん、このような状態ではデータを都道府県別に分類できない。