(Excel)特定の文字と特定の文字の間を抽出する方法

 Excelで、2つの特定の文字の間の部分を抽出する方法についてです。
 カッコのように2種類の文字で挟まれている部分を抽出する場合と、同一種類の2つの文字に挟まれている部分を抽出する場合についてそれぞれ紹介します。
 単純化のため、対象となるテキストに含まれる「特定の文字」は2つだけであるものとします。

2つの特定の文字の間を抽出する場合

TEXTBEFORE/TEXTAFTER関数を使う方法

 次の画像では、B列に対象となるテキストがいくつか入力されています。
 C列には数式を入力して、B列の各テキスト中の「【」と「】」の2つの記号に挟まれている部分を抽出しています。記号が隣接する場合は空文字列("")が抽出され、記号が片方だけ、あるいは含まれない場合はエラーとなります(次の例でも同様)。

 C3セル(下方にフィルコピー)

=TEXTBEFORE(TEXTAFTER(B3,"【"),"】")

 TEXTBEFORE関数とTEXTAFTER関数を入れ子にしています。
 「TEXTAFTER(B3,"【")」で「【」より後の部分を抽出し、その結果に対しTEXTAFTER関数を使い「】」より前の部分を抽出しています。

MID/FIND関数を使う方法

 上記例と同様に、C列に数式を入力して、B列の各テキスト中の「【」と「】」の2つの記号に挟まれている部分を抽出しています。

 C3セル(下方にフィルコピー)

=MID(B3,FIND("【",B3)+1,FIND("】",B3)-FIND("【",B3)-1)

 MID関数の第2引数(抽出開始位置)を「FIND("【",B3)+1」つまり「【」の次の位置としています。また、第3引数(抽出文字数)を「FIND("】",B3)-FIND("【",B3)-1」としています。つまり2つの記号のそれぞれの位置(〇番目)から抽出文字数を計算しているわけですが「-1」を忘れると「】」も抽出してしまいます。

同一の2つの文字の間を抽出する場合

TEXTBEFORE/TEXTAFTER関数を使う方法

 次の画像では、B列に対象となるテキストがいくつか入力されています。
 C列には数式を入力して、B列の各テキスト中の2つの「☆」に挟まれている部分を抽出しています。記号が隣接する場合は空文字列("")が抽出され、記号が1つだけ、あるいは含まれない場合はエラーとなります(次の例でも同様)。

 C3セル(下方にフィルコピー)

=TEXTBEFORE(TEXTAFTER(B3,"☆"),"☆")

 「TEXTAFTER(B3,"☆")」で最初の「☆」より後の部分を抽出し、その結果に対しTEXTAFTER関数を使い「☆」より前の部分を抽出しています。
 TEXTAFTERとTEXTBEFOREを逆にするやり方も考えられますが、その場合はまずTEXTBEFOREで2番目の「☆」より前を抽出する必要があるので「=TEXTAFTER(TEXTBEFORE(B3,"☆",2),"☆")」としなければなりません。

MID/FIND関数を使う方法

 C3セル(下方にフィルコピー)

=MID(B3,FIND("☆",B3)+1,FIND("☆",B3,FIND("☆",B3)+1)-FIND("☆",B3)-1)

 MID関数の第2引数(抽出開始位置)を「FIND("☆",B3)+1」つまり「☆」の次の位置としています。
 問題は第3引数(抽出文字数)ですが、このうち「FIND("☆",B3,FIND("☆",B3)+1)」は「2番目の『☆』の位置」という意味です。FIND関数の第3引数は検索を開始する位置を意味しており、これを「FIND("☆",B3)+1」つまり最初の「☆」の次の位置とすることで2番目の「☆」の位置が求められます。あとは「FIND("☆",B3)」つまり最初の「☆」の位置との差し引きで抽出文字数を求めています。「-1」を忘れないよう注意してください。

備考:特定の文字を含めて抽出する場合

 以上の例では「特定の文字」そのものを含めず抽出していますが、含めて抽出する例を紹介します。
 抽出の基本的な考え方は上記例と同様ですので、詳細については対応するそれぞれの例を参照ください。


 まずは2つ(2種類)の特定の文字の間を、TEXTBEFORE/TEXTAFTER関数で抽出する例です。

 C3セル(下方にフィルコピー)

="【"&TEXTBEFORE(TEXTAFTER(B3,"【"),"】",)&"】"

 単純に2つの記号を「&」でつないでいるだけですが、特定の文字が片方だけ、あるいは含まれない場合は上記例と同様にエラーになります。



 次は2つ(2種類)の特定の文字の間を、MID/FIND関数で抽出する例です。

 C3セル(下方にフィルコピー)

=MID(B3,FIND("【",B3),FIND("】",B3)-FIND("【",B3)+1)

 MID関数の第2引数(抽出開始位置)を「FIND("【",B3)」つまり「【」の位置としています。また、第3引数(抽出文字数)を「FIND("】",B3)-FIND("【",B3)+1」とし、2つの記号のそれぞれの位置(〇番目)から抽出文字数を計算しています。「+1」に注意してください。
 なお、これまでの例では2種の文字が逆順で含まれる場合(「いか】えび【ひらめ」のように)はエラーになるのですが、この式の場合は2種の文字が逆順で隣接する場合(「】【」のように)に限り空文字列("")が抽出されます。



 次は同一の文字の間を、TEXTBEFORE/TEXTAFTER関数で抽出する例です。

 C3セル(下方にフィルコピー)

="☆"&TEXTBEFORE(TEXTAFTER(B3,"☆"),"☆")&"☆"

 これも単純に2つの記号を「&」でつないでいるだけですが、特定の文字が1つだけ、あるいはない場合は上記例と同様にエラーになります。



 最後に同一の文字の間を、MID/FIND関数で抽出する例です。

 C3セル(下方にフィルコピー)

=MID(B3,FIND("☆",B3),FIND("☆",B3,FIND("☆",B3)+1)-FIND("☆",B3)+1)

 MID関数の第2引数(抽出開始位置)を「FIND("☆",B3)」つまり「☆」の位置としています。
 第3引数(抽出文字数)の前半の「FIND("☆",B3,FIND("☆",B3)+1)」は「2番目の『☆』の位置」という意味で、あとは「FIND("☆",B3)」つまり最初の「☆」の位置との差し引きで抽出文字数を求めています。「+1」に注意してください。