• 締切済み

追加質問:EXCEL セル内の特定の特定の文字のみを抽出したい (関数だけで)

http://oshiete1.goo.ne.jp/qa4393007.htmlで『特定の数字のみ』の抽出方法を質問させていただいておりますが、作業を進めるうちに特定の文字列をも抽出する必要がでてきました! 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO21213 ABC 42321243 KAKIKUKEKO32480 CBAAA 59343124 SA85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ひとつ補足ですが文字列(1)と数値(2)の間にはスペースがありません。 以上の条件で文字列(1)のみを抽出する方法などはあるのでしょうか? よろしくお願いします!

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 #3さんとカブるというか、「(関数だけで) 」というのに、正直言って、そういうリクエストの意味は、何だろうって思います。実際、回答者の技術を試されているのではないかと思う時さえあります。Excelの関数は機能の一部です。自分で解決する手段はいろいろあるはずで、どんな方法でも解決すればよいと思います。 早い話、正規表現付きテキストエディタでも、Perl でも、可能なものを、覚えればよいと思います。Excelの関数は、私にとっては、VBAよりも難しいです。一番下のVBAは、ひとつずつ確認して作るだけで、関数よりもずっと簡単です。 11213234AIUEO21213ABC 「\d+(\D+)\d.+」→「$1」 というだけです。 関数なら、 こう解きます。 >数値(1)の桁数は同一 B1:は 9 を予め出すか、 このような式でもよいです。 =MATCH(TRUE,INDEX(ISERROR(MID(A1,ROW(A1:A255),1)*1),,),0) =MID(A1,B1,MATCH(FALSE,INDEX(ISERROR(MID(A1,B1+ROW(A1:A255),1)*1),,),0)) 255 があるのは、それ以上は、標準で見られないからです。 VBAのユーザー定義関数なら、最初の正規表現パターンを移植して、以下のようになります。 (空白が入っても大丈夫です) '標準モジュール Function RePickUp(rng As Range)   With CreateObject("VBScript.RegExp")     .Global = True     .Pattern = "\d+\s*(\D+)\s*\d.+"     If .Test(rng.Value) Then       RePickUp = .Execute(rng.Value)(0).SubMatches(0)     Else       RePickUp = ""     End If   End With End Function

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

◆「数値(1)の桁数は同一」であれば、「文字列(1)のみを抽出する式」は =LEFT(REPLACE(A1,1,9,),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(REPLACE(A1,1,9,))&1234567890))-1)

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.3

>セル内の特定の特定の文字のみを抽出したい (関数だけで) 「関数だけで」と断っていますが、何かのコンテストなら話は別ですが、もっと易しい方法で解決する方法があります。 この種の問題は、1つのセルに入れた関数式で解決しようとする場合、やってできないことはないと思いますが関数式は長大なものになります。 エクセルで関数を使って解決しようとするときに陥りやすいのは、強引に何でもかんでも1セルに入れた関数で解決しようとすることです。 通常、エクセルでは、右の方(列番号の多い方)に多くの余白セルがあるはずです。 そのセルを使って簡単な関数で1つづつ解決していく方法をとれば、複雑な関数を考え出さないでも解決できます。 もしそのシートに余白がない場合は新しい作業用のシートを作成しそこで解決した答えのセルを複写すればよいのです。 これが本来のエクセルの使い方だと思っています。 説教じみた前置きが長くなりましたが、上記の方法での解決法を説明します。 "A"列にデータ、"B"列に結果を入れます。 右側に12列以上の余白が使えるものとします。 まず"B"列の次に12列挿入し、作業用とする。 1. "B"列:目的の文字列を取り出したものを入れる。 "N"列の文字列をコピーするためにセル"B1"に次の式を入れる。   =N1 1. "C"列:"A"列の文字列の最初のスペースの次からの文字列を取り出し入れる。 セル"C1"に次の式を入れる。 TRIM関数は念のため。   =TRIM(MID(A1,FIND(" ",A1)+1,999)) 2. "D"列:"C"列の文字列の最初のスペースの前の文字列を取り出し入れる。 セル"D1"に次の式を入れる。 TRIM関数は念のため。   =TRIM(LEFT(C1,FIND(" ",C1)-1)) 3. "E"列:"D"列の文字列から数字の"0"を取り除いた文字列を入れる。 セル"E1"に次の式を入れる。   =SUBSTITUTE(D1,"0","") 4. "F"列:"E"列の文字列から数字の"1"を取り除いた文字列を入れる。 セル"F1"に次の式を入れる。   =SUBSTITUTE(E1,"1","") 5. 同様に"G"列~"N"列まで取り除く数字を1ずつ増やした式を入れる。 結果、セル"N1"に次の式が入る。   =SUBSTITUTE(M1,"9","") 6. "B1"~"N1"を選択し、下方にドラグコピー(右下の+をWクリック)する。 7. "C"列~"N"列を選択し、右方の空いた適当な列に移動(カット&コピー)する。 以上で、"B"列に目的の文字列が残り、無事解決。 尚右方に移動した作業用のセル群を見えないようにするには、それらの列を選択しグループ化すればよい。 尚、この手法を使えば、処理途中の結果がいちいち確認でき、ミスの修正が楽であり、使用する関数も簡単なもので済みます。 以前の『特定の数字のみ』の抽出方法も自分で解決できるはずですし、応用が広いので今後の利用価値は大です。

回答No.2

