Excel 文字列抽出の関数 LEFT・RIGHT・MID

Excel これができなきゃ給料泥棒

スポンサーリンク

はじめに

今回の記事では、Excelで文字列を抽出するための代表的関数であるLEFT・RIGHT・MIDを紹介する。
これらを知り、また使いこなすことができなければ給料泥棒だ。

と言っても多分、貴方の職場でも10人に1人か2人くらいしか使えてないのではと思うが、如何だろうか。

正確に使いこなせるようになって、一味も二味も違うExcel使いになり、周囲と差をつけよう。

以前に書いた、文字列を結合する「&」演算子と合わせて、必ずマスターすること。

Excel 文字列を結合するのは「&」で。それだけだ。

2018年9月10日

大まかなイメージ

理屈で色々と解説を書く前に、各関数を使った時の結果をザッと上図に示した。

今回紹介する文字列関数は全て、文字数の情報が絡んでくる。
そして共通して、

関数の末尾に「B」を付けた場合は、半角バイト数で文字数をカウントする。
末尾に「B」を付けなかった場合は、半角全角など関係なく単なる文字数をカウントする。

というように、文字数カウント方法について「B」文字により使い分けができる仕様だ。

文字のバイト数とか言われても分かりにくい人も多いかも知れないが、Twitterの利用者ならよくお分かりになるだろう。

現在のTwitterでは、半角英数字なら280文字(バイト)で、全角文字なら140文字という文字数制限があり、その範囲内に文字数を収め投稿するために奮闘しているはずだ。

半角全角といったことは、ExcelとかITとか以前の基本知識なので、これ以上ここでは述べないけど必ず知っておくように。

文字数を数えるLEN関数

まず、文字数を数えるLEN関数。LENとはLengthのことね。

    =LEN($A3)
    =LEN(“エクセル”)

のような形で、関数の中にはセル参照を入れるなり、直接に文字列を入れるなりして使う。

もっとも、直接に文字列を入れるなんてやり方は不細工なので、極力やらない方が良い。
原則として、セル参照や計算式を入れること。

そもそもExcelで文字列を示すときは
エクセル
のようにダブルクォーテーション文字“”で囲むということから分かっていないとしたら、かなりマズいので、即刻覚えるように。

で、例として、半角文字と全角文字が混在した
Excelで文字数を数えるLEN関数
という文字列にLEN関数とLENB関数を試したら、それぞれで結果が異なる。

単なる文字数なら18文字だけど、半角のバイト数で数えれば28文字となるわけだ。

左端からの文字列を取得するLEFT関数

次にLEFT関数。文字通り、左端からの文字列を取得する。

    =LEFT($A4,8)
    =LEFT(“Excelで左端からの文字列を取得するLEFT関数”,8)

のような形で使う。
=LEFT(文字列,文字数)
という構成だ。

例に示した「8」が、左から8文字分を取得するという文字数を示す引数だ。

この引数は必ず書くこと。省略したら「1」を埋めたのと同じ効果が自動で付くけど、正しい理解もせず省略する癖が付いてはいけないので、省略しないように。

で、LEFTとLEFTBの結果の違いも図示しておく。

「Excelで」というのが7バイトなわけだけど、8バイト取得するようLEFTBで指定しても切捨て判定して7バイトまでの取得で止めるようだ。

右端の文字列を取得するRIGHT関数

次にRIGHT関数。文字通り、右端からの文字列を取得する。

    =RIGHT($A5,7)
    =RIGHT(“Excelで右端の文字列を取得するRIGHT関数”,7)

のような形で使う。LEFT関数と同様、
=RIGHT(文字列,文字数)
という構成だ。

RIGHTとRIGHTBの結果の違いは下図の通り。

開始位置を指定するMID関数

次にMID関数。
これは私としては使用頻度は少ない関数だけど、文字列について、左端から何文字目を開始位置として抽出を行うか指定できる

=MID(元の文字列,抜き出したい初めの文字が何文字目か,抜き出したい文字数)
という構成だ。

と言っても抜き出したい初めの文字が何文字目かは「あれ、この場合は4が正しいんだっけ?5だっけ?」と迷うことが私も多いし、抜き出したい文字数の部分は明確に何文字と予め決まっていないことが多い。

