今回は、Excelで特定の文字列を抽出する方法を解説します。
大まかな手順
大まかな手順として、
- 特定の文字列が何文字目にあるか調べる(FIND関数)
- 特定の文字列を切り出す(MID関数)
となります。MID関数では、抽出したい文字列の開始位置と、その文字数をもとに切り出します。そのため、最初にFIND関数で開始位置と、文字数を求める必要があります。
この手順を以降で詳しく解説します。理屈はいいのでとりあえず数式をコピペしたい!という方は、
をご参照ください。
特定の文字列が何文字目にあるか調べる(FIND関数)
元データから名前を取り出したい場合、取り出したい文字列が何文字目から何文字目までかを特定します。
何文字目から始まるかを調べる
何文字目から始まるかを調べるために、FIND関数を用います。
今回であれば、「・名前:」が何番目から始まるかを取得し、その値に「・名前:」の文字数分をプラスすれば良いです。
「・名前:」は1文字目から始まるので、そこに「・名前:」の4文字分を足すと、5文字目が開始位置ということが分かります。
抽出したい文字列の文字数を調べる
次に、抽出したい文字列の文字数を調べます。「さっき開始位置を調べたから、次は終了位置じゃないの?」と思うかもしれませんが、そうではありません。
MID関数で文字列の途中を切り出す際には、
MID(文字列, 開始位置, 文字数)
となっており、指定するのは開始位置と、抽出したい文字列の文字数です。
区切り文字の位置を調べる
取得したい文字列が何文字目までかを調べるには、データがどのように区切られているかをチェックします。
今回の例では改行で区切られているので、改行のある位置を取得します。改行は「CHAR(10)」で表すため、以下のようになります。
これで、改行のある位置=10が取得できます。
特定の文字列を切り出す(MID関数)
文字列を切り出すMID関数は、以下のように使います。
先ほどの手順で改行コードの位置が分かったので、改行コードの位置から抽出開始位置のひとつ前の位置を引くことで、文字数が分かります。最終的に以下のようになります。
=MID(A2,FIND("・名前:",A2)+4,FIND(CHAR(10),A2,FIND("・名前:",A2))-(FIND("・名前:",A2)+4))
改行コードの位置を取得したあと、
-(FIND("・名前:",A2)+4)
にて、改行コードの位置 ー 先頭から抽出開始位置までの文字数 をすることで、抽出する文字数を指定しています。
フォーマットが統一されていない場合
「・名前:」と「・名前:」のように、記号の半角/全角が統一されていなかったり、「都道府県」と「都道府県名」のように名称自体統一されていない場合の対応について解説します。
半角・全角が統一されていない場合
「・名前:」と「・名前:」のように、記号の半角/全角が統一されていない場合、FIND関数に失敗しエラーとなります。
このような場合には、ASC関数を使用して半角・全角を統一します。
=MID(A2,FIND("名前:",ASC(A2))+3,FIND(CHAR(10),A2,FIND("名前:",ASC(A2)))-(FIND("名前:",ASC(A2))+3))
すべての記号が半角になるため、「・」の部分は省いて「名前:」で検索するようにしました。それに伴い、項目名は4→3文字になるので +4を+3に変更しています。
なかなかにめんどくさいので、一旦別のセルにASC(A2)で全てを半角にした文字列を出しておき、そこを参照するようにしたほうが分かりやすいかもです。
項目名が統一されていない場合
「都道府県」と「都道府県名」のように名称自体統一されていない場合には、IFERROR関数を使用します。
=IFERROR(MID(A2,FIND("・都道府県:",A2)+6,FIND(CHAR(10),A2,FIND("・都道府県:",A2))-(FIND("・都道府県:",A2)+6)),MID(A2,FIND("・都道府県名:",A2)+7,FIND(CHAR(10),A2,FIND("・都道府県名:",A2))-(FIND("・都道府県名:",A2)+7)))
かなり長いですが、やっていることは
IFERROR(「都道府県」を探すパターン, 「都道府県名」を探すパターン)
となっています。
オートフィルで他の行にも数式を反映させる
1行目に数式がセットできたら、それをオートフィルで下の行にも反映させます。
以下の動画も合わせてご参照ください。
サンプルの数式 (数式のみ知りたい方はこちら)
ここまで、特定の文字列を切り出す方法について順を追って解説してきましたが、サンプルの数式さえあればいいという方むけに、こちらにサンプルの数式を載せておきます。
なお、扱う元データは以下になります。
・名前:A葉 雅紀
・電話番号:080-xxxx-xxxx ※ コロンが半角
・都道府県:千葉県 ※ 「都道府県」と「都道府県名」が混在
・メールアドレス:aiba@test.com
サンプル数式
- 名前
=MID(A2,FIND("・名前:",A2)+4,FIND(CHAR(10),A2,FIND("・名前:",A2))-(FIND("・名前:",A2)+4))
- 電話番号
=MID(A2,FIND("電話番号:",ASC(A2))+5,FIND(CHAR(10),A2,FIND("電話番号:",ASC(A2)))-(FIND("電話番号:",ASC(A2))+5))
- 都道府県名
=IFERROR(MID(A2,FIND("・都道府県:",A2)+6,FIND(CHAR(10),A2,FIND("・都道府県:",A2))-(FIND("・都道府県:",A2)+6)),MID(A2,FIND("・都道府県名:",A2)+7,FIND(CHAR(10),A2,FIND("・都道府県名:",A2))-(FIND("・都道府県名:",A2)+7)))
- メールアドレス
=MID(A2,FIND("・メールアドレス:",A2)+9,FIND(CHAR(10),A2,FIND("・メールアドレス:",A2))-(FIND("・メールアドレス:",A2)+9))
項目名が異なる形の場合は、検索対象と文字数を変更して対応してください。
まとめ
今回は、Excelで特定の文字列を抽出する方法について解説しました。
FIND関数で開始位置と文字数を調べ、MID関数で抽出をすることが分かりました。
今回、このような記事を書いたのは、仕事で同じような処理をする機会があったためです。元データがあって、それを分解して各セルに入れる処理は今後ももしかしたら使うかもと思い、自分への備忘録を兼ねて書きました。
Excelの数式を扱うことはそんなにないので、けっこう苦戦しました。。。ネットで調べながらやりましたが、今思えばChatGPTに聞いてみても良かったかも。手がかりがないときこそ、ChatGPTに質問するべきだった・・・!
コメント