文字列(1)の始まりは10文字目固定。その後ろのスペースの位置は、 =find(" ",A1,10)で発見できるので、数値(1)と数値(2)の桁数および 最初のスペースの分を引いてやって=find(" ",A1,10)-15が文字列(1) の長さ。 =mid(=MID(A1,10,FIND(" ",A1,10)-15)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

前質問でも答えたが、文字列の先頭は、定桁の10桁から 第2ブロックの数字文字列の開始桁は、前問の式が使えるので 第2ブロックの文字の長さは A12に データ 11213234 AIUEO 21213 ABC (前門の質問表現のままに従いスペースありのままとした例) として =MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},MID(A12,10,LEN(A12)-10)&"0123456789"))-2 で結果 5 従って =MID(A12,10,上記式) ででる。 ーー A12が 42321243 KAKIKUKEKO 32480 CBAAA の例ではKAKIKUKEKO ーー スペースが無い場合は上記式の最後のー2のところをー1にしてください。文字列の開始の、10が9にも趨勢が必要になります。

関連するQ&A

  • EXCEL セル内の特定の数値のみを抽出したい (関数だけで)

    セル内に数値・文字列を両方含む列があります。 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO 21213 ABC 42321243 KAKIKUKEKO 32480 CBAAA 59343124 SA 85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ここから「数値(2)のみ」を関数で抽出したいのですが、どのようにすればよいのでしょうか? ご教授よろしくお願いいたします!!

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 特定文字列間の文字列の抽出の際についての質問なのですが、

    特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?

  • 文字列から数値を抽出したいのですが・・。

    文字列から数値(integer型)を抽出したいのですが、うまくいきません。 val関数だと文字の途中の数値が判別できないし、困っています。 よろしくお願いします。 ※以下、文字列と数値の関係です。 ・"文字列" → 抽出したい数値  "0k,abc,5k,abc3.0" → 0530  "abc()_3t" → 3

  • エクセル 文字列の中から数字を抽出する方法

    エクセル 文字列の中から数字を抽出する方法 以前 QNo.5823420 で質問させて頂いたんですが 再度質問させてください。 "オーダー番号"+"半角スペース"+"部品型番"+"半角スペース"+"個数"+"半角スペース"+"部品名" というような文字列の中から個数の数のみを抽出する方法を教えてください。 "文字列"+"半角スペース"+"文字列"+"半角スペース"+・・・と文字列の繋がる数は決まってませんので 個数は何番目のスペースの後にくるかは不定です。 数量の半角"ケ"とその前の半角スペースまでの間の数字を抽出したいです。 例1)文字列 :ABC110 XXYYZZ5566 2ケ ****   抽出文字:2 例2)文字列 :ABC XYZ 5566 DDEE11 3ケ FFGG   抽出文字:3 よろしくお願いします。

  • EXCEL関数 特定の文字列間の文字の抽出について

    こんにちは。 Excelでセルの中の、特定の文字列と文字列の間にある文字列を抜き出せる関数がありましたら教えてください! 例:A1セルに、 「~  error_message: エラーが発生しました。  detailed_description: ~  ~」 と記載されています。 「error_message: 」と「detailed_description:」の間にある文字(この場合「エラーが発生しました。」)を抽出したいです。 ※間にある文字の内容、文字数は一定ではないです。 なかなかうまく行かず、苦労しています。。。 ご教示ください。よろしくお願いいたします。

  • 【エクセル】セル内の文字列から数値のみを抽出する方法

    A1●●●●1111 A2××××××222222 A3■■■■■■■■■■■1234567890 上記のように文字列と数値が一続きになっているデータが各セルに入っています。 文字列+数値の順番は決まっていますが、それぞれの文字数は決まっていません。数値はマイナスの場合もあります。 また、境にカンマやスペースなどもないため、テキストファイルウィザードも使えません。 このデータから、数値のみを抽出する方法がありましたらご教示下さい。 よろしくお願いします。

  • Excel2003の関数で文字の抽出

    Excle初心者です。以下のことを関数を使用して実行したいのですが・・・。宜しくお願いします。 列の各セルには文字の羅列があります。これらの特定文字のみを抽出またはカウントしたい。   列1 ----------- (1)(2)(3) (2)(3) (3)(5) (1)→1 (2)→2 (3)→2 (4)→0 (5)→1

  • エクセルで特定文字列の抽出する方法を教えてください。

    エクセルで特定文字列の抽出する方法を教えてください。 たとえばG00X-483.931Y-412.2R5.0 と書かれてるセルからXの値「-483.931」だけを抽出したいのですが分からなくて困ってます。 またこの数値は8文字と決まってないのでX~Yの間の数値と言う感じで抽出したいです。 よろしくお願いします。

  • OpenOfficeで文章から特定文字列を抽出する

    OpenOfficeを利用しています。 かなり異例なのですが、 ・文章の中に特定の文字列があるかを検索→ある場合はTrue、ない場合はFalce ・Trueの場合VLOOKUPでその文字列を参照として指定された数値を返す このようなことをやりたいのですが、なにかうまくやる方法はないでしょうか? マクロの知識がないのでできれば関数でお願いします。 そのような方法がなければ文章中の特定の文字列を抽出、その抽出した文字を参照としてVLOOKUPで指定された数値を返す、という方法でも構いません。 例として画像を添付しておきます。 例と言うよりは、実際に作ってるものなのですが…… A列からE列までをVLOOKUPで使う参照表とし、G列の文字列を検索値として、D列の数値をI列の結果として返したい、ということです。 よろしくお願いします。

専門家に質問してみよう