【IT小技3】 Excel>SUBSTITUTE関数で右から文字列抽出(組織名・住所に)

目次

この記事で分かること

複数の階層を「>」などで結合した文字列から、末尾の階層だけを抽出する方法を紹介します。
例) 株式会社S>T事業本部>U事業部>V部>W課 → V部>W課
SUBSTITUTE関数、FIND関数、LEN関数、MID関数の実践的な使い方

課題|右から区切り位置を指定するのはどんな時?

今回は会社組織名を短く表示するために、組織名の右の方(組織階層の下の方)だけを抽出する方法を考えます。

下の図は、とある工場内の組織名一覧です。会社名>部門名>課名といった組織階層を”>”文字で区切って繋げています。

上から順に階層全てを記載しているので冗長です。同じ工場組織なので、上の方の階層はどの組織も同じ名前です。

そこで組織階層の下の方だけ、例えば下から2番目までを抜き取れば、スッキリ見やすくなると考えました。

今回の課題は”>”で区切られた会社組織名の、下から2番目の階層以降を抽出することです

狙った階層以下の所属を抜き出すことは、エクセル関数なら可能です。しかし複数の関数の組み合わせが必要なため少々難しくなります。

そこで次の「答え」では関数式を、「解説」では関数式の導出過程をご説明します。

【答え】 ポイントはSUBSTITUTE関数

B列= LEN(A2)-LEN(SUBSTITUTE(A2,”>”,””))
C列の式= SUBSTITUTE(A2,”>”,”★”,B2-1)
D列= MID(C2,FIND(“★”,C2,1)+1,LEN(C2))
(解答は2行目の式です)

セルA列は会社組織を省略なしで入力しています。計算式は複雑なので、B列からD列の3ステップに分けています。そしてD列が最終解答です。各列の内容は次の「解説」で説明します。

【解説】 各Excel関数式の説明

まず全体の処理を大まかに説明してから、個別の処理を詳細に説明します。

全体の処理概要

最終解答のD列から導出過程を逆にたどっていきます。

D列の処理

D列では開始文字(今回は右端から2番目の区切り文字)より右側の文字列全てをMID関数で抽出します。

開始文字はC列の計算で”★”に置き換えます。

そして開始文字の位置はFIND関数で指定します。

下が処理結果です。

C列の処理

C列では「開始文字」を「他の区切り文字」とは異なる別の文字に置き換えます。それはD列のFIND関数が開始文字の位置を特定するためです。

この置き換えに使うのがSUBSTITUTE関数です。ここでは開始文字を”★”に置き換えます。

左から何番目の区切り文字を置き換えるか、はB列で計算します。

下が処理結果です。

B列の処理

B列では区切り文字の出現回数を計算します。これは区切り位置の指定を「右から」ではなく「左から」に変換するためです。

何故ならSUBSTITUTE関数は、左から何番目の区切り文字、という指定しかできないためです。

下が処理結果です。

個別の処理

上記のB列からD列の処理を詳細に説明します。

B列:区切り文字の出現回数を計算する

再掲:B列=LEN(A2)-LEN(SUBSTITUTE(A2,”>”,””))

区切り文字の出現回数は全文字数」と「区切り文字をなくした文字数」の引き算です。

「全文字数」は右辺第一項LEN関数で計算します。引数は文字数カウントしたい文字列、戻り値は文字数です。

「区切り文字をなくした文字数」は右辺第二項目LEN関数SUBSTITUTE関数の組み合わせで計算します。

LEN関数の引数に「区切り文字をなくした文字列」を渡せば、文字数が計算できます。区切り文字をなくすために、文字列中の全ての区切り文字(今回は ”>”)を、文字無し(””)に置換するのがSUBSTITUTE関数です。

即ちSUBSTITUTE関数の2番目の引数に区切り文字、3番目の引数に文字無し(””)を指定した戻り値で得られます。

C列:狙った区切り文字を★に置き換える

再掲:C列= SUBSTITUTE(A2,”>”,”★”,B2-1)

今回は右から2番目の区切り文字”>”を”★”に置き換えます。置き換え文字は”★”のような、文字列中に存在しえない特殊な文字を指定して下さい。

区切り文字の置き換えに使うのはSUBSTITUTE関数です。そしてSUBSTITUTE関数は左から何番目の区切り文字を置き換えるか、を指定できます。

今回指定する「右からn番目の区切り文字」は、左から数えると「B列で求めた出現回数」-(n-1)です。これをSUBSTITUTE関数の4番目の引数に指定します。

D列:狙った区切り文字より右の文字だけ抽出する

再掲:D列= MID(C2,FIND(“★”,C2,1)+1,LEN(C2))

ここでは上述のC列の式で”★”に置換した開始文字から右側の文字列を抽出します。

“★”置換した文字位置はFIND関数で探します。FIND関数は探したい文字が左から何番目にあるかを整数で返します。

FIND関数の1番目の引数に「探したい文字」、2番目の引数に「探したい文字を含む文字列」、3番目の引数に「左から数えた開始位置」を指定すれば、戻り値は「探したい文字」の位置です。

なお、戻り値の「文字の位置」は3番目の引数「開始位置」から左に向かって数えて、探したい文字が何番目に現れたかを返します。

“★”置換した文字位置から右側の文字列はMID関数で抽出します。

MID関数の2番目の引数は抽出開始位置です。ここでは先ほどFIND関数で計算した”★”文字の位置+1を指定します。3番目の引数は抽出開始位置から右に数えて抽出したい文字数です。抽出したい文字数はLEN関数で全文字数を指定しました。文字列の最後まで抽出するので、実際より多めに文字数を指定しても大丈夫です。

まとめ

以上、複数の文字列が区切り文字で結合されている場合、右から任意の区切り位置で切り取る方法を説明しました。

今回取り上げた課題例は正式な会社組織名の略称表示でした。

SUBSTITUTE関数は区切り位置を指定できるのですが、指定方法は「左から何番目か」のみです。そこで「右から何番目か」という指定を、区切り文字の出現回数を使って「左から何番目か」に変換しました。

関数を組み合わせて使う手順は少々複雑なので、3つの個別処理に分けて説明しました。

本記事が少しでも読者のExcel上達に役立てれば幸いです。(終わり)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

 氷河期世代SEです。ITなどに関するマメ知識から、氷河期世代の生き方まで、読者に役立つ情報を発信します。
 仕事では資格を持たず、師匠もいない環境で身に付けた独学スキルだけが武器です。群れを嫌う一匹狼、いや狼ほど強くないので一匹猫(Lone Cat)として生きています。
 家庭では46歳で第一子、48歳で第二子を授かり、晩婚夫婦が子育て奮闘中です。趣味は料理、自動車、歴史、グルメ、温泉など幅広く色々やってます。
 2025年にブログをはじめました。老眼と同時デビューです。

コメント

コメントする

CAPTCHA


目次