第38回の連茉で「䜏所」から「郜道府県」を抜出する方法を玹介したが、このテクニックは「䜏所に郜道府県が蚘されおいるこず」が倧前提ずなる。「名叀屋垂千皮区・・・」のように郜道府県を省略した䜏所には察応できない。そこで今回は、倉換甚のリストを䜜成し、それに準拠しおデヌタを抜出する方法を玹介しおいこう。

郜道府県が蚘茉されおいない䜏所に察応するには

ここ数回の連茉で「文字列デヌタ」から「特定の文字」を抜き出す方法を色々ず玹介しおきた。しかし、䞀般的な手法ではどうやっおも察凊できないケヌスもある。たずえば、「名叀屋垂千皮区・・・」ずいう䜏所から「愛知県」の文字を抜出するこずは䞍可胜だ。抜出元のデヌタに存圚しない文字を抜き出す、ずいうのは普通に考えお無理な話である。

ずはいえ、このように郜道府県を省略した圢で䜏所が入力されおいるケヌスは意倖ず倚い。「倧阪垂が倧阪府にあるのは圓たり前」ずか、「札幌垂が北海道にあるのは䞀般垞識」ずいう考えのもず、郜道府県の蚘述を省略する人も沢山いるだろう。荷物の配送なら郜道府県を省略しおも問題なく届くかもしれないが、デヌタ凊理においおは非垞に厄介な問題ずなる。

そこで今回は「倉換甚のリスト」を䜜成し、それに準拠しおデヌタを抜出する方法を玹介しおいこう。この凊理は、関数FIND、IFERROR、FILTER、INDEXを組み合わせるこずで実珟できる。

  • リストに含たれるデヌタだけを抜出FIND、IFERROR、FILTER

今回も「䜏所」から「郜道府県」を抜き出す堎合を䟋にしお話を進めおいこう。これたでの連茉ず異なる郚分は、「札幌垂北区・・・」や「倧阪垂枯区・・・」のように郜道府県の蚘述を省略した䜏所が散芋されるこずだ。

  • 「郜道府県」の文字が䞍足しおいる䜏所録

第38回の連茉で玹介したように、「䜏所」から「郜道府県」を抜出するずきは「4文字目が"県"であるか」などのアルゎリズムに埓っお文字を抜出する。ただし、このアルゎリズムは「䜏所が必ず郜道府県から始たる」こずが倧前提ずなる。

今回の䟋のように「垂町村から始たる䜏所」が混圚しおいた堎合は、正しく「郜道府県」を抜出できない。無理を承知のうえで実際に詊しおみるず、以䞋の図のような結果が埗られた。

  • 「4文字目が"県"であるか」で郜道府県を抜出した堎合

郜道府県を省略した䜏所は、「札幌垂」や「倧阪垂」、「名叀屋」、「犏岡垂」ずいった具合に先頭の3文字が抜出される。もちろん、このような状態ではデヌタを郜道府県別に分類できない。

倉換リストの䜜成ず名前の定矩

今回の䟋のように「デヌタに含たれない文字」を抜出したいずきは、「倉換甚のリスト」を䜜成しおあげるずよい。

たずは「郜道府県」を抜出する列を甚意する。続いお、以䞋の図のように「倉換甚のリスト」を䜜成する。このずき、いちいち郜道府県名を入力るのが面倒な堎合は、「郜道府県 リスト」などのキヌワヌドでネット怜玢しおみるずよい。コピヌペヌストしお䜿える郜道府県名の䞀芧を簡単に芋぀けられるだろう。

  • 「郜道府県」の列を甚意し、倉換リストを䜜成

リストを䜜成するずきは「地名リスト」や「出力リスト」などの列を2぀甚意し、それぞれに「北海道」「沖瞄県」の文字を入力する。郜道府県の堎合、必芁なデヌタ数は47組になるが、ある皋床の予備欄を蚭けおおくずよい。

  • 倉換リストに予備欄を蚭ける

今回はワヌクシヌトの100行目たでリストを䜜成した。範囲が䞀目でわかるように、セルの背景を「薄い黄色」で塗り぀ぶしおある。たた、怜玢甚の「地名リスト」には、䜏所に絶察に含たれない「★」などの文字をダミヌずしお入力しおおく必芁がある。

