Excelのセルに入力された文字列から、その一部分だけを取り出すには、LEFT関数、RIGHT関数、MID関数を使います。LEFTは左からの文字数を指定し、RIGHTは右からの文字数を指定します。MIDは途中の文字を取り出します。さらに、これら3つの関数を組み合わせることによって、文字を分割したり挿入したり判定をしたりすることができます。
これらの関数は、MOSの試験では一般レベルで出題され、文字列操作の基本的な関数に位置付けられています。そこで、今回はLEFT関数、RIGHT関数、MID関数の基本的な使い方と注意点について出題します。
目次
- 1.LEFT関数、RIGHT関数
- 2.LEFT、RIGHT関数の文字数
- 3.数値文字列を数値に変換する
- 4.文字数の統一と0埋め
- 5.LEFT・RIGHTを数値で使った場合の表示形式
- 6.MID関数
- 7.文字の挿入
- 8.MID関数の文字数
- 9.MID関数と数値化
- 10.MID関数を使った文字列分割
- 11.MID関数で整数値を文字に変換する
- 12.MID関数を使った判定
1.LEFT関数、RIGHT関数
(1)LEFT関数の使い方
問題
幹部社員の中から16名を選抜して名簿を作成した。役職の先頭から3文字を取り出しなさい。また、アカウントの頭文字を取り出しなさい。
解説
文字列の先頭(左)から数えて指定された文字数分だけ取り出す関数は、LEFT関数です。文字列と取り出す文字数を指定します。例えば、「総務部長」の先頭3文字は「総務部」ですが、LEFT関数で表すと「LEFT("総務部長",3)」となります。
- =LEFT(文字列,文字数)
- =LEFT("総務部長",3) ・・・総務部長の左3文字を取り出す
セルA2の文字列の先頭から3文字を取り出します。「=left(a2,3)」と入力します。
LEFT関数の挿入の画面を用いてもかまいません。
これで3文字だけ取り出すことができます。
頭文字は左から数えて1文字という意味です。「=left(b2,1)」と入力します。
LEFT関数は全角も半角も1文字とカウントして取り出します。
別解
LEFT関数の第2引数(文字数)を省略することができます。省略すると、「1」を指定したものとみなされます。つまり、頭文字の取得となります。
「=LEFT(B2)」と入力します。これで頭文字だけになります。
(2)RIGHT関数の使い方
問題
役職の右から2文字を取り出しなさい。また、アカウントの数値の部分を取り出しなさい。
解説
文字列の末尾(右)から数えて指定された文字数分だけ取り出す関数は、RIGHT関数です。文字列と取り出す文字数を指定します。例えば、「総務部長」の右の2文字は「部長」ですが、RIGHT関数で表すと「RIGHT("総務部長",2)」となります。
- =RIGHT(文字列,文字数)
- =RIGHT("総務部長",2) ・・・総務部長の右2文字を取り出す
LEFT関数とRIGHT関数の違いは、LEFTは左から取り出すのに対し、RIGHTは文字列の右から数えて取り出すことです。それ以外は同じです。
セルA2の文字列の末尾から2文字を取り出します。「=right(a2,2)」と入力します。
RIGHT関数の挿入の画面を用いてもかまいません。
これで2文字だけ取り出すことができます。
アカウントの数値の部分はすべて4文字であることが分かります。
「=RIGHT(B2,4)」と入力します。
これで数値の部分だけ取得することができます。
ちなみに「=RIGHT(B2)」とすると下1桁だけになります。文字数を指定しなければ1文字だけ取得します。
(3)LEFTとRIGHTの間に文字を入れる
問題
アカウントの数値4桁を取り出し、最初の2文字と後の2文字の間にスラッシュを入れなさい。
解説
まず、数値の部分だけを取得します。「=RIGHT(A2,4)」と入力します。
LEFT関数またはRIGHT関数で取り出した文字列を使って、さらにその一部分を取り出すこともできます。最初の2文字を取り出します。「=LEFT(B2,2)」と入力します。
さらに、スラッシュを連結するとともに「RIGHT(B2,2)」を連結します。「=LEFT(B2,2)&"/"&RIGHT(B2,2)」となります。左の2文字とスラッシュと右の2文字の計5文字の文字列となります。
このようにLEFT関数またはRIGHT関数で取り出した文字列を&で連結することによって新たな文字列を作り出すこともできます(参考:【Excel】文字列結合、スペース・改行・ダブルクォーテーションの連結)。
2.LEFT、RIGHT関数の文字数
(1)文字数の仕様
問題
セルA1に入力した文字列について、B列に入力した文字数だけ文字列を抽出したい。LEFT、RIGHT関数でそれぞれ取り出しなさい。
解説
LEFT関数、RIGHT関数はともに、取り出す文字列と文字数を指定します。LEFT関数でセルA1は絶対参照、セルB2は相対参照です。
文字数でマイナスの値を指定するとエラーになります。
文字数が0の場合は空白になります。
元の文字数が4文字で、4文字以上の文字数を指定すると元の文字列と同じになります。このように元の文字列以上の文字数を指定した場合、文字列全体が返されます。
このことはRIGHT関数も同じです。
(2)文字数が揃うとは限らない
問題
A列の文字列のうち、先頭から10文字目まで表示しなさい。
解説
左から10文字目までを取り出します。「=LEFT(A2,10)」と入力します。
左から10文字目までを取得しますが、元の文字列が9文字以下の場合は元の文字列と同じになります。LEFT関数やRIGHT関数は、指定した文字数までを取得しますが、指定文字数以下の場合はその文字数までとなります。したがって、文字数を指定したからと言って、必ずしも文字数が揃うとは限りません。
(3)補足説明:文字列操作を練習するときのフォントについて
游ゴシックやフォント名に「P」のつくフォント(プロポーショナルフォントという)は文字によって幅が異なるため、文字が縦に揃いません。そのため、文字数が数えにくいことがあります。RIGHT関数やLEFT関数のように文字数を指定する関数を練習するときには、「MSゴシック」など文字幅が統一されたフォント(等幅フォントという)を使用します。
3.数値文字列を数値に変換する
問題
A列の文字列のうち、数値の部分だけを取り出しなさい。ただし、数値の最初が0の場合は3桁で表示しなさい。
解説
数値の部分だけを取り出します。「=RIGHT(A2,4)」です。すべて4桁になります。
Excelでは通常、数値の先頭が0の場合は自動変換機能によって0が省略され3桁の数値になります。しかし、LEFT関数やRIGHT関数を使った場合、先頭の0は消えません。しかも左揃えのままです。これは数値ではなく、文字列として認識されているからです。これを「数字文字列」ということがあります。
RIGHT関数に1を掛けます。「=RIGHT(A2,4)*1」となります。これによって文字列と認識されたものが数値に変換され、先頭の0が消えるのと同時に右揃えになります。
別解
いっぱんに、Excelで文字列として認識されている数値文字列について、その直前又は直後に四則演算(足し算引き算掛け算割り算)があれば数値化されます。次のような演算をして数値化をします。
- 1を掛ける
- 0を足す
- 先頭にマイナスを2つ付ける(マイナス2つでプラスになる)
例えば、「=RIGHT(A2,4)+0」とすると数値化され先頭の0が消えます。
4.文字数の統一と0埋め
問題
16人の社員の氏名、社員番号を半角英数字で入力した。氏名は最長で9文字である。
(1)氏名の後に半角のアスタリスク(*)を付けてすべて9文字で統一しなさい。
(2)社員番号を5桁にしなさい。ただし、桁数が足りない場合は左に0を補いなさい。
解説
名字にアスタリスク9個を連結します。
- =A2&"*********"
この先頭の9文字を取り出します。「=LEFT(A2&"*********",9)」と入力します。これによって10文字目以降のアスタリスクが消えるため、結果としてアスタリスクで埋めたことになります。
特定の文字列で右側を埋めることによって文字数を揃えるには、右側に多めに文字を連結してから、LEFT関数で余分な文字列を削除します。
社員番号は3桁か4桁ですが、5桁にするためには最大で2桁足りません。そこで、左側に0を2つ連結します。
- ="00"&B2
右の5文字を取り出します。「=RIGHT("00"&B2,5)」と入力します。これで5桁になります。
特定の文字列で左側を埋めることによって文字数を揃えるには、左側に多めに文字を連結してから、RIGHT関数で余分な文字列を削除します。ちなみに、先頭に0を付けて桁数を揃えることをゼロ埋め(ゼロパディング)と言います。
5.LEFT・RIGHTを数値で使った場合の表示形式
(1)表示形式を変えるには数値化する
問題
A列に数値を入力した。LEFT関数で左から5文字を取り出した場合、表示形式を変えることができるか。また、LEFT関数で取り出した直後の文字列と、数値化したものは同じ値と言えるか。
解説
左から5文字を取り出します。「=LEFT(A2,5)」と入力します。
数値の場合もLEFT関数やRIGHT関数が使えます。通常は、LEFTは上から、RIGHTは下からの桁を取り出すことができます。
ただし、小数点やマイナスも1文字に含まれますので、小数点やマイナスがある場合、左から5文字を取り出しても、上から5桁になるわけではありません。必ず文字数で指示した通りの有効桁数になるわけではないので注意が必要です。
このとき、取り出した値は「文字列」であって数値ではありません。したがって、表示形式を変えることができません。カンマ桁区切りにすることはできませんし、通貨スタイル(円マーク)にすることもできません。
また、小数点数の表示桁数を変えることもできません。
これを数値化するには1を掛けます。
数値になりましたので、表示形式を変えることは可能です。
文字列と数値を比較します(参考:【Excel】IF関数が使えない原因は「比較演算」の練習不足である)。すべてFALSEになります。
Excelでは、LEFT関数やRIGHT関数で取り出した直後の文字列と、数値化したものは異なるものとして扱われます。
(2)表示形式は無関係
問題
A列にカンマ桁区切りの数値「98,765」と表示されている。RIGHT関数で右から4文字を取り出したところ、一方は「8765」となり、もう一方は「4321」となった。このようになる原因を述べなさい。
解説
3桁ごとに区切られるカンマは入力したものではなく書式(表示形式)です。表示形式によって表示されている文字は、LEFT関数やRIGHT関数で取り出すときの文字数には含まれません。このセルに保存されている値(数式バーの値)は「98765」であり、左の4文字は「9876」です。
「=987654321/10000」という数式が入力されています。計算結果は「98765.4321」で、整数値の表示になっているだけです。左の4文字は「4321」です。数式の場合は特に注意が必要です。
このように、表示形式の影響でセルに保存されている値と表示されているものが異なることがありますが、セルに表示されているものは無関係です。LEFT関数やRIGHT関数は、保存されている値(数式バーの値)から取り出されます。
(3)日付や時刻にLEFTやRIGHTを使ってはいけない
問題
日付を8桁で入力したセルがあり、LEFT関数を用いて左側の4文字を取り出すことによって西暦の部分を取り出すことができた。そこで、日付を入力したセルも同様にLEFT関数を用いたところ、西暦とは無関係の数値になった。このようになる原因を述べなさい。
解説
日付を8桁で入力している場合は単なる8桁の数値であり、LEFT関数を使うこともできます。しかし、日付がシリアル値として入力されている場合、セルに保存されているのは整数値のシリアル値です(参考:【Excel】日付の「シリアル値」を本気で理解するには何を練習するべきか?)。2020年11月23日のシリアル値は44158ですから、その左4文字である4415が取り出されます。
日付(時刻)の場合は、YEARなどの日付(時刻)を処理する関数を用いるか、またはTEXT関数を用いるべきであり、LEFTやRIGHTを使ってはいけません。
6.MID関数
(1)MID関数の使い方
問題
A列の文字列は、英字1文字+数字4文字+英字10文字以内で構成されるコードである。
2文字目から5文字目までを取り出しなさい。また、6文字目だけを取り出しなさい。
解説
文字列の途中から数えて指定された文字数分だけ取り出す関数は、MID関数です。文字列と、開始位置、取り出す文字数の3つを指定します。
- =MID(文字列,開始位置,文字数)
例えば、「y1017oshima」の2~5文字目は「1017」ですが、MID関数で表すと「MID("y1017oshima",2,4)」となります。MID関数は途中から数えるので、数え始める場所(開始位置)を指定しなければなりません。先頭の文字を1としますので、開始位置は2となります。
取り出す文字数は全部で4文字となりますので文字数=4です(5ではないことに注意!!)。
セルA2の文字列の左から数えて2文字目から開始して、4文字となるように取り出します。「=mid(a2,2,4)」と入力します。
MID関数の挿入の画面を用いてもかまいません。
6文字目だけを取り出す場合、文字数は1です。「=MID(A2,6,1)」と入力します。
LEFT関数やRIGHT関数とは異なり、MID関数の第3引数(文字数)を省略することはできません。1文字だけ取得するには必ず「1」を指定しなければなりません。
(2)N文字目以降全部
問題
A列の文字列は15字以内であることが分かっている。2文字目以降をすべて取り出しなさい。
解説
MID関数の取り出す文字数を100文字にしてみましょう。「=MID(a2,2,100)」と入力します。2文字目から100文字取り出すという意味です。しかし、A列の文字列は100文字も無いので文字列の最後まで表示されます。
MID関数で十分に大きい文字数を指定すれば、文字列の最後まで取得することができます。したがって、MID関数で文字数を指定したからといって、取り出される文字列の文字数が必ずしも揃うとは限りません。
7.文字の挿入
(1)ハイフンを入れる
問題
5文字目と6文字目の間にハイフンを入れなさい。
解説
文字列の途中に何らかの記号を入れるには、その前後で分割しなければなりません。例えば、「m0311-shinoda」とハイフンを入れる場合、「m0311」「shinoda」をそれぞれ取り出すことを考えます。左の5文字は「LEFT(A2,5)」です。6文字目以降は「MID(A2,6,10)」と10文字くらい指定しておけばよいでしょう。
これらを&で連結します。「=LEFT(A2,5)&"-"&MID(A2,6,10)」となります。
(2)順序を変える
問題
A列の文字列は、ひらがな1文字、数字4桁、ハイフン、漢字の順に並んでいる。この順序を変えて、漢字、ハイフン、ひらがな、ハイフン、数字の順にしなさい。例えば「お1017-栃木」の場合は「栃木-お-1017」とする。
解説
文字列の一部分を取り出してその順序を変えて結合することもできます。
MID関数は全角も半角も1文字とカウントして取り出します。ひらがなは先頭の1文字なので「=LEFT(A2)」です(文字数省略可能)。数字は2文字目~5文字目なので「=MID(A2,2,4)」です。漢字は7文字目以降なので「=MID(a2,7,3)」となります。漢字は2文字と3文字がありますが3を指定すればよいです。
したがって、ハイフンで連結すると次のような数式になります。
- =MID(A2,7,3)&"-"&LEFT(A2)&"-"&MID(A2,2,4)
8.MID関数の文字数
問題
「徳川家康」の3文字目以降の文字を取り出したい。文字数を-1~5として取り出しなさい。
解説
MID関数で文字列を絶対参照にして取り出します。開始位置は3文字目です。
文字数をマイナスにするとエラーになります。文字数を0にすると空白になります。
取り出せる文字が2文字しかないので、文字数2文字以上は同じになります。
9.MID関数と数値化
問題
8桁で入力された数値を4桁、2桁、2桁に分離しなさい。また、MID関数で取り出した文字列を数値に変換しなさい。
解説
最初の4文字を取り出すのはLEFT関数です。「=LEFT(A1,4)」です。
MID関数を使って「=MID(A1,1,4)」としてもよいです。
次の2桁はMID関数です。5文字目から2桁を取り出すので「=MID(A1,5,2)」です。
最後の2桁はRIGHT関数です。「=RIGHT(A1,2)」です。
MID関数を使って「=MID(A1,7,2)」としてもかまいません。
MID関数は、LEFT関数やRIGHT関数と同じように取り出した答えは「文字列」です。数値ではありませんので先頭に0がついたままです。また、左揃えになります。これを数値化するには1をかけます。これで数値となり、先頭の0が消えて右揃えになります。
10.MID関数を使った文字列分割
(1)1文字ずつ分割
問題
A列の文字列を、1文字ずつ分割してB列以降に表示しなさい。
解説
MID関数は途中の文字列を抽出する関数であり、文字数を1にすると1文字だけ取得することができます。これを利用して先頭から1文字ずつ抽出してみましょう。
横向きに1~8の数値を入力します。これはMID関数の開始位置です。
「=MID($A2,B$1,1)」と入力します。文字列と開始位置は複合参照です。
これによって、1文字ずつ分割することができます。カンマやスペースも1文字としてカウントされます。
また、「織田 信長」に8文字目は存在しませんが、開始位置として指定した数値が全体の文字数を超える場合は空白になります。
(2)2文字ずつ分割
問題
A列の文字列を、2文字ずつ分割してB列以降に表示しなさい。
解説
2文字ずつ取得するとき、開始位置は奇数(1、3、5、・・・)となります。
複合参照で「=MID($A2,B$1,2)」とします。
A列の文字列は10文字なので、開始位置を11にすると取得できる文字が無いので空白になります。
別解
1、2、3、・・・と入力したとします。
この場合は2倍して1を引けば奇数になります。
複合参照で「=MID($A2,B$1*2-1,2)」とします。
11.MID関数で整数値を文字に変換する
問題
(1)十二支は「子丑寅卯辰巳午未申酉戌亥」の順なので、申年(さるどし)から始めると「申酉戌亥子丑寅卯辰巳午未」になる。この文字列を1文字ずつ分割しなさい。
(2)西暦が12の倍数のとき申年であることが分かっている。西暦から十二支を求めなさい。
解説
1~12の整数を入力します。これは開始位置です。
「=MID("申酉戌亥子丑寅卯辰巳午未",A1,1)」と入力すると、1文字ずつ分割することができます。これは1~12の整数を十二支に変換したのと同じです。
このように1から始まる整数値を、別の1文字に置き換えるにはMID関数を使います。
西暦を12で割ったときの余りを求めます(参考:【Excel】INTやMOD関数を用いて数値の一部を取り出す整数問題と関数の過去問(ITパスポート表計算Part3))。
「=MOD(E1,12)」です。余りは0~11の整数です。
西暦が12で割ったときの余りが0のとき申年です。
これに1を足すと1~12となります。「余り+1」と十二支の順番は一致するので、1~12の整数を「申酉戌亥子丑寅卯辰巳午未」に変換すればよいです。
- =MOD(E1,12)+1
MID関数で変換します。「=MID("申酉戌亥子丑寅卯辰巳午未",F2,1)」と入力します。これで西暦を十二支に変換できます。
1つの数式にすると「=MID("申酉戌亥子丑寅卯辰巳午未",MOD(E1,12)+1,1)」となります。
いっぱんに、整数値をABCABCABC・・・のように循環する文字列に変換するにはMID関数を使います。この場合、文字数は「MOD+1」とします。
なお、MID関数の開始位置を0にするとエラーになりますので、0にならないように注意します。
12.MID関数を使った判定
問題
A列に得点を入力した。90点以上、80点以上、70点以上、60点以上、59点以下を、それぞれS、A、B、C、Dとしなさい。
解説
得点を10で割り、その整数部分に1を足すと11段階評価(1~11)になります。
「=INT(A2/10)+1」を計算します。
この評価を「DDDDDDCBASS」に置き換えたらよいです。
「=MID("DDDDDDCBASS",B2,1)」と入力します。これでアルファベットになります。
これを1つの式にすると、「=MID("DDDDDDCBASS",INT(A2/10)+1,1)」となります。
いっぱんに、数値をAAABBBCCC・・・のように一定の範囲で区切って文字列に変換するにはMID関数を使います。この場合、文字数は「INT+1」となります。
別解
INT関数を無くして、「=MID("DDDDDDCBASS",A2/10+1,1)」としてもかまいません。
LEFT、RIGHT、MID関数で指定する文字数や、MID関数の開始位置で指定する数値が小数の場合は、自動的に小数点以下切り捨ての整数値となります。したがって、INT関数で切り捨て処理をする必要はありません。
解説は以上です。