今回も「文字列を操作する関数」について具体的な例を紹介していこう。今回のテーマは「文字列データの引き算」だ。文字列の足し算(結合)は「&」(アンド)の演算子で手軽に実行できるが、引き算を行うときは関数を使わなければならない。文字列データを関数で加工するときの一例として参考にして頂ければ幸いだ。

文字列データの引き算を行うには?

文字列データから「特定の文字」を削除したいケースもあるだろう。前回の連載では「住所」から「都道府県」を抜き出す方法を紹介した。これに関連する作業として、「住所」から「都道府県以降の住所」を抜き出す場合を例に具体的な手順を紹介していこう。

このような場合は、文字列を置換する「SUBSTITUTE」や「REPLACE」といった関数、ならびに文字数をカウントする「LEN」などの関数を使用する。

  • 文字列の引き算に使える関数SUBSTITUTE、REPLACE、LEN

前回の連載では「住所」から「都道府県」を抜き出す方法を3つ紹介した。どの方法を使っても、以下の図のような結果を得ることができる。

  • 住所から「都道府県」を抜き出した表

単に「都道府県だけのデータが欲しい」というのであれば、これで作業は終了となる。しかし、「住所を都道府県とそれ以降に分割したい」という場合は、「都道府県以降の住所」を抽出する作業も行わなければならない。

まずは、「都道府県以降の住所」を記載するための列を用意しよう。

  • 「都道府県以降の住所」の列を用意

続いて、何らかの方法で「都道府県以降の住所」を作成(抽出)していく。この作業の最も簡単な処理方法は、「住所」から「都道府県」を引き算すればよい、と考えられる。無理を承知で試してみよう。以下の図のように(住所)-(都道府県)の数式を入力する。

  • 強引に「文字列の引き算」を試してみた例

「Enter」キーを押して数式を実行すると、計算を正しく実行できないことを示す「#VALUE!」のエラーが表示される。

  • 計算できないことを示すエラー

このように単純な数式で文字列データを操作できるとよいのだか、残念ながらExcelにそのような機能は用意されていない。「&」で文字を結合(足し算)することは可能であるが、削除(引き算)をする演算子は用意されていない。これを実現するには関数を利用する必要がある。

関数SUBSTITUTEを使った文字列データの引き算

ということで、「文字列データの引き算」に使える関数を紹介していこう。最初に紹介するのは「SUBSTITUTE」という関数だ。この関数は、置換前の文字(第2引数)を置換後の文字(第3引数)に置き換える機能を有している。

◆関数SUBSTITUTEの書式
 =SUBSTITUTE(文字列, 置換前, 置換後, [何番目])

文字を削除する関数ではないが、「置換後」に空文字("")を指定することで、実質的には「指定した文字の削除」を行うことが可能となる。

「都道府県以降の住所」を抜き出す場合を例に、具体的な記述方法を紹介していこう。今回の例の場合、「住所」(C2)の文字列データについて、「都道府県」(D2)の文字を「空文字」("")に置換する、という処理を行えばよい。これを関数SUBSTITUTEで記述すると、以下のようになる。

  • 関数SUBSTITUTEの入力

「Enter」キーを押して関数を実行すると、「広島県」の文字が「空文字」に置換されるため、結果として「広島県」の文字を削除した住所を得ることができる。

  • 「広島県」の文字を削除した住所

あとは、この関数をオートフィルでコピーするだけ。これですべての行(レコード)について「都道府県以降の住所」を作成できる。

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

  • 全レコードの「都道府県以降の住所」

このように、関数SUBSTITUTEを使って「文字の引き算」を実現することも可能だ。ただし、上記の例は稀に不具合が生じてしまうことに注意しなければならない。

たとえば、「広島県広島市西区・・・広島県営住宅503」という住所があったとしよう。この住所には「広島県」の文字が2カ所ある。この住所を関数SUBSTITUTEで処理すると、「広島県」の文字が2カ所とも削除され、「広島市西区・・・営住宅503」という結果になってしまう。

  • 不具合の生じるケースの例

本来であれば「広島県営住宅」の文字はそのまま残さなければならないが、こちらの「広島県」も削除されてしまう。こういった不具合に対処するには、第4引数に「1」を指定してあげる必要がある。

  • 1番目の該当文字列だけを置換する場合

関数SUBSTITUTEの第4引数は、「何番目の該当文字を置換するか?」を指定するものとなる。上記の場合、1番目の「広島県」だけを「空文字」に置換する、という指定になる。つまり、2番目に登場する「広島県」は削除されない、という結果になる。

  • 抽出された「都道府県以降の住所」

このように多少の配慮が必要になるケースもある。文字列を関数で処理するときは、「あらゆる状況に対応できていか?」、「想定外のケースはないか?」についても、よく検討しなければならない。このあたりが文字列操作の難しいポイントとなる。

関数LENと関数REPLACEを使った文字列データの引き算

続いては、別の方法で「都道府県」の文字を削除してみよう。こちらは「関数LEN」を利用した方法となる。

LENは「データの文字数」をカウントする関数で、カッコ内に指定したデータ(セル参照)について「文字数が何文字あるか?」を数値で返してくれる関数だ。たとえば、以下の図のように関数LENを記述すると、「D2セル(広島県)の文字数が何文字あるか?」を調べることができる。

  • 文字数をカウントする関数LENの入力

この関数をオートフィルでコピーすると、以下の図のような結果が得られる。「都道府県」の文字数はその大半が3文字でああるが、4文字になるときだけ「数値の4」という結果が表示されているのを確認できるだろう。

  • 「都道府県」の文字数を関数LENで調べた例

このように文字数を特定できる場合は、「REPLACE」という関数で文字を削除することも可能だ。この関数も「文字の置換」を行う関数となるが、その指定方法は「N文字目からM文字分」という形になっている。

◆関数REPLACEの書式
 =REPLACE(文字列, 開始位置, 文字数, 置換文字列)

都道府県の文字は必ず「住所」の1文字目から始まるので、第2引数(開始位置)には「1」を指定すればよい。第3引数(文字数)は「先ほど関数LENで取得した文字数」で指定できる。今回は文字を削除するので、第4引数(置換文字列)には「空文字」("")を指定する。

  • 関数REPLACEの入力

「Enter」キーを押して関数を実行すると、最初の3文字(広島県は3文字)が削除され、「都道府県以降の住所」を正しく取得できることを確認できる。

  • 最初の3文字を削除した住所

あとは、この関数をオートフィルでコピーするだけ。この方法でも、すべての行(レコード)について「都道府県以降の住所」を取得することが可能だ。

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

  • 全レコードの「都道府県以降の住所」

そのほか、前回の連載で紹介したように「4番目の文字が"県"であるか?」を調べて、TRUEの場合は「最初の4文字」、FALSEの場合は「最初の3文字」を削除する、という考え方で「都道府県以降の住所」を取得してもよい。

今回の連載で紹介したように、「文字列データ」から「特定の文字」を削除するときも「どのようなアルゴリズムで処理するか?」が重要になる。もちろん、それを実現するための関数の知識も求められる。

文字列を扱う処理は「アルゴリズム」と「関数の知識」を複合的に問われる、一筋縄に解決できない問題になることが多い。その解決方法はケース by ケースになるため、一概に示すのは難しい。

近い将来、AIの発展により手軽に解決できるようになる可能性もあるが、現時点では個人のスキルに委ねられているのが実情だ。よって、「まだまだExcel関数の知識は役に立つ」といえるだろう。