エクセル文字列抽出関数の使い方

このQ&Aのポイント
  • エクセルの文字列抽出関数を使って、英字と数字を分離する方法をご説明します。
  • 具体的な例として、セルA1に「aaaa1111」という文字列がある場合、LEFT関数とMID関数を使って、「aaaa」と「1111」を分離することができます。
  • LEFT関数は指定した文字列の左端から指定した文字数までを抽出し、MID関数は指定した文字列の中の指定位置から指定した文字数までを抽出します。
回答を見る
  • ベストアンサー

エクセル文字列抽出関数についての補足説明のお願い

エクセルの使用歴は長いのですが、簡単な関数以外使ったことがない初心者です。 文字列の中から、英字と数字を抜き出す関数を検索し、たどり着きました。 やりたいことは解決したのですが、入力した式の意味がわかりません。 以下の式で、関数の書式や目的は調べることが出来ますが、なぜそう言う処理を行うと、 英字と数字に分離できるかを初心者にわかりやすく教えて下さい。 宜しくお願い致します。 -------------------------------- A1に「aaaa1111」があるとき B1に  =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))-1) C1に  =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) で「aaaa」と「1111」が分離できます 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>以下の式で、関数の書式や目的は調べることが出来ますが、なぜそう言う処理を行うと、英字と数字に分離できるかを初心者にわかりやすく教えて下さい。 初心者には難しいと思います。 >A1に「aaaa1111」があるとき 英字が4文字で5文字目から数字が並んでいることは人間の目で一瞬の読み取れます。 これはアナログ的に判断しています。 コンピューターはデジタル式に順番に比較しなければなりません。 そのためには手順が正しくないとエラーになって目的を達成できません。 英字と数字の境目をどのように判断するかを論理立てしなければなりません。 数字は0~9の10種類であるのでA1の文字列に0~9の文字が何番目に有るかを拾い出します。 この時に1つでも見つからない文字があるとエラーになって以後の処理を止めてしまいます。 A1に数字は1のみなのでエラーを起こさないために"0123456789"を後ろに追加してエラーを防止します。 A1&"012345679" → "aaaa11110123456789" 前提条件が分からないときを考慮してA1&"0123456789"を検索対象にしていると思います。 >B1に =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))-1) 数式は()の内側から順に評価されることはご存知と思いますので順番に説明します。 FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789") → {9,5,11,12,13,14,15,16,17,18} FIND関数の第1引数の文字列を第2引数の中から探して最初に見つかった位置を返します。 例題の第1引数は{}で括られた10個の文字であり複数の返り値があります。 評価は並び順で0、1、2、・・・・の順に見つかった位置を羅列します。 MIN({9,5,11,12,13,14,15,16,17,18})) → 5 FIND関数の返り値(配列)から最小の値を返します。 LEFT(A1,5-1) → "aaaa" MIN関数の返り値(5)を利用してA1の文字列から左側の4文字を切り出します。 >C1に =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) B1の処理に準じて処理されます。 MID関数は第1引数の文字列(A1)の指定文字位置(第2引数)から指定文字数(第3引数)を切り出します。 第3引数は過大の値を指定したとき最後の文字までを返します。 用語が理解できないときは補足してください。

kanrekioyaji
質問者

お礼

