Excelで文字数がバラバラな文字列を抽出する方法|MID・FIND関数を組み合わせよう

コラム・裏ワザ
勇者たんたん
勇者たんたん

ハイフンより前と後ろの文字列を別々のセルへ取り出したいのですが、商品番号ごとに文字数が違っても抽出できますか?

文字列から一部分を取り出す場合は、MID関数で抽出を始める位置と文字数を指定します。

しかし、商品番号ごとに文字数やハイフンの位置が異なると、開始位置や文字数を同じ数字で指定しても、必要な部分を正しく抽出できません。

文字数が異なる場合は、FIND関数でハイフンの位置を調べ、その結果をMID関数の開始位置や個数へ指定します。

ハイフンより後ろを抽出するときは、LEN関数で文字列全体の長さも求めます。

基本的な手順は、ハイフンの位置を調べ、ハイフンを基準に抽出の開始位置と文字数を求め、最後にMID関数で必要な部分を取り出す流れです。

この方法なら、ハイフンの位置がデータごとに変わっても、同じ数式を使用できます。

この記事では、文字数やハイフンの位置が異なる文字列から、ハイフンより前と後ろを抽出する方法を解説します。

MID・FIND・LEN関数の役割と組み合わせ方を、数式と説明図を使って確認しましょう。

今回のゴール

MID・FIND・LEN関数を組み合わせ、文字数や区切り位置が異なる文字列から、ハイフンより前と後ろを抽出できるようになる

MID・FIND・LEN関数を組み合わせる

文字数やハイフンの位置が異なる文字列を抽出する場合は、MID・FIND・LEN関数を組み合わせます。

MID関数で必要な部分を取り出し、FIND関数とLEN関数で抽出に必要な位置や文字数を求めます。

MID関数

=MID(文字列,開始位置,文字数)

引数
文字列:抽出元の文字列またはセル
開始位置:抽出を始める文字の位置
文字数:開始位置から抽出する文字数

機能
文字列の指定した位置から、指定した文字数を抽出する関数

主な結果
12345-6789の1文字目から5文字 → 12345

MID関数で指定した位置から文字列を抽出する

セルA2に「12345-6789」が入力されている場合に、先頭から5文字を抽出するには、次の数式を入力します。

A2=12345-6789
=MID(A2,1,5)

結果:12345

文字列にはセルA2、開始位置には先頭を表す「1」、文字数には「5」を指定しています。

セルA2の1文字目から5文字が抽出され、結果に「12345」が表示されます。

=MID(A2,1,5)の解説

すべてのデータでハイフンより前が5文字であれば、この数式をそのまま使用できます。

しかし、ハイフンの位置が3文字目や6文字目などに変わる場合は、文字数を「5」に固定すると正しく抽出できません。

MID関数の基本的な使い方や引数は、「MID関数の使い方|Excelで文字列の途中から文字を取り出そう」で詳しく解説しています。

FIND関数でハイフンの位置を調べる

FIND関数

=FIND(検索文字列,対象)

引数
検索文字列:位置を調べたい文字
対象:検索する文字列またはセル

機能
指定した文字が、対象の文字列の何文字目にあるかを求める関数

主な結果
12345-6789の「-」 → 6

セルA2の文字列でハイフンが何文字目にあるか調べる場合は、次の数式を入力します。

A2=12345-6789
=FIND("-",A2)

結果:6

検索文字列には位置を調べるハイフン、対象にはセルA2を指定しています。

FIND関数の説明

「12345-6789」のハイフンは6文字目にあるため、結果に「6」が表示されます。

ハイフンも1文字として数える

「12345-6789」は、数字だけでなくハイフンも1文字として数えます。

そのため、先頭から5文字の「12345」に続くハイフンは、6文字目になります。

LEN関数で文字列全体の長さを調べる

LEN関数

=LEN(文字列)

引数
文字列:文字数を調べたい文字列またはセル

機能
指定した文字列に含まれる文字数を求める関数

主な結果
12345-6789 → 10文字

セルA2に入力された文字列全体の文字数を調べる場合は、次の数式を入力します。

A2=12345-6789
=LEN(A2)

結果:10

「12345-6789」は、数字が9文字、ハイフンが1文字あるため、結果に「10」が表示されます。

この文字数からハイフンの位置を引くと、ハイフンより後ろにある文字数を求められます。

