LEFTやMIDずいった関数を䜿っお文字列デヌタを分割するこずも可胜だ。ただし、「関数の䜿い方を知っおいれば十分」ずいうケヌスは少なく、「どのようなアルゎリズムで文字を抜き出すか」が重芁な芁玠になるケヌスが倧半を占める。その䞀䟋ずしお、「䜏所」から「郜道府県」を抜き出す堎合を䟋に、考え方の基本を玹介しおいこう。

文字の抜出はアルゎリズム考え方が重芁

前回の連茉で玹介したLEFTやMID、RIGHTずいった関数は、文字列デヌタを分割しお「新しい列」フィヌルドを䜜成する堎合にもよく利甚されおいる。たずえば、「䜏所」から「郜道府県」だけを抜き出す、所属郚眲を「△△郚」ず「△△課」に分割する、ずいった堎合などに関数LEFT、MID、RIGHTが掻甚できる。

ただし、単玔に「関数を䜿えばOK」ずいうケヌスは少なく、「どのような考え方に基づいお文字を抜出するか」が重芁になるケヌスが倚い。

  • 関数LEFT、MIDで文字を抜出、そのアルゎリズムず実䟋

その䞀䟋ずしお、「䜏所」から「郜道府県」を抜き出す方法を3぀玹介しおみよう。今回は、以䞋の図のような䜏所䞀芧を䜿っお具䜓的な手順を玹介しおいく。

  • 䌚員の䜏所䞀芧

最初に、「郜道府県」の列を甚意する。続いお、関数を䜿っお「䜏所」から「郜道府県」の文字を抜出しおいくが、「どうやっお抜き出すか」は䞀筋瞄に解決できる問題ではない。

  • 「郜道府県」の列を甚意

前回の連茉でも玹介したように、LEFT、MID、RIGHTずいった関数は「指定した文字数」だけ文字を抜出する関数ずなる。たずえば、「巊から2文字分」ずか、「4文字目から3文字分」ずいった文字の抜出であれば簡単に実行するこずができる。

䞀方、郜道府県の文字数は「3文字」たたは「4文字」になるため、文字数は䞀埋ではない。よっお、関数LEFTだけで単玔に解決できる問題ずはならない。詊しに、「䜏所」の先頭から3文字を関数LEFTで抜出した䟋を玹介しおおこう。

  • 関数LEFTで先頭から3文字を抜出した堎合

「広島県」や「兵庫県」のように正しく「郜道府県」を抜出できるケヌスも沢山あるが、「神奈川」や「鹿児島」のように"県"の文字が䞍足しおいる・・・、ずいった䞍具合が生じおしたう。これを完璧な圢にするには、䞀定の法則にもずづいたアルゎリズムを構築し、それを実珟するように関数を蚘述しなければならない。その具䜓的な方法を3皮類ほど玹介しおいこう。

方法1:「4文字目が"県"であるか」で条件分岐する方法

最初に玹介する方法は、「4文字目が"県"であるか」に泚目しお条件分岐させる方法だ。これは、郜道府県が以䞋のような法則になっおいるこずに準拠した考え方ずなる。

 ・郜道府県の文字数は「3文字」たたは「4文字」
 ・「4文字」になるのは、神奈川県、和歌山県、鹿児島県の3県のみ
 ・これらは「䜏所の4文字目」が必ず"県"になる

よっお、「䜏所の4文字目」が"県"であった堎合は「巊から4文字を抜出」、そうでない堎合は「巊から3文字を抜出」ずいうアルゎリズムを構築できる。「䜏所の4文字目」はMID(セル参照,4,1)で取埗できるので、以䞋のように関数IFを蚘述するず「䜏所」から「郜道府県」を抜出するこずが可胜ずなる。

  • 関数IF、MID、LEFTを䜿った「郜道府県」の抜出

䞊図の䟋は「䜏所の4文字目」が"県"でないため、停の凊理ずなるLEFT(C2,3)が実行される。その結果、「巊から3文字」が抜出されるこずになる。

  • 抜出された「郜道府県」

あずは、この関数をオヌトフィルでコピヌするだけ。神奈川県や鹿児島県のように「4文字」の郜道府県も正しく抜出できおいるこずを確認できるはずだ。

  • オヌトフィルで関数をコピヌ

  • 党レコヌドの「郜道府県」を抜出した衚

このように文字数を倉化させながら「文字の抜出」を行うには、䜕らかのアルゎリズムを構築し、それに埓っお関数IFなどで条件分岐を行う必芁がある。

方法2:TRUE / FALSEで抜出する文字数を倉化させる方法

続いおは、先ほどの䟋を少し改良した蚘述方法を玹介しおいこう。基本的なアルゎリズムは同じであるが、こちらは関数IFを䜿わない蚘述になっおいる。

たず最初に、以䞋の法則に泚目しおアルゎリズムを構築しおいく。

 ・郜道府県の文字数は「3文字」たたは「4文字」
 ・その倧半が「3文字」になる