bunjii様、回答いただきましてありがとうございました。初心者にも判りやすい説明をしていただきまして本当にありがとうございました。お陰様で、理解できました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>英字と数字に分離できるかを初心者にわかりやすく教えて下さい カギになるのは,先頭から数えて「5文字目」に「最初の数字が現れる」ということです。 この5が判れば, =LEFT(A1,5-1) で前半の「aaaa」が =MID(A1,5,沢山の数字) で後半の「1111」が それぞれ取り出せます。 次のステップとして,数式の中に入ってる MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")) という部分で,今回の「5」を求めます。 これは配列数式という,通常のエクセルの参考書には出てこない計算のやり方を使いますが,やってる事自体は比較的単純です。 【step1】 A1&"0123456789" を使って「aaa11110123456789」という文字列をまず作ります。 これはいまご相談が「文字数字」の並びになってる前提で書かれてますが,現実のA1にはもしかすると「abcde」のように数字が含まれてない言葉が記入されてしまうかもしれません。その場合にもエラーになったりせず,ちゃんと「前半のabcde」です「後半はありません」という結果を計算するための細工です。 【step2】 FIND(ある文字,"aaaa11110123456789") という関数で,ある文字(たとえば「1」)が「aaaa11110123456789」の先頭から数えて何番目に現れるか計算します 今回はいきなり1がヒットして5番目に現れます 【step3】 FIND関数の「ある文字」の所に「{0,1,2,3,4,5,6,7,8,9}」という書きぶりで,0から9まで合計10個の数字をそれぞれ与える計算をさせます。これを配列計算と言います。 この段取りにより 0に対しては9が計算されます 1に対しては5が計算されます 2に対しては11が計算されます  : 9に対しては18が計算されます 以上を束ねた{9,5,11,12,13,14,15,16,17,18}という配列がFIND関数の結果になります 【step4】 MIN({9,5,11,12,13,14,15,16,17,18}) という計算で,最初の(=先頭の)5が計算されます。 以上の計算ステップは,言葉でだらだらと説明を読む代わりにエクセルの「数式の検証」という機能を使い,ご自分の目でステップを追って確認していくことができます。 ご利用のエクセルのバージョンが不明のご相談ですが,エクセル2007以降をご利用なら数式タブにあるので,実際に手を動かしていちど確認してみて下さい。

kanrekioyaji
質問者

お礼

keithin様、判りやすい解説付きで補足していただきまして、本当にありがとうございました。大変参考になりました。いただいたアドバイスを元に、「数式の検証」機能も勉強して、自分で確認できるよう頑張ります。又、初心者のためExcelのバージョンを明記するのを忘れてしまい、申し訳ありませんでした。早々の対応、本当にありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")) これが分かったらわかりますよね。 これは、0~9の数字がA1の中にあるかどうかを探しているんです。 {0,1,2,…,9}のどれかをA1から探し、その先頭の位置を返せって 言う関数ですから。 A1&"0123456789"は、A1だけでもいいのですが、A1に数字がない とエラーしてしまうので、念のためひっつけただけです。 逆に言えば、もしA1に入ってる数字が"1"だけなら =LEFT(A1,FIND("1",A1)-1) これだけで、"aaaa"が引っ張り出せます。これならわかりますよね。 =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)) も同じで =MID(A1,FIND("1",A1),LEN(A1)) ってことで、「"1"が見つかった位置から最後の文字(=LEN(A1))まで 引っ張り出せ」って処理ですから、後ろの"1111"が出てきます。

kanrekioyaji
質問者

お礼

FEX2053様、早々に回答いただきまして、ありがとうございました。お陰様で、疑問が解けました。初心者に付き、質問するにも基本ルール等が良く判らず、又、お礼についても不行き届きの点があるかも知れませんが、ご容赦下さい。本当にありがとうございました。

