[エクセル上級] 文字列を特定の文字で分割
2018/04/07
文字列を特定の文字(列)や改行などで分割する関数です。
目次
n番目の位置,n-1番目の位置
今回の例では「/」で文字列を分割します。
3番目の文字列は、2番目と3番目の「/」に挟まれています。
n番目の文字列を検索
そこで、「n番目の文字列の検索」を使ってn番目とn-1番目の「/」の位置を探します。
これで両端の「/」の位置が分かりました。
最初と最後を探す時のための修正
3番目はうまく検索できましたが、1番目と最後を検索するときはうまくいきません。
1番目の「aaa」には左側の「/」(0番目)がありませんし、5番目の「eee」には右側の「/」(5番目)がありません。
IFERROR関数 などでエラーが発生したときを分岐してもいいのですが、ここではエレガント(?)に両端に「/」を付加することで解決させます。
文字が1文字ずれるため、結果からは1文字引いています。(1文字ではなく文字列を検索する場合は、1の代わりに文字数 LEN(A5) を引きます。)
MID関数 で該当文字列の抜き出し
最後に MID関数 で該当の文字列を抜き出します。
うまく3番目の文字列が抜き出せました!
応用編1 すべてバラバラに
分割してバラバラになった文字列をすべて列挙したいなら、「/」の位置を順に並べましょう。
セルE5: =FIND(CHAR(16),SUBSTITUTE(A&A&A,A,CHAR(16),C5))-1
セルE6: =MID(A,E5+1,E6-E5-1)
応用編2 1セルで抜き出し
ごちゃごちゃにはなってしまいますが、先ほど「/」の位置を調べていたセルの計算内容をそのまま埋め込んでしまえば、1セルで分割結果を取得できる関数を作ることができます。
セルF4: =MID(A$1,FIND(CHAR(16),SUBSTITUTE(A$3&A$1&A$3,A$3,CHAR(16),C4))-1+1,FIND(CHAR(16),SUBSTITUTE(A$3&A$1&A$3,A$3,CHAR(16),C5))-FIND(CHAR(16),SUBSTITUTE(A$3&A$1&A$3,A$3,CHAR(16),C4))-1)