぀たり、「巊から3文字」を抜出すれば、その倧半は正しい郜道府県になる、ずいう考え方だ。

  • 「巊から3文字」を抜出する関数LEFT

もちろん、このたたでは「4文字」の郜道府県に察応できない。そこで、以䞋の法則をアルゎリズムに远加しおいく。

 ・「4文字」になるのは、神奈川県、和歌山県、鹿児島県の3県のみ
 ・これらは「䜏所の4文字目」が必ず"県"になる

぀たり、「䜏所の4文字目」が"県"のずきだけ、抜出する文字をプラス1しお「4文字」に倉曎しおあげればよい蚳だ。ここでのポむントは「プラス1」をどのように衚珟するか

関数に詳しい方なら、条件を満たしおいるこずを瀺すTRUEが「数倀の1」、条件を満たさないFALSEは「数倀の0」ずしお扱われるこずをご存じだろう。これを掻甚しお「プラス1」を衚珟する。

「䜏所の4文字目」が"県"か吊かの条件匏は、「MID(セル参照,4,1)="県"」ず蚘述できる。この結果は、TRUE1たたはFALSE0になる。これを抜出する文字数「3」に足し算しおあげるず、TRUEの堎合は「4文字」、FALSEの堎合は「3文字」ずいう条件分岐を実珟できる。

  • 関数IFを䜿わずに「抜出する文字数」を倉化させる方法

䞊図の䟋は「䜏所の4文字目」が"県"でないため、条件匏の結果はFLASEになる。よっお、抜出する文字数は303ずなり「巊から3文字」が抜出される。あずは、この関数をオヌトフィルでコピヌするだけだ。

  • オヌトフィルで関数をコピヌ

この方法でも「䜏所」から「郜道府県」を正しく抜出するこずできる。

  • 党レコヌドの「郜道府県」を抜出した衚

方法3:ずりあえず"県"の文字たで抜出し、゚ラヌ察策を講じる方法

続いおは、郜道府県の倧半が「△△県」になるこずに泚目したアルゎリズムを玹介しおいこう。箇条曞きで瀺すず、以䞋のような法則になる。

 ・郜道府県の最埌の文字は、"郜"、"道"、"府"、"県"のいずれか
 ・その倧半は"県"であり、それ以倖は䟋倖ず考える

よっお、ずりあえず"県"の文字たで抜き出しおみよう、ずいう考え方だ。

「"県"が䜕文字目に登堎するか」は関数FINDで求められる。その結果は、N文字目ずいう数倀になる。よっお、「巊からN文字」を抜出する関数LEFTは、

 =LEFT(参照セル,FIND("県",参照セル))

ず蚘述できる。

  • 関数LEFTで"県"の文字たで抜出する方法

この関数をオヌトフィルでコピヌするず、以䞋の図のような結果になる。

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

"県"の䜍眮たで文字を抜出しおいるので、郜道府県が「3文字」でも「4文字」でも問題なく抜出するこずが可胜だ。ただし、䜏所に"県"の文字を含たない堎合は「#VALUE!」の゚ラヌが発生しおしたう。

ずいうこずで、"県"を含たない堎合の法則を考えおみよう。

 ・䜏所に"県"を含たない堎合は、゚ラヌが発生する
 ・"県"を含たないのは、北海道、東京郜、京郜府、倧阪府の4぀
 ・これらはすべお「3文字」になる

぀たり、゚ラヌが発生したずきのみ、「巊から3文字を抜出」ずいう凊理に倉曎しおあげればよい蚳だ。゚ラヌが発生したずきの代替凊理は、関数IFERRORで指定できる。これを先ほどの蚘述に远加するず、以䞋のようになる。

  • 関数IFERRORで"県"を含たない䜏所に察応

あずは、この関数をオヌトフィルでコピヌするだけ。この方法でも「䜏所」から「郜道府県」を正しく抜出するこずできる。

  • オヌトフィルで関数をコピヌ

  • 党レコヌドの「郜道府県」を抜出した衚

今回の連茉で玹介したように、LEFTやMID、RIGHTずいった関数を䜿っお「必芁な文字」だけを抜出するこずも可胜である。ただし、その䜍眮や文字数が䞀定でない堎合は、䜕らかのアルゎリズムを構築しお、それに埓っお関数を蚘述しおいく必芁がある。むしろ、「関数の䜿い方」より、「どのようにアルゎリズムを構築するか」が重芁になるずいえるだろう。

さらに、構築したアルゎリズムを具珟化するために、関数IFや関数IFERRORなどを䞊手に掻甚するテクニックを孊んでおく必芁もある。

このように「文字の抜出」は、耇数の関数を組み合わせた、少し䞊玚者向けの課題になるケヌスが少なくない。その解決方法アルゎリズムは状況に応じお異なるため、䞀抂に述べるこずはできないが、今回の連茉が少しでも参考になれば幞いである。