関連するQ&A

  • 関数で文字列と数字の組合せから数字のみを取り出す

    お世話になります。 文字列+数字から数字のみを取り出す関数はエクセル技道場などで紹介されている =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},))))で可能ですが、たとえばSSPAS2.5などのように小数点を含む数字の場合結果は2.となります。正しい結果を得るためにはどのような関数を使えばいいのでしょうか。数字には整数、少数点を含むものが混在しているとします。 どなたかよろしくお願いします。

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • このエクセルの複雑な関数を訳してください!

    こんにちは。 これから年賀状の季節ということで、エクセルでリストを作成し、印刷にまでこぎつけたいと思うのですが、「(株)や(有)を除いた会社名順に並び替えたい」と考えております。 そこで、こちらのOkwebで検索したところ、下記のような式がアドバイスされていました。とてもありがたいです。 ただ、こちらをそのまま使わせていただいてもかまわないのですが、式に興味を持ち、自分で辞書をひいて調べたところ、構造が理解できませんでした。 そこで、どなたかこちらのエクセルの式を訳していただけないでしょうか。 =CONCATENATE(LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1),MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1,LEN(PHONETIC(A2)))) CONCATENATE関数で、LEFT関数・MID関数・LEN関数で出したものを結合する? ・LEFT(PHONETIC(A2),FIND("(",PHONETIC(A2),1)-1) ・MID(PHONETIC(A2),FIND(")",PHONETIC(A2),1)+1 ・LEN(PHONETIC(A2) このようにわけられるものでしょうか。 アドバイス、よろしくお願いします!

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • Excelの抽出方法について

    Excel2003において、英字のみと数字のみを抽出する方法を教えてください!(出来れば関数のみとVBAの両方) A列にはaaaa1111のように英字+数字のパターンで500行ほどあり、 英字の文字数は決まっておらず、数字は3字か4字のどちらかになります。 B列に英字のみ、C列に数字のみの結果を出したいです。 ご教授の程よろしくお願いします。

  • エクセルの文字列・数値【長文です】

    昨日、LEFT関数の使い方を教えていただきましたが、これですとLEFT関数を用いたところが【文字列】として認識されました。【数値】として認識させる方法を教えてください。 初心者で申し訳ございません。 昨日の質問・いただいた回答は以下の通りでした。 ≪質問≫ [123456/あいうえお/abc][234567/かきくけこ/efg]のようなデータがいくつかあって(例えばA列に)、B列に[123456][234567]、C列に[あいうえお][かきくけこ]、D列に[abc][efg]と表記できるような【関数】を教えてください。 ≪いただいた回答≫ A1にデータがあったとして。 B列 =LEFT(A1,SEARCH("/",A1,1)-1) C列 =LEFT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),1)-1) D列 =RIGHT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)))-SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1))))

  • Excel関数 文字分割

    A列               関数の結果求めたい値 AAAA BBBB(半角スペース区切)     AAAA AAAA BBBB(全角スペース区切)    AAAA AAAA/BBBB(半角/区切)        AAAA AAAA/BBBB (全角/区切)       AAAA =LEFT(A1,FIND(" ",SUBSTITUTE(A1," "," "))-1) =LEFT(A1,FIND("/",SUBSTITUTE(A1,"/","/"))-1) Excelの関数で一回の関数で上記二つの関数を使用して 区切文字複数を考慮して文字分割したいのですが、 どのように実施すればよいかご教授ねがえますでしょうか? IF文を使うのかもしれないとは思いいろいろと試したのですが うまく出来ない為質問させて頂いたおります。

  • 文字列を取り出す

    A列に[ No.××× ] あああああ・・・と入力されています。 毎回入力される行数が違います(100~300行) B列にNo.×××という文字列だけ取り出すために下記の関数が入っているのですが A列に入力のあった分だけをマクロで処理できませんか。 =LEFT(RIGHT(A2,LEN(A2)-FIND("[ No",A2,1)),8) 現在は300行目までこの関数が入った状態で、エクセルが重い気がします。

  • エクセル 文字列の日付を日付書式に変換

    文章の中に混じっている日付を切り出しました。しかし書式を変更しても日付になってくれません。そこでこれをDate関数で日付化しようとしたのですが、”日”の部分が切り取れません。 例 1/1/2001 1/10/2001 12/29/2001 このように桁がバラバラなので、Left,Right,Mid関数とDate関数に組み込んでみましたが、日の部分を指定する方法がわかりません。 =DATE(RIGHT(A1,4),MID(A1,FIND("/",A1)+1,????) ????に何を入れたらいいでしょうか。

  • エクセル関数、文字列の抽出

    A1セルの中にたとえば「コーヒー、お茶、紅茶、コーラ、ビール、ワイン」と有るとします。B1にビールとワイン、C1にコーヒー、紅茶と抽出したいのですが、どなたかご存知の方ぜひ教えてください。MID関数とかFIND関数とかを試したのですがうまくいきませんでした。宜しくお願いします。

専門家に質問してみよう