Excel 特定の文字列以前・以降・間の文字を抽出する方法

2020年10月14日

Excelでは関数のみで特定の文字列をキーに文字列を抽出することが可能です。

ここの記事ではその方法を紹介します。

抽出する手順

特定の文字列以前

LEFT関数FIND関数を利用し、下記の数式を入力します。

=LEFT(抽出元の文字列,FIND(キーとなる文字列, 抽出元の文字列)-1)

先頭の文字をキーとした場合は空白、該当しない場合は#VALUEエラーになります。

特定の文字列以前を抽出するキャプチャ

特定の文字列以降

RIGHT関数FIND関数を利用し、下記の数式を入力します。

=RIGHT(抽出元の文字列,LEN(抽出元の文字列)-FIND(キーとなる文字列,抽出元の文字列)-LEN(キーとなる文字列)+1)
特定の文字列以降を抽出するキャプチャ

〇〇と△△の間

MID関数FIND関数LEN関数を利用し、下記の数式を入力します。

=MID(抽出元の文字列,
     FIND(前:キーとなる文字列,抽出元の文字列)+LEN(前:キーとなる文字列),
     FIND( 後:キーとなる文字列,抽出元の文字列)-FIND(前:キーとなる文字列,抽出元の文字列)-LEN(前:キーとなる文字列)+1)
〇〇と△△の間を抽出するキャプチャ

数式の効率化(LET関数が使える場合)

2020年10月頃にMicrosoft(Office)365で追加された新機能のLET関数を利用すれば

FIND関数LEN関数の重複なしに数式を組むことが可能です。

(いつ更新が反映されるかは時間差があります)

LET関数は一定の数式に任意の名前を付けて再利用可能にする関数です。

(マクロやプログラミングの変数のようなもの)

今回の数式例です。

重複している1回目と3回目のFIND関数前文字の開始位置という名前に置き換え、

LEN関数前文字数という名前に置き換えています。

=LET( 前文字の開始位置,FIND(C3,B3), 
      前文字数,LEN(C3), 
      MID(B3,前文字の開始位置+前文字数,FIND(D3,B3)-前文字の開始位置-前文字数)
    )

これにより以下のようなメリットがあります。

  • 数式の重複(冗長)がなくなり、数式の変更が簡単になる
  • 意味のある名前を付けられるため数式の意図を把握しやすくなる(ただしLET関数を知っている必要あり)
  • 数式の実行回数が減るのでExcelの計算が早くなる(今回の例ではFIND関数が4回→3回)

FIND関数LEN関数は対象の文字数が長くなると重さを増してくる関数です。

数式を使うセルが多い場合は特に効果が大きいでしょう。

LET関数の利用例(重複のみ)

重複だけでなく意味のある数式の固まりに名前を付ける手もあります。

数式自体は長くなりますが、何を意図した数式なのか構造は読みやすくなります。

LET関数や変数に慣れているかという個人差の要素はあります)

=LET( 前文字の開始位置,FIND(C3,B3),
      前文字数,LEN(C3),
      切り出しの開始位置,前文字の開始位置+前文字数,
      切り出しの終了位置,FIND(D3,B3)-前文字の開始位置-前文字数,
      MID(B3,切り出しの開始位置,切り出しの終了位置)
    )
LET関数の利用例

関連記事