エクセルごはん第7回(数字と文字を分けよう)
こんにちは。
エクセルごはんです。
第7回目になります。
今回もExcelの問題を解いていきましょう。
今回から、エクセル君とごはん君という二人の登場人物に登場してもらい、二人に問題の解説をしてもらおうと思います。
エクセル君はエクセルが苦手です。
ごはん君はエクセルが得意です。
それでは、問題をどうぞ。
問題
エクセル君「今日はどんな問題かな?」
ごはん君「今日の問題はこちら」
エクセル君「数字と文字があるけど…」
ごはん君「うん。数字と文字を分けようという問題だよ。数字と数字以外からなる文字列があって、数字なら数字に、数字以外なら数字以外に分けようという問題になるよ」
エクセル君「数字と数字以外か」
ごはん君「うん。完成形のイメージは次になるよ」
エクセル君「うん。数字と数字以外に分かれているね。どうやってやるのかな?」
ごはん君「考えてみよう」
解説
ごはん君「まず、次の数式の意味は分かるかな?」
=MID($B$3,1,1)
エクセル君「MID関数は指定した文字列の、指定した位置から、指定した文字数を返す関数だね」
ごはん君「うん」
エクセル君「セルB3から、開始位置1の文字数1を取ってくるから、Cが返るね」
ごはん君「そうだね。こんな風にMID関数で文字を取ってくることができるけど、これを全部の文字取ってくるためにはどうすればいい?」
エクセル君「全部の文字ってことは、値をいっぺんに取得したいから、配列数式の出番になるのかな?」
ごはん君「そうだね。開始位置を1から2、3、4…10ってずらしていきたいんだ」
エクセル君「ROW関数でできるね。こんな感じかな?」
=MID($B$3,ROW($A$1:$A$10),1)
と入力し、CtrlとShiftとEnterキーを押した。
ごはん「うん。これで、ROW関数で1から10まで、開始位置をずらして、1文字取得できたね」
エクセル君「CONCAT関数で配列の中身を調べると、C3A7D17BC2って表示されたよ」
=CONCAT(MID($B$3,ROW($A$1:$A$10),1))
と入力し、CtrlとShiftとEnterキーを押した。
ごはん君「そうだね。これで全文字取得できたことが確認できるね」
エクセル君「でも、MID関数で全文字取得してどうするの?」
ごはん君「ここから、数字のものは数字に、それ以外のものはそれ以外に分けるんだ」
エクセル君「どうやって?」
ごはん君「ISNUMBER関数を使って数字とそれ以外を調べるんだ」
エクセル君「なるほど」
ごはん君「でも、このままじゃMID関数で返ってきた値は文字になっているから、いったんこれを、VALUE関数を使って、数字に置き換えるんだ」
エクセル君「ふむふむ。でも、数字以外のものは数字にできないよね」
ごはん君「そうだね。数字以外のものは数字にならないから、ISNUMBER関数を使って調べるときに丁度良いんだ」
エクセル君「なるほど。やってみるね」
=CONCAT(ISNUMBER(VALUE(MID($B$3,ROW($A$1:$A$10),1))))
と入力し、CtrlとShiftとEnterキーを押した。
エクセル君「FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUEと表示されたよ」
ごはん君「うん。できてるね。C3A7D17BC2に対応しているね」
エクセル君「あとは、FALSEのとき(数字以外のとき)に、数字以外を表示して、TRUEのとき(数字のとき)に、数字を表示すれば良いんだね」
ごはん君「そうだね」
エクセル君「じゃあ、IF関数を使って場合分けだね。まず、数字のときは…」
セルC3に、
=CONCAT(IF(ISNUMBER(VALUE(MID($B$3,ROW($A$1:$A$10),1))),MID($B$3,ROW($A$1:$A$10),1),""))
と入力し、CtrlとShiftとEnterキーを押した。
ごはん君「うん。これで、数字が取ってこれるね。37172と表示されたね」
エクセル君「次は、数字以外だから…」
セルD3に、
=CONCAT(IF(ISNUMBER(VALUE(MID($B$3,ROW($A$1:$A$10),1))),"",MID($B$3,ROW($A$1:$A$10),1)))
と入力し、CtrlとShiftとEnterキーを押した。
ごはん君「うん。数字以外のCADBCが取ってこれたね」
エクセル君「できたー」
ごはん君「できたね」
解答
セルC3に、
=CONCAT(IF(ISNUMBER(VALUE(MID($B$3,ROW($A$1:$A$10),1))),MID($B$3,ROW($A$1:$A$10),1),""))
と入力し、CtrlとShiftとEnterキーを押す。
セルD3に、
=CONCAT(IF(ISNUMBER(VALUE(MID($B$3,ROW($A$1:$A$10),1))),"",MID($B$3,ROW($A$1:$A$10),1)))
と入力し、CtrlとShiftとEnterキーを押す。
おつかれさまでした。
今回の問題は数字と、数字以外とを分けようという問題でした。
エクセル君とごはん君に解説してもらいました。
今後も、エクセル君とごはん君に解説してもらおうと思います。
それでは、また次回をお楽しみに。