概要
「ハイフンの手前だけ欲しい」
「@ の前のユーザー名だけ取りたい」
「’ID:12345′ から ‘ID:’ を除いた前半だけ取りたい」
こういう「指定した文字より前だけを取り出したい」ときに使える定番パターンが
LEFT + FIND の組み合わせです。
考え方はシンプルで、
- FIND で「指定文字が何文字目か」を調べる
- LEFT で「その1文字手前まで」を切り出す
という 2 ステップです。
基本の考え方とテンプレート
まずは型から覚えると楽です。
=LEFT(対象文字列, FIND(区切り文字, 対象文字列) - 1)
対象文字列
分割したい元の文字列が入ったセルです(例:A2)。
区切り文字
「ここより前を取りたい」という基準になる文字です。
代表例は「-」「@」「スペース」「/」など。
FIND(区切り文字, 対象文字列)
指定した文字が「左から何文字目にあるか」を返します。
その 1 つ前までを取りたいので、- 1 をして LEFT の第 2 引数(文字数)に渡します。
基本パターン:ハイフンの前を取得する
A2 に「ABC-123」という文字列が入っているとします。
この「-」より前、「ABC」だけを取り出したい場合は次のように書きます。
=LEFT(A2, FIND("-", A2) - 1)
FIND(“-“,A2) は 4 を返すので、4−1=3 文字 → 「ABC」が取り出されます。
この「区切りの1つ手前まで」を LEFT で取る、という考え方が基本です。
応用1:メールアドレスのユーザー名を取り出す
メールアドレスから「@ の前だけ」取りたいのも、まったく同じ型です。
A2 に「user@example.com」が入っているとします。
ユーザー名「user」だけ欲しい場合。
=LEFT(A2, FIND("@", A2) - 1)
FIND(“@”,A2) が @ の位置(今回は 5)を返し、
5−1=4 文字 → 「user」が取り出せます。
応用2:ラベル付き文字列の「ラベル以外の前半」を取る
「ID:12345」のように、
ラベル+本体の形式で入っているデータから、
ラベルの前(実質的には「ラベルの一部」)を取ることもできます。
ただ、現実的には「ラベルの前」より「ラベルの後ろ」が欲しいことが多いので、
ここでは「区切り文字の前」を取るというパターンの理解に集中しましょう。
たとえば A2 に「商品A/分類X」のような文字列があり、
「/」より前だけ(商品名)を取得したいとき。
=LEFT(A2, FIND("/", A2) - 1)
結果は「商品A」です。
応用3:スペースの前を取得して「姓だけ」取り出す
氏名が「姓+スペース+名」の形式になっている場合、
スペースの前だけ取ることで「姓」だけを切り出せます。
A2 に「山田 太郎」が入っているとして、
スペースより前、「山田」だけ欲しい場合。
=LEFT(A2, FIND(" ", A2) - 1)
FIND(” “,A2) でスペースの位置を取得し、その手前までを LEFT で取ります。
このテクニックは「区切りがスペースのときの姓抽出」の定番です。
応用4:FIND の特徴(大文字小文字を区別)に注意
FIND は「大文字小文字を区別する」検索なので、
例えば “X” を探すときに “x” はヒットしません。
区切り文字が記号(@ や – や /)の場合には問題になりませんが、
アルファベットを区切りとして使うときは「大文字・小文字」が一致しているか意識してください。
もし大文字小文字を無視して検索したい場合は、
SEARCH 関数を使って同じパターンにできます。
=LEFT(A2, SEARCH("x", A2) - 1)
エラー対策:区切り文字がないとき
FIND は、区切り文字が存在しないと #VALUE! エラーになります。
「なければ元の文字列のまま返したい」などの場合は、IFERROR と組み合わせます。
=IFERROR(LEFT(A2, FIND("-", A2) - 1), A2)
「-」があればその前までを返し、
なければ A2 そのものを返します。
区切りが必ずあるとは限らない実務データでは、この書き方をよく使います。
例題
問題1
A2 に「ABC-123」という文字列が入っています。
この中で、ハイフン「-」より前の文字列「ABC」だけを取り出す式を書いてください。
=LEFT(A2, FIND("-", A2) - 1)
問題2
A2 に「user@example.com」というメールアドレスが入っています。
@ の前のユーザー名「user」だけを取り出す式を書いてください。
=LEFT(A2, FIND("@", A2) - 1)
問題3
A2 に「山田 太郎」という氏名が入っています(姓と名の間は半角スペース)。
スペースより前の「姓」だけを取り出す式を書いてください。
=LEFT(A2, FIND(" ", A2) - 1)
問題4
A2 に「商品A/分類X」という文字列が入っています。
「/」より前の「商品A」だけを取り出す式を書いてください。
=LEFT(A2, FIND("/", A2) - 1)
問題5
A2 にコードが入っています。
ハイフン「-」がある場合は、その前の部分だけを取り出し、
ハイフンがない場合は A2 の値をそのまま返したいです。
LEFT・FIND・IFERROR を使った式を書いてください。
=IFERROR(LEFT(A2, FIND("-", A2) - 1), A2)
「指定文字より前を取得 → LEFT+FIND」の本質は、この一行に集約されます。
=LEFT(文字列, FIND(区切り文字, 文字列) - 1)
この型さえ覚えておけば、「- の前」「@ の前」「スペースの前」など、
実務でよくある「○○の手前だけ欲しい」処理はかなりの部分をカバーできます。