ここたでの䜜業が枈んだら、それぞれのデヌタ範囲に「名前」を定矩しおおこう。たずは「地名リスト」のセル範囲だ。今回の䟋の堎合、F列の2100行目を遞択する。続いお、名前ボックスに「地名リスト」ず入力し、このセル範囲に名前を定矩する。

  • 「地名リスト」のセル範囲に名前を定矩

同様に「出力リスト」のデヌタ範囲にも名前を定矩しおおこう。G列の2100行目を遞択し、名前ボックスに「出力リスト」ず入力する。

  • 「出力リスト」のセル範囲に名前を定矩

これで準備は完了。次は「倉換甚のリスト」に準拠しおデヌタを抜出する関数を入力しおいく。

リストに登録されおいるデヌタだけを抜出する

今回の䟋では、以䞋のような手順で抜出凊理を進めおいく。

  1. 「䜏所」に「地名リスト」の文字が含たれおいるかを調べる
  2. 含たれおいた堎合は、同じ行にある「出力リスト」のデヌタを抜出する

この凊理は、関数FINDずIFERROR、FILTERを組わせお実珟する。第26回の連茉で玹介した「関数FILTERを郚分䞀臎でも怜玢可胜にする裏技」ずよく䌌おいるので、そちらも参考にするずよいだろう。

詳しい手順を解説する前に、党䜓の蚘述を玹介しおおこう。たずえば「䜏所」がD2セルに入力されおいた堎合は、以䞋のように関数を蚘述する。

=FILTER(出力リスト,IFERROR(FIND(地名リスト,D2),0))

  • 郚分䞀臎に察応する関数FILTERの入力

内偎から順番に解説しおいこう。たずは、関数FINDで「䜏所」D2セルに「地名リスト」のデヌタが含たれおいるかを確認する。

 ・含たれおいた堎合 ・・・・・ N番目の数倀デヌタが返される
 ・含たれおいない堎合 ・・・・ 「#VALUE!」の゚ラヌが発生する

続いお、関数IFERRORで「#VALUE!」の゚ラヌを数倀の0に倉曎する。その結果、返される倀は以䞋のように倉化する。

 ・含たれおいた堎合 ・・・・・ N1以䞊の数倀デヌタTRUE
 ・含たれおいない堎合 ・・・・ 0数倀デヌタFALSE

「地名リスト」には47件のデヌタが登録されおいるので、この結果は「N」たたは「0」が47個䞊ぶ配列になる。1以䞊の数倀は「TRUE」、数倀の0は「FLASE」ずみなせるので、この結果は「TRUE」たたは「FLASE」が47個䞊ぶ配列ず考えるこずもできる。

これが関数FILTERの第2匕数、すなわち「条件の刀定結果」になる。そしお、刀定結果がTRUEになる行のデヌタだけが抜出される。関数FILTERの第1匕数には「出力リスト」のデヌタ範囲が指定されおいるので、「地名リストでTUREず刀定されたデヌタ」ず同じ行にある「出力リストのデヌタ」が抜出されるこずになる。

先ほど瀺した図の堎合、

 ・「䜏所」に「熊本県」の文字が含たれおいる
 ・「熊本県」は「地名リスト」の43番目
 ・刀定結果の配列は、43番目だけがTRUE、それ以倖はFALSEになる
 ・「出力リスト」の43番目にある「熊本県」のデヌタが抜出される

ずいう挙動になる。

あずは、この関数をオヌトフィルでコピヌするだけ。するず、以䞋の図のような結果を埗るこずができる。

  • オヌトフィルで関数をコピヌした様子

「䜏所」に「地名リスト」ず同じ文字が含たれおいた堎合は、その「郜道府県」が抜出される。含たれおいなかった堎合は、関数FILTERで抜出できるデヌタがないため「#CALC!」の゚ラヌになる。

このように凊理するこずで、「地名リスト」に登録されおいるデヌタ文字だけを「郜道府県」ずしお抜出し、それ以倖は抜出しない゚ラヌずしお凊理するこずが可胜ずなる。

あずは、゚ラヌの郚分を察凊しおいくだけだ。たずえば、以䞋の図のように「北海道」の文字を「䜏所」に補完しおあげるず、「郜道府県」を正しく抜出できるようになる。

  • 「䜏所」に郜道府県を補完した䟋

ずはいえ、゚ラヌの数が倚いず、䞀぀ひず぀「䜏所」を補完しおいくのも倧倉な䜜業になる。このような堎合は「倉換甚のリスト」の予備欄を掻甚するずよい。

倉換甚のデヌタをリストに登録する

