前回の記事<<Excel2013でファイル(ブック)の共有方法と共有解除する方法>>では、1つのExcelファイルを複数人で同時に更新する方法についてご紹介しました。
今回は、Excelで特定の文字列を抽出する関数について、ご紹介したいと思います。
■説明に使用したExcelのバージョン:Excel2013
目次
1.1 左から指定した文字ぶんを抽出する
1.2 指定した文字より左側を抽出する
2.1 右から指定した文字数ぶん抽出する
2.2 指定した文字以降を抽出する
1.文字列を先頭(左)から抽出する
1.1 左から指定した文字数ぶん抽出する
指定したセルに入力されている文字列の先頭(左)から指定した文字数ぶんだけ切り出して残したいという場合、「LEFT関数」または「LEFTB関数」を使用します。
LEFT(対象のセル, 文字数)
LEFTB(対象のセル, 文字数)
LEFT関数とLEFTB関数の違いは、文字数を「文字の数」でカウントするか「バイト数」でカウントするかの違いです。
■文字のバイト数とは
プログラミングを行う人にはおなじみですが「1文字に必要な枠の大きさ」のようなものです。英字や数字などの半角文字は1バイト、漢字やひらがななどの全角文字は2バイトの枠が使用されます。
文字の数で判定するLEFT関数では、「あいうえお」の左から5文字は「あいうえお」です。しかしバイト数で判定するLEFTB関数では、「あいうえお」の左から5バイトを切り出すと「あい」になります。なお本来5バイト目は「う」の前半になりますが、不完全な文字は切り捨ての対象になります。そのため「あいう」を対象にしたい場合は、「あいうえお」の左から6バイトを指定する必要があります。
対象が英数字など半角文字のみの場合、LEFTとLEFTBの結果は同じになります。
全角文字と半角文字が混ざっていた場合も同じく、LEFTは純粋に文字数を、LEFTBは半角文字を1バイト、全角文字を2バイトとして指定したバイト数だけカウントして切り出すように動きます。
1.2 指定した文字より左側を抽出する
セルによって切り出したい文字の文字数が異なる場合、固定値を指定することができないためこのままでは使えません。ですが切り出したい場所の目印となる文字や記号がある場合、その目印の位置を探してその値を指定することで、切り出しを行うことができます。
例えば、次のようなスペースで区切って「名字 名前」と入力されたセルから「名字」のみを切り出すことを考えるとします。この場合はスペースが目印になるので、その位置を探します。特定の文字や記号などの文字列の位置を探す場合、「FIND関数」を使用します。
なお目印が複数ある場合、FIND関数は左から検索して一番にヒットした場所を返し、二番目以降は無視されます。
FIND("目印の文字列", 対象のセル)
これをLEFT関数やLEFTB関数と組み合わせることによって、スペースの前までを切り出します。FIND関数でスペースの位置を調べたので、そのマイナス1までが必要な部分となります。
LEFT(対象のセル, FIND("目印の文字列") -1)
2.文字列の末尾(右)から抽出する
2.1 右から指定した文字数ぶん抽出する
指定したセルに入力されている文字列の末尾(右)から指定した文字数ぶんだけ切り出して残したいという場合、「RIGHT関数」または「RIGHTB関数」を使用します。
RIGHT関数とRIGHTB関数の使い方の違いはLEFT関数とLEFTB関数の関係と同様であり、使い方も関数名以外は同じです。
RIGHT(対象のセル, 文字数)
RIGHTB(対象のセル, 文字数)
LEFTの例と同じセルに対してRIGHTに置き換えてみると、LEFTと同じパターンで右から抽出対象になります。
2.2 指定した文字以降を抽出する
右から指定した文字までを抽出したい場合も、左からと同様にFIND関数を使用します。
先ほどの例をベースに、今度は「名字 名前」というセルから「名前」のみを切り出してみます。ただし今回は、LEFTの場合と違って文字の位置を抽出するFINDをそのまま使用することはできません。そのため、全体の文字数から見つけた文字位置を引くことで、見つけた文字位置以降に何文字あるのかを調査して指定する必要があります。
文字数の調査には、「LEN関数」を使用します。
RIGHT(対象のセル, LEN(対象のセル) - FIND("目印の文字列"))
このように全体の文字数と目印の位置の差分を調べることで、右から必要な文字数を求めて切り出すことができました。
3.文字列の中間を抽出する
3.1 固定の場所から指定した文字数ぶん抽出する
文字列を先頭からでも末尾からでもない中間を切り出したい場合は、「MID関数」を使用します。
MID(対象のセル, スタートの文字位置, 文字数)
MIDB(対象のセル, スタートの文字位置, 文字数)
MID関数は、スタートの位置が固定でなくなった以外はLEFT関数と全く一緒です。「スタートの文字位置=1」のMID関数は、イコールLEFT関数になります。
なお文字位置は、文字が並んでいる順番です。つまり1文字目は1番、2文字目は2番に該当し、例えば2文字目から5文字ぶん切り出したいという場合は、次のように指定します。
MID(対象のセル, 2, 5)
そのほかMIDとMIDBの関係や、全角文字の途中までを指定した場合の動きは、LEFTやRIGHTと同じです。
図のように切り出す文字数が足りない(全体で5文字しかないのに、2文字目から5文字ぶんを対象としたなどの)場合、存在する分だけ切り出されます。
3.2 ある文字Aからある文字Bまでの間を抽出する
指定した目印Aから指定した目印Bまでの間の文字列を抽出したい場合、必要なのは開始位置として「目印Aの位置」と、「目印Aと目印Bの間の文字数」です。
まず「目印Aの位置」を、FIND関数を用いて調べます。
Aの位置 = FIND("目印A", 対象のセル)
次に「目印Aと目印Bの間の文字数」は、「目印Bの位置 - 目印Aの位置 -1」で求められます。
AB間の文字数 = FIND("目印B", 対象のセル) - FIND("目印A", 対象のセル) -1
これらを組み合わせてMID関数に当てはめると、次のように表すことができます。
MID(対象のセル
, FIND("目印A", 対象のセル)+1
, FIND("目印B",対象のセル) - FIND("目印A",対象のセル) -1)
このように開始位置と終了位置の差分を調べることで、その間を切り出すことができました。
4.指定した文字列以外を抽出する
4.1 指定した文字列を削除する
指定した文字列以外を抽出することは、指定した文字列を削除することと同義です。指定した文字列の削除には、文字を置換することができる「SUBSTITUTE関数」を応用することができます。
SUBSTITUTE関数は本来、次のように置換前の文字列と置換後の文字列を指定して、文字列の置き換えを行う関数です。
SUBSTITUTE(対象のセル, "置換前の文字列", "置換後の文字列")
この置換後の文字列を空白文字「""」にすることにより、文字の削除と同等の処理を行うことができます。
SUBSTITUTE(対象のセル, "削除したい文字列", "")
図のように置き換えだけでなく、削除にも使うことができました。
5.まとめ
Excelで実現できるいろいろな文字列抽出の方法について、いかがでしたでしょうか。
次回はExcelで正規表現を使用できるようになるアドインの導入方法について、詳しくご紹介したいと思います。
よければ合わせてご覧下さい。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら