---topics:left関数、right関数、mid関数、text関数---

其ノ2 文字列を操作する

ハイ、第2回です。
実は、このページの一番上に水平に走っている緑のバーに、その回のトピックを置いています。
今回のトピックは「left関数」「right関数」「mid関数」、そして「text関数」。 …4つも出てきてしまいましたが、「left関数」「right関数」「mid関数」はそれぞれ、「文字列のを取り出す」「を取り出す」「真ん中を取り出す」関数です。 で、「text関数」は、文字列(テキスト)を特定のかたちに変化させる関数です。
今回も練習問題を用意してありますので、以下からダウンロードお願いします。

開くとこんな↓です※1

kiso02_mojiretukakou.xlsx
※1 kiso02_mojiretukakou.xlsx

シートが3枚あります。 じゅんばんに練習していきましょう。

left関数、right関数

ハイ、では最初の課題※2。 1枚目のシートを見てください。 「left_right」って名前のヤツね。

最初の課題
※2 最初の課題

ではまず、一番上の問題。 郵便番号を、-(ハイフン)の前後で分けたいな、と。 つまり、「182-0022」だったら、「182」と「0022」に分けたい。

ハイ、では、やってみましょう。
郵便番号は必ず7文字と決まっていて(ハイフン入れても8文字)、ハイフンの左は3文字、右は4文字という作りになっています。 だから、左から3文字分、右から4文字分を取り出してやればよい。
こういうときに使える関数が、「left関数」「right関数」です。

ちょっとやってみましょう。 画面見ながらついてきてくださいね。
まず、左3文字から。
セルに「=left(」と入れてください※3

left関数を使ってみる
※3 left関数を使ってみる

次に、ナビゲーションに「文字列」と出ていますが、取り出す元となるセルを選択します。 この場合だと「182-0022」のセル、つまりB2セルを選択します※4。 マウスでクリックでも、矢印キーで移動でも良いですよ。

B2を選択
※4 B2を選択

セル選択できたら、半角カンマで区切って、次に欲しい文字数を入力します。 今回欲しいのは左から「3」文字分ですので、「3」を入力します※5

3文字欲しいので、「3」を入力
※5 3文字欲しいので、「3」を入力

かっこを閉じれば、完成です※6 ※7

かっこを閉じるのを忘れない enterで確定すれば…
※6 かっこを閉じるのを忘れない enterで確定すれば…
「182」を取り出せた
※7 「182」を取り出せた

続いて右側も行きましょう。 right関数を使います。
まず、決まり文句として「=right(」と入れて、んで、元となるセルを選んでください※8

今度はright関数
※8 今度はright関数

右から「4」文字欲しいので、「4」を入力します※9
かっこを閉じれば完成です※10

欲しいのは右から4文字
※9 欲しいのは右から4文字
0022を取り出せた
※10 0022を取り出せた

できました?

では、解説。
left関数とright関数のつくりは、こんなふうに↓なっています。

・left関数 =left(取り出す元となるセル , から何文字分?)
・right関数 =right(取り出す元となるセル , から何文字分?)

式のつくりはleftもrightも同じです。 最初の「left」「right」の部分がちがうだけです。
文字を取り出す仕組みは、こんな↓感じです※11

left関数とright関数の構造
※11 left関数とright関数の構造

なんとなく、わかっていただけました? left関数は「から何文字」、right関数は「から何文字」取り出すんですよ。

では、郵便番号の残りもやっつけていきましょう。 ま、式をコピペすればいいんだけど※12 ※13

残りも同様
※12 残りも同様
できた
※13 できた

ハイ次行きます。 会員番号。 コイツを、左1文字と右3文字に分けたい。 やってみてください。

こうなりますね※14 ※15

=left(B10,1)
※14 =left(B10,1)
=right(B10,3)
※15 =right(B10,3)

以下、式をコピーしてやればOKです※16

会員番号を最初の1文字と右の3文字に分けることができた
※16 会員番号を最初の1文字と右の3文字に分けることができた

名字が2文字、名前も2文字、とわかっていれば、名字と名前を分けることもできます※17 ※18 ※19

「山田」を抜きたいので、左から2文字
※17 「山田」を抜きたいので、左から2文字
「太郎」を抜きたいので、右から2文字
※18 「太郎」を抜きたいので、右から2文字
姓名で分けた
※19 姓名で分けた

…でも、このやり方だと、名字が「伊集院」とか「勅使河原」のとき単純なコピペじゃ対応できないんだよね。 抜き出す文字数を変えなきゃいけない。
幸い、今回のデータの場合、名字と名前のあいだに空白があるので、空白のところで分ければよいんだけど、そのやり方は次回、其ノ3で。
ひとまず、leftとrightの練習でした。

次、行きましょう。

mid関数

2枚目のシートに進みましょう。 「mid関数」って名前のヤツです※20

2枚目のシート
※20 2枚目のシート

まず、ひとつめの問題。
今度は、会員番号を3つに分けたい。 つまり、「926-1333-595」だったら、「926」と「1333」と「595」に分けたい。

左3文字と右3文字は、もう抜き出せますよね※21 ※22

=left(B2,3)で左から3文字抜き出す
※21 =left(B2,3)で左から3文字抜き出す
=right(B2,3)で右から3文字抜き出す
※22 =right(B2,3)で右から3文字抜き出す

問題は真ん中4文字ですね。
真ん中の文字は、mid関数で取り出しましょう。 mid関数の使い方は、こんな↓感じです。

・mid関数 =mid(取り出す元となるセル , 何文字目からスタート? , 何文字取り出す?)

leftやrightよりちょっと複雑ですね。 というのも、指定する数が1つ増えているからです。
…まあ、とりあえずやってみましょうか。 まず、「=mid(」と入れてください※23

=mid(
※23 =mid(

で、対象となるセルを選びます※24。 ここまでは、leftやrightと同じですね。

対象文字列を選ぶ 今回はB2セル
※24 対象文字列を選ぶ 今回はB2セル

セル選択できたら、半角カンマで区切ってください。 次の入力に移ります。
次は、「何文字目からスタート?」を入力します。 今回欲しいのは、「926-1333-595」の「1333」ですね。 さて、では、「1333」の「1」は、何文字目ですか?
…いち、にー、さん、しー、ごー、5文字目ですね。 -(ハイフン)も1文字と数えるんですよ。
ということで、「5」を入力してください※25

5文字目から抜き出したいので、「5」を入力
※25 5文字目から抜き出したいので、「5」を入力

オーケー? 「5」を入力したら、また半角カンマお願いします。
次に入力するのは、「そこから何文字取り出すか?」です。
われわれが欲しいのは「1333」の4文字なので、「4」と入力します※26

4文字欲しいので、「4」と入力
※26 4文字欲しいので、「4」と入力

かっこを閉じれば完成です※27 ※28

mid関数の完成
※27 mid関数の完成
抜き出せた
※28 抜き出せた

できました? …leftやrightより、ちょっとむずかしいですよね。 数字の指定の仕方も、ちょっとクセがあるし。
ちょっと、解説しときましょうか※29

mid関数の解説
※29 mid関数の解説

数字を2つ指定しないといけないところがむずかしいですね。 しかも、「何文字目からスタート?」と「何文字取り出す?」で、1文字かぶってる(上画像でいうと「926-1333-595」の「1」のところ)が混乱の元…。
とりあえず、指さしでもしながら数えて、きっちり指定してあげてください。
まず「何文字目からスタート?」を指定して、で、次に「そこから何文字取り出す?」、ですよ。

じゃあ、残りもやってみますか。 …と言っても、コピペすれば解決するんだけど※30

上の式をコピーした
※30 上の式をコピーした

上手いこと、真ん中の文字を取り出せたみたいですね。 よしよし。

では続けて次の問題。 以下の住所を、「都道府県」と「市」と「町」に分けたい。 つまり、「東京都調布市国領町」だったら、「東京都」「調布市」「国領町」に分けたい。

 ・
 ・
上の応用でやってみましょうか。 まず都道府県から※31

左から3文字
※31 左から3文字

「東京都」なんで、左から3文字引っ張ってやればよい。
次。 真ん中※32

4文字目から3文字分
※32 4文字目から3文字分

…そう。 「東京都調布市国領町」から「調布市」を抜き出すわけだから、4文字目から3文字分指定してやればよい。 つまり、=mid(B10,4,3)が正解。

ハイ最後。 右の3文字※33

右から3文字
※33 右から3文字

できましたか?

じゃあ、以下も同様な感じでお願いします。
とりあえず、式をコピーでイケるかな…※34 ※35 ※36

式を入れた3セルをまとめてコピーすることもできます。3セルまとめて選択→コピー
※34 式を入れた3セルをまとめてコピーすることもできます。3セルまとめて選択→コピー
左端をそろえて貼り付けします
※35 左端をそろえて貼り付けします
コピーはうまくいった しかし…
※36 コピーはうまくいった しかし…

おおっと! 「宇都宮市」がうまく引っ張ってこれてませんね。 というのも、「宇都宮市」は4文字だからです。
なので、ここは式のコピーでは対応できません。 式を入れなおしてあげてください※37

ここだけは4文字目から4文字分
※37 ここだけは4文字目から4文字分

住所を切り分けるのはむずかしいんですよ。 文字数が不規則ですから。 都道府県名でさえ3文字のところもあれば4文字のところもある(鹿児島県など。今回はたまたま全部3文字ですけど)し、市の名前なんて文字数決まってるわけじゃないですからね。 だから、今回のように文字数で規則的にもってこようとするのははじめから無理があったりするのですが、ま、勉強としてやってみました。 なので、こういうこともあるということ、覚えておいてください。

mid関数は「何文字目から何文字分」という指定の仕方をしますね。 このとき、「1文字目から」とすると、left関数と同じはたらきをします。 つまり、=mid(B2,1,3)は、=left(B2,3)と同じ機能を果たします。
…この話、ちょっとした余談なのですが、VBAなんか組むようになったときもしかしたら役に立つかもしれませんので、頭の片隅に置いておいてください。

ハイ次。 次は、住所を「都道府県」と「そこから先全部」に分けたい。 つまり、「東京都調布市国領町」だったら「東京都」と「調布市国領町」に、「栃木県宇都宮市鶴田町」だったら「栃木県」と「宇都宮市鶴田町」に分けたい。
はて、どうしましょうか。

 ・
 ・
とりあえず、都道府県は今回全部3文字なんで、さっきと同様で大丈夫なんですが※38

「神奈川県」とか含まれてると手間がかかるんですが…(「神奈川県」は4文字だから)
※38 「神奈川県」とか含まれてると手間がかかるんですが…(「神奈川県」は4文字だから)

問題はそこから先ですよね。 「調布市国領町」だと6文字、「宇都宮市鶴田町」だと7文字…、と、それぞれ引っ張る文字数が異なります。
だから、まじめに1コ1コやろうとするとこう↓なりますよね※39 ※40

最初は6文字、次は7文字…と、地道にひとつひとつ引っ張る文字数を入力
※39 最初は6文字、次は7文字…と、地道にひとつひとつ引っ張る文字数を入力
一応できた、が…
※40 一応できた、が…

…まあ、これでも悪くはないんだけど、これが100コとかあったら途中でイヤになっちゃいますよね。
ということで、もうちょっと工夫してみましょう。
まず、文字数が何文字あるか調べる関数を入れてみましょうか。 len関数といいます。 使い方はこう↓です。

・len関数 =len(対象セル)

len関数は数字の指定とかはないです。 対象セルを選択するだけです。
さっそく使ってみましょうか。 C18セルに「=len(」と入れてください※41

len関数で文字数を割り出す
※41 len関数で文字数を割り出す

次に、対象セルを選択します。 今回の場合は隣のセル、B18ですね※42

対象セルを選択
※42 対象セルを選択

あとはかっこを閉じてやるだけ。 「東京都調布市国領町」の文字数が出ます※43 ※44

かっこを閉じれば完成 引数は対象セルだけ
※43 かっこを閉じれば完成 引数は対象セルだけ
「東京都調布市国領町」は9文字です
※44 「東京都調布市国領町」は9文字です

式をコピってやると、こんな↓感じになります※45

各文字数がでた
※45 各文字数がでた

len関数の「len」とは「length」、「長さ」って意味の英語です。 少し、覚えやすくなりましたか? 使い方としては、対象セルを選択するだけです。 leftやmidみたいに、数字を指定することはありません。
さて、実はlen関数はこれから先のための準備でして。
今、len関数で住所の全文字数を割り出しました。
では、ここから都道府県の文字数3を引くと?
…そう、われわれが求める、市区町村以下の文字数になるのです。
では、mid関数を少しいじってやりましょう。 とちゅうまでは同じです。 4文字目から、ってところまでは※46

=mid(B18,4, ここまでは同じ
※46 =mid(B18,4, ここまでは同じ

変えるのはここからです。
まず、C18セル(さきほどlen関数を入れたセル)を選択し、続けて「-3(マイナス3)」とダイレクトに入力しましょう※47。 「C18-3」となるのが正解です。

C18の値から3を引く
※47 C18の値から3を引く

あとは、かっこを閉じてやればOK※48。 うまいこと引っ張ってこれます。

市区町村以下を引っ張ってこれた
※48 市区町村以下を引っ張ってこれた

さて、このやり方のいいところは、この式をコピーすれば残りの4つもイケちゃうところです※49

式をコピーしたところ
※49 式をコピーしたところ

なぜこうなるかといいますと…、仕組みをちょっと、まとめておきましょう※50

解説
※50 解説

つまり、1コ目の「C18-3」のところでは、「東京都調布市国領町」の文字数9から3引いた数、すなわち「6」が、埋め込まれているわけです。
そして、2コ目の「栃木県~」のところでは、「栃木県宇都宮市鶴田町」の文字数10から3引いた数「7」が、入っているんです。 以下、同様に「6(9-3=6)」、「8(11-3=8)」、「8(11-3=8)」となります。 ガッテンしていただけましたか?

…ちょっと、むずかしかったかもしれないですね。
ただね…、実は、このやり方は真面目なやり方です。 もっと不真面目に、こう↓でもいいんです※51

不真面目なやり方
※51 不真面目なやり方

こちらは-3(マイナス3)を入れてません。 つまりこのままだと、「4文字目から、9文字引っ張る」ということになってしまい、数字的にはオーバーしてしまいますが、実はこれでも式は問題なく機能します。 なぜなら、mid関数は、多く引っ張る分には問題ないからです※52

不真面目なやり方の解説
※52 不真面目なやり方の解説

なので、絶対100文字以上にならないようなケースでは、人によっては=mid(B18,4,100)みたいにしちゃう人もいます。 まあ、「100」みたいな決め打ちは僕はあまりオススメしてませんが…。

とりあえず、mid関数の練習は以上です。 不安でしたら、繰り返しやってみてくださいね。

text関数に触れてみる

ハイ最後! 3枚目のシート※53

「text関数」って名前のシート
※53 「text関数」って名前のシート

B列に1,2,3,…,100と連番が振ってあります。 これを、「001」「002」「003」…としたい。 となりは「0001」…と4ケタ数字にしたい。 さてはて。



例えばね、コレ、手作業で「001」って入力したとしましょう。 でもその場合、そのままだとダメなんですよ※54 ※55

そのまま「001」って入力すると…
※54 そのまま「001」って入力すると…
ただの「1」に戻される
※55 ただの「1」に戻される

標準書式だと数字のアタマの「0(ゼロ)」は無視されちゃうんですよ。
だから、書式を文字列にしてやらないといけない。 右クリック→セルの書式設定→文字列としてやってください※56 ※57

右クリック→セルの書式設定→文字列
※56 右クリック→セルの書式設定→文字列
これで「001」と入力できる
※57 これで「001」と入力できる

手作業でやるならこういうやり方なんですが、今回はこれを関数でやってみましょう。 text関数というのを使います。
まず、「=text(」と入れます※58

text関数を使ってみる
※58 text関数を使ってみる

text関数は対象セルを特定のかたちに変化させる関数です。 なので次に、変化させる元のセルを選択します。
隣のセル、B2を選択してください※59

隣のセルを選択
※59 隣のセルを選択

セルを選択したら半角カンマで区切りますよ。
次がこの関数のポイント! 「"000"」と入力してください。
「"(ダブルクォーテーション)」はshift押しながら「2」、ですよ※60

表示形式は000を指定
※60 表示形式は"000"を指定

あとはかっこを閉じれば完成です、が…※61 ※62

かっこを閉じれば完成
※61 かっこを閉じれば完成
あれ… 001になるはずなのに…
※62 あれ… 001になるはずなのに…

アレ? うまくいきません…。 式は合ってるはずなのに…。

…失礼失礼。 さっきセルの書式を文字列にしたのがそのままでした。
なので、書式を「標準」に戻して、もう一度関数を入れ直してください、お手数ですが※63 ※64 ※65

書式を標準に戻し忘れました
※63 書式を標準に戻し忘れました
仕切り直し
※64 仕切り直し
今度はOK
※65 今度はOK

今度はできました。 ちゃんと「001」になりましたね。
では、この式をおしりまでコピーしてみましょう。 おしりまでの数字がすべて3ケタになります※66

おしりまで式をコピーした
※66 おしりまで式をコピーした

よしよし。
この勢いで、4ケタの方も片づけましょう。
4ケタにするには、さっきの"000"のところを"0000"にします。 つまり、=text(B2,"0000")と式を入れます※67 ※68 ※69

ゼロは4つ
※67 今度は=text(B2,"0000")と式を入れる ゼロは4つ
0001になった
※68 0001になった
おしりまで式をコピーしたところ
※69 おしりまで式をコピーしたところ

うまくできました? 3ケタのときはゼロ3つ、4ケタはゼロ4つですよ。

ハイ、ではtext関数のかんたん解説。

・text関数(基本) =text(対象セル , "表示形式")
・数字を3ケタにする =text(対象セル , "000")
・数字を4ケタにする =text(対象セル , "0000")

text関数は、"表示形式"のところを変えてやるといろいろできる関数なんですよ。 数字に桁区切りのカンマを入れたり、日付を曜日に変えたり、とか。 が、とりあえず今回は上の2つを覚えておいてください。 あ、上の"000"のところ、"00000"にすれば5ケタに、"000000"にすれば6ケタにできますよ、もちろん。

値で貼り付ける

すみません、最後に1コ覚えておいてほしいテクニックがあるのですが…。

例えば、さっきtext関数を入れたセルの中身をやっぱり「0009」に変えたい、としましょう。
編集するためにダブルクリックでセル内に入るのですが…※70

中身は関数なので、編集できない
※70 中身は関数なので、編集できない

見た目は「001」なんですが、中身は関数なので、そのままでは編集できないんですよ。
こういうときは、式を見た目どおりの値にする「値貼り」というテクニックを使います。
やり方はかんたん。 まず、式が入っている列を列ごと選択し、右クリック→コピー※71

式が入ってる範囲をまとめてコピー
※71 式が入ってる範囲をまとめてコピー

で、同じ場所にそのまま貼り付けるんですが…。 同じ場所ですよ。カーソル動かす必要ないですよ。
貼り付ける際、形式を選択して貼り付け→とします※72

同じ場所に「値」で貼り付け
※72 同じ場所に「値」で貼り付け

以上で値貼りは終わり。
これをやると、さっきまで数式だったのが、見た目どおり「001」という値になります※73

001になった
※73 =text(B2,"000")が001になった

値貼りは今後頻出するテクニックなのですが、場合によっては「コピー領域と貼り付け領域のサイズが違うため、貼り付けることができません。」と言われることがあるかもしれません。 基本的には、同じ場所に貼り付けていれば問題ないとは思うのですが、もしこのメッセージが出ちゃったときは、トップの1セルだけを選んで再チャレンジしてみてください。 「トップ(上端、厳密には左上)を合わせる」ってのが、ポイントですよ。

このひと手間を加えることで、数式じゃなくて値として扱うことができますので※74 ※75 ※76

001を…
※74 001を…
0009に変えようかなと思ったのですが…
※75 0009に変えようかなと思ったのですが…
あっ…
※76 あっ…

しまった。 書式が標準のままだった。
…すみません、左上の「戻る」ボタンで一手前に戻って※77、書式を「文字列」に変更しといてください※78

「戻る」ボタンはココ
※77 「戻る」ボタンはココ
書式を文字列に変える
※78 書式を文字列に変える

余計な手間をとらせてしまいました。 もしかしたら「めんどうだなー」って印象を与えてしまったかもしれないですが、数字を文字列として扱うのはけっこうめんどくさいんですよ、もともとExcelだと。 ですが、値貼りは今後よく使うテクニックなので、ぜひ覚えておいてくださいね。
ということで、本日はここまで。 シーユーアゲン!

Copyright(C)森田表計算