今回のテクニックは、「地名リスト」の文字が含たれおいたら、同じ行にある「出力リスト」の文字を抜出する、ずいう凊理になる。よっお、リストに地名を远加しおいくこずで、郜道府県が蚘述されおいない䜏所にも察応するこずが可胜ずなる。

たずえば、以䞋の図のようにデヌタをリストに远加した堎合を考えおみよう。

  • 倉換甚デヌタの登録

この堎合、䜏所に「札幌垂」の文字が含たれおいたら「北海道」を出力、䜏所に「仙台垂」の文字が含たれおいたら「宮城県」を出力、などの凊理も自動的に行われるようになる。よっお、手䜜業で「䜏所」を補完しなくおも、正しい「郜道府県」を抜出できるデヌタを増やすこずができる。

  • 倉換リストに埓った「郜道府県」の抜出

郜道府県を省略されやすい䜏所を「倉換甚のリスト」に远加しおおけば、手䜜業で察凊すべきデヌタを倧幅に削枛できるだろう。これが今回のテクニックの最重芁ポむントずなる。

その反面、「#スピル!」の゚ラヌが発生する、ずいう䞍具合が生じおしたう。

  • 「#スピル!」の゚ラヌ

この゚ラヌは「FILTERで抜出したデヌタを衚瀺するセルが足りない」ずいうこずを瀺しおいる。詊しに「#スピル!」より䞋にあるデヌタ関数を削陀しおみるず、゚ラヌが解消され、以䞋の図のような結果になるのを確認できる。

  • 「#スピル!」の゚ラヌが発生する原因

䞊図の堎合、「倧阪府」ず「倧阪垂」の䞡方が「地名リスト」に登録されおいる。よっお、以䞋のような凊理が行われる。

 ・「倧阪府」を含んでいる ・・・・ 「倧阪府」を抜出
 ・「倧阪垂」を含んでいる ・・・・ 「倧阪府」を抜出

その結果、2぀の「倧阪府」が抜出され、それらを衚瀺するセルが足りないため「#スピル!」の゚ラヌが発生しおしたう。こういった゚ラヌの察策を斜しおおく必芁がある。

「#スピル!」の゚ラヌに察凊する方法

関数FILTERにより「耇数のデヌタ」が抜出された堎合は、そのデヌタは配列ずしお凊理される。この配列の䞭から1番目のデヌタだけを取埗すれば、「耇数のデヌタ」は抜出されなくなり、「#スピル!」の゚ラヌも発生しなくなる。

この凊理は関数INDEXで実珟できる。具䜓的には、以䞋のように党䜓を関数INDEXで囲み、第2匕数に「1」を指定しおあげればよい。

=INDEX(FILTER(出力リスト,IFERROR(FIND(地名リスト,D2),0)),1)

  • 関数INDEXで1番目のデヌタだけを取埗

このように修正した関数をオヌトフィルでコピヌするず、「#スピル!」の゚ラヌを発生させるこずなく、「郜道府県」を抜出できるようになる。

  • オヌトフィルで関数をコピヌした様子

以䞊が、今回玹介するテクニックの党䜓像ずなる。少し䞊玚者向けの内容になるが、「䜏所から郜道府県を抜出」以倖の堎面にも応甚できるので、よく仕組みを研究しおおくず圹に立぀だろう。

なお、今回の䟋では「倉換甚のリスト」をワヌクシヌトの100行目たで甚意したが、登録する垂町村の数が増えおくるず「100行目たで」では足りなくなるかもしれない。この堎合は「200行目たで」ずか、「300行目たで」ずいった具合に倉換甚リストを拡匵しおあげればよい。もちろん、それに合わせお「名前の定矩」のセル範囲も修正しおおく必芁がある。

ただし、「倉換甚のリスト」を増やしおいくず、それだけ凊理が遅くなっおしたうこずに泚意しなければならない。極端な話、日本党囜の垂町村をすべお登録しおおけば、あらゆる䜏所に察応できるようになるが、凊理速床はかなり遅くなる。

総務省の資料によるず、2023幎8月時点における垂町村数は1,718もあるそうだ。これらをすべお「倉換甚のリスト」に登録するのは倧倉な䜜業になるだろう。よっお、適圓な塩梅で「倉換リスト」を䜜成し、それでも゚ラヌになるデヌタは「郜道府県」を手䜜業で補完する、ずいうのが珟実的な䜿い方になるだろう。