だから、次項で述べる複合技とも関係するが、MID関数はけっこう考え方がややこしくて簡単には使いこなしにくいのだ。

MIDとMIDBの結果の違いは下図の通り。

複合技:右端の文字数不定の文字列を取得したい

ここからは、実務で頻繁に生じると思われるけど、ここまで紹介した関数を単発で使っても意外と上手くいかない例題を挙げる。

まず次のように
4桁の数字 + 会社名(文字数不定)
という文字列が多数列挙されていて、4桁の数字を除いた会社名を抽出したいというのは、業務でもよくあることだろう。

    9842アークランドサカモト株式会社
    3076あい ホールディングス株式会社
    2198アイ・ケイ・ケイ株式会社
    4206アイカ工業株式会社

そういうとき、先述したMID関数を使って、<各文字列の5文字目から先を取得する>という処理を簡単に書けそうだが、実はそれは簡単にはできない。

MID関数はじめExcelの文字列抽出関数は、文字数が不定なものは苦手だ。

この例題に対する模範解答を2通り述べると、

    =MID($A1,5,LEN($A1)-4)
    =RIGHT($A1,LEN($A1)-4)

というようになる。


LEN($A1)-4
というのが、A1セルの文字数が30とすると、それから4を引いた26文字分というのを示していることになる。

そして

    MID→5文字目から開始して26文字を取得
    RIGHT→右端の26文字を取得

という理屈になり、ややこしいが最終的に結果は同じになる。

MID関数は、
MID(元の文字列,抜き出したい初めの文字が何文字目か,抜き出したい文字数)
という構成の中で「抜き出したい文字数」の部分をきっちり指定しないといけない関数であって、ここを不明のままにしておけない。

だから、こういうLEN関数なんかを組み合わせないといけないのだ。

ちょっとしたMID関数の裏技

ただ厳密に言うと、LEN関数を使わなくても済む技はある。
このMID関数において、「抜き出したい文字数」を、10000とかの有り得ないレベルで大きな数字にしてしまえばいい。

そうすれば、右端に何文字あろうとそれをオーバーさせてしまうことで、右端の文字を全て取得できることになる。

まあこんなのは本当に裏技だし、私もほぼ使わないけどね。

VBAのMidはちょっと違う

ちなみにこのMID関数に関連して、Excelのマクロ(VBA)の中でもワークシート関数ってやつでMidというのを使える。

これはちょっと仕様が違って、今回問題にした、右側の文字列不定な場合に普通に対応できる。

そう頻繁に使うものでもないと思うし、ここでは詳しく書かないけど、とりあえず下記の解説が分かるなら試してみよう。

VBEのイミディエイトウィンドウで
?MID(“9842アークランドサカモト株式会社”,5)
とでも入力しEnterキーを押してみよう。

Excelの通常関数のMIDとは違い、5文字目以降の右側の文字が正しく取得できるはずだ。

複合技:左端の文字数不定の文字列を取得したい

では次に、下記の会社名は全て右端4文字が「株式会社」で終わっているわけだけど、この「株式会社」を除いた名称を抽出するという例を考えてみよう。

    9842アークランドサカモト株式会社
    3076あい ホールディングス株式会社
    2198アイ・ケイ・ケイ株式会社
    4206アイカ工業株式会社

今度は左の一番端から文字列を取得すると決まっているので、開始位置を指定するMID関数は不要だからLEFT関数を使えば良い。

そして答えは

    =LEFT($A1,LEN($A1)-4)

というようになる。

今度はそれなりに分かりやすいかなと思う。
A1セルの文字の長さLEN($A1)から4文字分を除いて、左端から文字列抽出するというわけだ。

最後に

今回紹介した文字列抽出関数は、恐らく単独で使える場面は少ない。
LEN関数を中に組み入れた、複合技で使うことの方が多いだろう。

だからこそ、理解が半端な使い手が多いはずであり、周囲と差がつきやすい関数でもある。

時間が少し掛かるかも知れないが、応用範囲も広いはずなので、必ず自分のものにしよう。

スポンサーリンク