前回の続きです。
エクセルで特定の文字の前までを取り出す方法の応用編です。
Yahoo知恵袋がとても参考になりました。こちらでは、特定の最後の文字以降を取り出す場合が書かれています。ありがたいです。
特定の文字の前までを取り出す 応用編
やりたいこと
下記のような文字列がたくさんあって、最後の ( の前まで取り出したい。
お知らせ\(^o^)/(23) がんばった((o(´∀`)o))(16) 楽しい日記ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ(168) 怖い日記((((;゚Д゚))))(2005)
↓ こうしたい
お知らせ\(^o^)/ がんばった((o(´∀`)o)) 楽しい日記ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ 怖い日記((((;゚Д゚))))
書き方(A1に文字列があり★は文字列の中に出てこない前提での例)
=LEFT(A1,FIND("★",SUBSTITUTE(A1,"(","★",LEN(A1)-LEN(SUBSTITUTE(A1,"(",""))))-1)
説明
SUBSTITUTE(A1,"(","")
SUBSTITUTEは文字列のなかの特定の文字を違う文字に置換できる関数。
SUBSTITUTE(文字列,検索文字列,置換文字列,[置換対象])
(例)A1が がんばった((o(´∀`)o))(16) の場合
( が無くなり、 がんばったo´∀`)o))16) という文字列となる
LEN(A1)-LEN(SUBSTITUTE(A1,"(",""))
LENは指定した文字列が何文字あるかを取り出せる関数。
ここでは元の文字列の文字数から、( を無くした文字列の文字数を引いている。
つまり、元の文字列に ( がいくつあるか、わかる。
(例)A1が がんばった((o(´∀`)o))(16) の場合
元の文字列 がんばった((o(´∀`)o))(16) の文字数は 20
( を無くした がんばったo´∀`)o))16) の文字数は 16
20 - 16 = 4
元の文字列に ( は4つあることがわかった。
SUBSTITUTE(A1,"(","★",LEN(A1)-LEN(SUBSTITUTE(A1,"(","")))
長い・・・
前の項で LEN(A1)-LEN(SUBSTITUTE(A1,"(",""))
は 4 と
なった例があるので 例として SUBSTITUTE(A1,"(","★",4)
を次で取り上げることにする。
SUBSTITUTE(A1,"(","★",4)
SUBSTITUTEは文字列のなかの特定の文字を違う文字に置換できる関数。
SUBSTITUTE(文字列,検索文字列,置換文字列,[置換対象])
[置換対象] というのは、置換する文字の場所の指定ができる。
何も書いていなければ、検索文字すべてが置換されるが
2 だと、検索文字が2番めに出てくるもののみが置換される。
3 だと、検索文字が3番めに出てきたもののみが置換される。
さきほどの例で ( の文字数が取り出せたので
[置換対象] にその文字数を入れてやると
検索文字の最後のもののみ置換される。
(例)A1が がんばった((o(´∀`)o))(16) の場合
4番めに出てきた ( のみ ★ に置換するので
がんばった((o(´∀`)o))★16) という文字列となる。
FIND("★","がんばった((o(´∀`)o))★16)")
ここも例を生かして説明する。
FINDは検索した文字が文字列の何番目に最初に出てくるかを取り出せる関数。
FIND(検索文字列, 対象, [開始位置])
この場合は、17番目に出てくるので、17 が取り出せる。
LEFT(A1,17-1)
LEFTは先頭から指定されたところまで取り出せる関数。
LEFT(文字列, 文字数)
17番目に出てきた★からマイナス1して16、これが★の前までの文字数。
LEFTで先頭から16文字目までを取り出せる。
がんばった((o(´∀`)o))
が取り出せました!