いつも忘れるのでメモします。
エクセルで特定の文字の前までを取り出す、特定の文字以降を取り出す方法です。
特定の文字の前までを取り出す
やりたいこと
下記のような文字列がたくさんあって、カッコの前まで取り出したい場合
お知らせ(23)
日記(384)
お詫び(2564)
猫(15048)
↓ こうしたい
お知らせ
日記
お詫び
猫
書き方(A1に文字列がある例)
=LEFT(A1,FIND("(",A1)-1)
説明
LEFTは先頭から指定されたところまで取り出せる関数。
LEFT(文字列, 文字数)
=LEFT("お知らせ(23)", 4)
とすると、先頭から4文字目までの「お知らせ」が取り出せる。
FINDは検索した文字が文字列の何番目に最初に出てくるかを取り出せる関数。
FIND(検索文字列, 対象, [開始位置])
=FIND("(", "お知らせ(23)")
とすると ( がある位置は先頭から5文字目なので「5」が取り出せる。
=LEFT(A1,FIND("(",A1)-1)
よって、FINDで ( が最初に出てくる場所を取り出して
そこからマイナス1して ( の1つ前の場所の文字数を指定してあげて
LEFTでその文字数までを取り出す
という仕組みになっていることがわかる。
余談
=FIND("(", "お知らせ(23)お知らせ(23)", 9)
とすると、検索開始位置が9文字目(ここでは2番目の お )からになり
最初の ( は、検索範囲に入らなくなる。
つまり、9文字目以降で ( がある位置は先頭から13文字目なので
「13」が取り出せる。
余談2
お知らせ(1)(23)
お知らせ(2)(23)
日記(3)(384)
とかあって、(1)(2)(3)は残したいときはちょっと困ることになる。
どうしたらいいかはまた機会があった時にでも調べる。
コメントで教えていただいたので追記します。
=LEFT(A1,FIND("(",A1,FIND("(",A1)+1)-1)
とすると、検索開始位置を ( が最初に出てきた場所の次の場所に指定することができる。
余談3
お知らせ\(^o^)/(1)(23)
お知らせ((((;゚Д゚))))(2)(168)
とかあって、最後の ( より前を取り出したい場合は・・・
複雑なので次の投稿で書きます。→エクセルで特定の文字の前までを取り出す 応用編
特定の文字以降を取り出す
やりたいこと
下記のような文字列がたくさんあって、カッコ以降のみ取り出したい場合
お知らせ(23)
日記(384)
お詫び(2564)
猫(15048)
↓ こうしたい
(23)
(384)
(2564)
(15048)
書き方(A1に文字列がある例)
=RIGHT(A1,LEN(A1)-(FIND("(",A1)-1))
説明
RIGHTは末尾から指定されたところまで取り出せる関数。
RIGHT(文字列, 文字数)
=RIGHT("お知らせ(23)", 4)
とすると、末尾から4文字目までの「(23)」が取り出せる。
LENは文字列の長さを取り出せる関数。
LEN(文字列)
=LEN("お知らせ(23)")
とすると文字数「8」が取り出せる。半角とか全角とか関係ナシ。
=RIGHT(A1,LEN(A1)-(FIND("(",A1)-1))
よって、
FINDで ( が最初に出てくる場所からマイナス1して ( の1つ前の
場所(ここでは せ)を指定してあげて、
それをLENで取り出した全体の文字数から引くと
残りの ( 以降の文字数が取り出せるので
RIGHTでその文字数までを取り出す
という仕組みになっていることがわかる。