今回は特定の文字列のみ抜き出す方法を紹介したいと思います。
特定の文字列のみ抜き出す方法
今回は例として以下のようなシートを使って説明していきます。

元データ列に「時給1,000円」や「時給1,000円~1,500円」のように入っています。
ここから最低給与額と最高給与額(あれば)をそれぞれ数字部分だけ抜き出していきたいと思います。

最低給与額を抜き出す方法
初めに最低給与額を抜き出す方法を説明します。
・・・の前に簡潔に自分なりの抜き出す際の考え方について紹介します。
もしよければご覧ください。
抜き出す際の考え方
まず前提として、最低給与額は共通して「給」と「円」の間に入っています。
その為
- 「給」の位置を検索し数値を取得
- 「円」の位置を検索し数値を取得
- 「円」の位置の数値を「給」の位置の数値で引く
をすることで最低給与額を抜き出すことができます。
- 何の情報が欲しいか
- 共通する形式は何か
- 手動でどうやっているか
といった感じでやりたいことや現在の状況を言語化すると、どんな関数を組めばいいかが明確になるので是非参考にしていただければと思います!
関数の紹介
それでは実際に最低給与額を抜き出す関数を紹介します。
例としてB3セルの「時給1,000円」から抜き出してみます。

最低給与額を抜き出す関数は以下の通りです。
実行してみると数字の部分だけ抜き出せているのが分かると思います。

ちなみにB4セルの「時給1,000円~1,500円」に対して実行しても同じように抜き出し可能です。

関数の解説
次に関数について解説していきたいと思います。
今回MID関数とFIND関数を使用しています。
詳しい説明は割愛しますが、MID関数は指定した数だけ文字列を抜き出す関数で、FIND関数は指定した文字列が何番目にあるかを返す関数といった感じです。
ポイントになるのはFIND("給",B3)+1
とFIND("円",B3)-FIND("給",B3)-1
の部分です。
まずFIND("給",B3)
でB3セル内の「給」の位置を取得します。
「時給1,000円」での「給」の位置は2番目なので2が取得できます。
ここで

なんで1を足してるの?
と思う方もいると思います。
これは実際に1を足さずに実行すると分かりますが、足さないと「給」の文字まで引っ張ってしまう上に抜き出し文字がズレてしまうからです。

その為、FIND("給",B3)
の後に1を足すことで不要な文字を抜き出さないようにしているわけです。

次にFIND("円",B3)-FIND("給",B3)-1
でB3セル内の「円」の位置と数字部分の長さを取得します。
「時給1,000円」での「円」の位置は8番目なので8が取得できます。
次に数字の部分だけ取得する為に数字の長さも取得します。
数字の部分はカンマも含め5になる為、取得するには「円」の位置から「給」の位置を引けば求められます。
しかし「円」の位置から「給」の位置を引くと6になってしまい、不要な「円」の部分も抜き出してしまいます。

欲しいのは数字の部分なので、FIND("円",B3)-FIND("給",B3)
から1を引くことで「円」を抜き出さないようにできるわけです。

・・・とこんな感じで最低給与額を抜き出すことが出来るわけです。
一度にまとめて見るとゴチャゴチャになりますが、一つずつ分けて見てみると割と仕組みは単純です。
一応、FIND部分を数字に直すとこんな感じです(B3セルの場合)。
最高給与額を抜き出す方法
次に最高給与額を抜き出す方法を説明します。
前提として、形式が「時給****円~****円」のように「~」が含まれているものを対象とします。
関数の紹介
それでは実際に最高給与額を抜き出す関数を紹介します。
例としてB4セルの「時給1,000円~1,500円」から抜き出してみます。

最高給与額を抜き出す関数は以下の通りです。
実行してみると「~」の後ろの数字の部分だけ抜き出せているのが分かると思います。

関数の解説
次に関数について解説していきたいと思います。
と言っても基本は最低給与額の時とほぼ一緒で、抜き出し位置が「給」→「~」になった程度でそこまで大きな違いはありません。
ポイントになるのは数字の長さを取得するFIND("円",B4,FIND("~",B4))-FIND("~",B4)-1
の部分です。
気づく方もいらっしゃると思いますが、最初のFINDの引数(カッコの中の値のこと)が3つあるのが分かるかと思います。

最低給与額の時は2つでよかったのに、最高給与額は3つ必要なの?
と思う方もいると思います。
これは文字列内に「円」が2つ存在している為です。

ご覧の通り#VALUE!
エラーが発生していますが、これはFIND("円",B4)-FIND("~",B4)-1
した結果がマイナス値になってしまっている可能性があるからです。
というのもFIND関数は引数を最大3つまで指定することが出来、3つ目は検索開始位置を指定することが出来ます。
なお、この引数は省略することが可能です。

検索開始位置とは読んで字のごとく「検索を開始する位置」のことを指し、例えば4を指定すれば4文字目から後ろの文字列が検索範囲になる、といった感じです。
ここで注意したいのがこの引数が省略可能な所であり、今回の例のように検索し値を取得した後に計算をする場合は特に気を付けないといけません。
この引数を省略すると自動で1が設定され、文字列全体が検索範囲になります。
そうすると初めに見つかる「円」が「~」より前のものになってしまう為、引き算した時にマイナス値になってしまい#VALUE!
エラーが発生してしまう、という訳です。
なので3つ目の引数にFIND("~",B4)
を指定することで、「~」より後ろの範囲を検索することが出来ます。

・・・といった具合で最高給与額を抜き出すことが出来るわけです。
一応、FIND部分を数字に直すとこんな感じです(B4セルの場合)。
とは言っても、FIND関数の3つ目の引数は今回のように「特定の範囲内で検索したい」時以外は指定しなくても大丈夫なので、基本は省略しちゃっても問題ないと思います。
まとめ
今回は特定の文字列のみ抜き出す方法を紹介しました。
特定の範囲の文字列を取得したい時はFIND関数とMID関数を組み合わせると取得することができるので是非慣れておきましょう!
このブログではExcelやVBA等のお役立ち情報を不定期で投稿していますので、是非参考にしていただければと思います!
コメント