3つの関数の役割

MID関数
指定した位置から必要な文字数を抽出する

FIND関数
ハイフンが何文字目にあるかを求める

LEN関数
文字列全体が何文字あるかを求める

文字数が異なるデータでは、FIND関数とLEN関数で抽出に必要な位置や文字数を求め、その結果をMID関数へ指定します。

まずは、FIND関数で求めたハイフンの位置を使い、ハイフンより前の文字列を抽出しましょう。

ハイフンより前の文字列を抽出する

ハイフンより前の文字列を抽出するには、FIND関数でハイフンの位置を求め、その1文字前までをMID関数で取り出します。

ハイフンの位置が変わっても、FIND関数の結果も変わるため、同じ数式で対応できます。

FIND関数で抽出する文字数を求める

セルA2に「12345-6789」が入力されている場合、FIND関数でハイフンの位置を求めると「6」が返されます。

A2=12345-6789
=FIND("-",A2)

結果:6

FIND関数が返した「6」をそのまま文字数へ指定すると、6文字目のハイフンも抽出されます。

ハイフンを除外するため、FIND関数の結果から「1」を引きます。

ハイフンの前半部分の文字数
=FIND("-",A2)-1

結果:5
「-1」はハイフンを除外するため

「12345-6789」のハイフンは6文字目にあります。

ハイフンより前は5文字なので、ハイフンの位置を表す「6」から「1」を引いて、抽出する文字数を「5」にします。

何番目かをFIND関数で求めただけなのに何故文字数を特定できたかは下画像の通りです。

番目と個数の解説

MID関数でハイフンの1文字前まで抽出する

FIND関数で求めた文字数を、MID関数の「文字数」へ指定します。

=MID(A2,1,FIND("-",A2)-1)
=MID(A2,1,FIND(“-“,A2)-1)の内訳

=MID(文字列,開始位置,文字数)

文字列:A2
開始位置:1
文字数:FIND(“-“,A2)-1

結果:12345

MID関数とFIND関数でハイフンより前の文字列を抽出する仕組み
FIND関数でハイフンの位置を求め、その1文字前までをMID関数で抽出します。

セルA2の1文字目から、ハイフンの1文字前までを抽出しています。

計算結果には、ハイフンより前の「12345」が表示されます。

文字数が異なるデータでも抽出できる

FIND関数は、データごとにハイフンの位置を調べます。

そのため、ハイフンより前の文字数が異なっても、同じ数式で抽出できます。

抽出例
12345-6789 → 12345
123-456789 → 123
ABCDE-123 → ABCDE
A12-34567 → A12

複数のデータを処理する場合は、最初のセルへ数式を入力し、オートフィルで下のセルへコピーします。

数式を複数のセルへコピーする方法は、「Excelのオートフィルの使い方」で詳しく解説しています。

同じ数式で様々な区切りの文字列に対応させている例
文字列にハイフンがないとエラーになる

FIND関数は、対象の文字列にハイフンが見つからない場合、「#VALUE!」エラーを返します。

今回の数式は、すべてのデータにハイフンが1つ含まれていることを前提に使用してください。

ハイフンより前を抽出する場合は、1文字目からハイフンの1文字前までをMID関数で取り出します。

次は、FIND関数とLEN関数を使い、ハイフンの次の文字から末尾までを抽出しましょう。

ハイフンより後ろの文字列を抽出する

ハイフンより後ろの文字列を抽出する場合は、FIND関数で求めたハイフンの位置に「1」を足し、その次の文字を開始位置にします。

抽出する文字数は、LEN関数で求めた文字列全体の長さから、ハイフンの位置を引いて求めます。

FIND関数で抽出の開始位置を求める

セルA2の「12345-6789」では、ハイフンは6文字目にあります。

A2=12345-6789
=FIND("-",A2)

結果:6

ハイフンより後ろを抽出するには、ハイフン自体を除外し、その次の文字から抽出を始めます。

FIND関数の結果に「1」を足すと、ハイフンの次にある「6」の位置を求められます。

抽出の開始位置
A2=12345-6789
=FIND("-",A2)+1

結果:7
「+1」はハイフンの次から抽出するため

「12345-6789」のハイフンは6文字目です。

ハイフンより後ろは7文字目から始まるため、FIND関数の結果に「1」を足します。

=FIND("-",A2)+1の解説

LEN関数で抽出する文字数を求める

「12345-6789」は、ハイフンを含めて全部で10文字です。

文字列全体の10文字からハイフンの位置である6を引くと、ハイフンより後ろの文字数である4を求められます。

A2=12345-6789
=LEN(A2)

結果:10
ハイフンより後ろの文字数
A2=12345-6789
=LEN(A2)-FIND("-",A2)

結果:4
=LEN(A2)-FIND("-",A2)の解説

MID関数でハイフンの次から末尾まで抽出する

FIND関数で求めた開始位置と、LEN関数とFIND関数で求めた文字数をMID関数へ指定します。

=MID(A2,FIND("-",A2)+1,LEN(A2)-FIND("-",A2))
=MID(A2,FIND(“-“,A2)+1,LEN(A2)-FIND(“-“,A2))の内訳

=MID(文字列,開始位置,文字数)

文字列:A2
開始位置:FIND(“-“,A2)+1
文字数:LEN(A2)-FIND(“-“,A2)

結果:6789

MID・FIND・LEN関数でハイフンより後ろの文字列を抽出する仕組み
ハイフンの次を開始位置にし、文字列全体の長さからハイフンの位置を引いて抽出する文字数を求めます。

ハイフンの次にある7文字目から、文字列の末尾までにある4文字を抽出しています。

計算結果には、ハイフンより後ろの「6789」が表示されます。

文字数が異なるデータでも抽出できる

FIND関数とLEN関数の結果は、文字列の長さやハイフンの位置に合わせて変わります。

そのため、ハイフンより後ろの文字数が異なっても、同じ数式で末尾まで抽出できます。

抽出例
12345-6789 → 6789
123-456789 → 456789
ABCDE-123 → 123
A12-34567 → 34567

複数のデータを処理する場合は、最初のセルへ数式を入力し、オートフィルで下のセルへコピーします。

数式を複数のセルへコピーする方法は、「Excelのオートフィルの使い方」で詳しく解説しています。

ハイフンより後ろを抽出する場合は、ハイフンの位置に1を足して開始位置を求め、文字列全体の長さからハイフンの位置を引いて文字数を求めます。

まとめ|区切り位置を求めて文字列を抽出しよう

文字数やハイフンの位置が異なる場合は、FIND関数とLEN関数で抽出に必要な位置や文字数を求め、MID関数へ指定します。

数式内の位置や文字数を固定せず、文字列ごとにハイフンの位置を調べることで、同じ数式を複数のデータへ使用できます。

ハイフンの前後を抽出する数式

ハイフンより前を抽出する
=MID(A2,1,FIND(“-“,A2)-1)

ハイフンより後ろを抽出する
=MID(A2,FIND(“-“,A2)+1,LEN(A2)-FIND(“-“,A2))

MID関数:指定した位置から必要な文字数を抽出する
FIND関数:ハイフンが何文字目にあるかを求める
LEN関数:文字列全体の文字数を求める

ハイフンより前を抽出する場合は、1文字目からハイフンの1文字前までを取り出します。

ハイフンより後ろを抽出する場合は、ハイフンの次を開始位置にし、文字列全体の長さからハイフンの位置を引いて抽出する文字数を求めます。

各式のまとめ
区切り文字を統一する

今回の数式は、すべての文字列に半角のハイフン「-」が1つ含まれていることを前提にしています。

全角の長音「ー」や全角ハイフンなどが混在している場合は、FIND関数で同じ文字として検索できません。

数式を使用する前に、区切り文字が統一されていることを確認してください。

MID関数の引数や、開始位置と文字数を直接指定する基本的な使い方は、「ExcelのMID関数で文字列を途中から抽出する方法」で確認できます。

文字列にハイフンが含まれていない場合は、FIND関数によって「#VALUE!」エラーが表示されます。

数式のエラーが解消しない場合は、「Excelのエラー表示一覧」で原因と直し方を確認してください。

勇者たんたん
勇者たんたん

ハイフンの位置を調べて、その結果をMID関数の開始位置や文字数へ指定すればよいんですね!

複数の関数を組み合わせる場合は、内側の関数から順番に計算結果を確認すると、数式の仕組みを理解しやすくなります。

文字列を扱う関数や、関数の組み合わせ方を基本から順番に学びたい場合は、Level3攻略フローから進めてください。

コメント

タイトルとURLをコピーしました