• 締切済み

特定の文字や数字だけを抽出

14H010 14S001 14005 14H001B 14H010B 14005 14S004 1)左から2つだけの数字だけを取り出す方法 2)もし左から二つの数字の隣の文字だけ(HやS)を取り出す方法(2文字の可能性もある) 3)真ん中の3つの数字を取り出す方法(010,001,005) 4)右の文字(B)だけを取り出す方法(2文字の可能性もある) それぞれの方法をIF関数とLEN, RIGHT, LEFT, MID関数の組み合わせを使って抽出できるようなのですが、何時間かけても抽出ができません、、、。 たくさんの質問になりますがお答えいただけると幸いです。

みんなの回答

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

>1)左から2つだけの数字だけを取り出す方法 はLEFT関数を使って、やさしいでしょう。 しかし、質問者は第2文字に英字が来ない保証をいっていないので、質問として不完全。 来る可能性があればどうするの? >2)もし左から二つの数字の隣の文字だけ(HやS)を取り出す方法 これも1)の問題とで、確定的に第3文字から考えてよいのか?文字が続いておれば第3文字+第4文字も抜き出すらしいが。 ーー エクセルでは、そもそも関数で、「条件該当分の抜出し」は難しい式になる。 さらにまた、エクセルにおいて、データの文字種(数字・文字などの別)で、抜出しを考えるのは難しい。 またデータの中身の出たとこ勝負で英字数字の出現を条件にすると、難しさがある。 適当な関数がないのと、各桁文字ごとの繰り返し判別が、関数では難しい。 また、IF関数などで、該当分岐が関数では書きにくいので、判り難い式になりがち。 WEBで調べても、LEFT、RIGHT、MID関数とISNUMBER関数やISTEXT関数やフラシュフィル利用の記事(VER 2023以後)しかない。 == だから#1のように、VBAの回答の記事が出る。それも正規表現をつかうコードだ。 ーー 質問者は、VBAはお呼びではないだろうから、人間の判断などを混ぜて人手中心でやらざるを得ないだろう。 1000-2000レコードぐらいなら、(あれこれ調べたり、なれたりするより)人間判断と手作業でやる方が、早いだろう。その際ソートや RIGHT, LEFT, MID関数を使って中間結果的にセル出したり、中間結果を加工する、対処を考えるとよい(しかない)。 ーー そもそもこういうコードで桁可変のコードを作ること自体が、本件の時困ることになる。製品コードなどの設計の問題だ。 == 大量にデータがあって、どうしても、であれば業者に頼むことだ。 参考 1セル全体を対象の例 A列 B列 C列 12 NUM a1 moji 23 NUM 999 NUM sd moji B列関数 =IF(ISNUMBER(A2)=TRUE,"NUM","") C列関数 =IF(ISTEXT(A2)=TRUE,"moji","")

回答No.1

VBAのコードを書いてみました。 Function RegExpExtract(strng, indx) Dim regEx, result1, result2 Set regEx = New RegExp regEx.Pattern = "(^[0-9]{2})([a-zA-Z]{0,2})([0-9]{3})([a-zA-Z]{0,2})" regEx.Global = True RetStr = "" Set result1 = regEx.Execute(strng) If result1.Count > 0 Then Set result2 = result1(0).SubMatches If result2.Count >= indx Then RetStr = result2(indx) End If End If RegExpExtract = RetStr End Function ExcelワークシートのA列に対象文字列を置き、B列に=RegExpExtract(A1,0)、C列に=RegExpExtract(A1,1)、D列E列も同様としてください

関連するQ&A

  • 特定文字列の抽出

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

  • エクセル 文字列で右から一文字づつ文字を抽出したい

    エクセル2010を使用しています。 mid(抽出したいセル,左からの文字数,抽出したい文字数)と作業を行ってきましたがmid関数は常に左から抽出されるようです。 そこでright(抽出したいセル,抽出したい文字数)と試みましたが、一番右はOKですが2文字目、3文字目とどのように抽出してよいかわかりません。 どなたかご教授いただけませんでしょうか。

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

    エクセルバージョン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させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • ACCESS 文字の抽出方法

    ACCESS2000で開発しています。 簡単なことだと思うのですが、ある文字列のなかから"/"以外の文字を抽出するにはどうすればよいですか? 例)年月日 テキスト ”2008/06/23”               ↓            ”20080623” LEFT関数やMID関数でできるのですが、できれば上記の方法でやりたいと思っています。 よろしくお願いします。

  • 指定した文字列が抽出できる関数

    Excelで、指定した文字列だけを抽出表示する場合、「文字列を先頭(左)から抽出する」などの関数は「LEFT関数」や「RIGHT関数」がありますが、位置の指定ではなく、文字列の中にある、特定の文字だけを指定して抽出してできる関数は何でしょうか? たとえば「ラーメン」「うどん」「そば」いずれかを「含む」文字列が入っているセルの中から、「うどん」のセルだけを抽出して表示するという場合です。

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

    お世話になります。 文字列+数字から数字のみを取り出す関数はエクセル技道場などで紹介されている =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|B|C|D| -------------- 1|あ|い|う|え| -------------- 2|お|あ|あ|か| -------------- 上記は1行目に左から「あ」「い」「う」「え」が入力されていることを表しています。 この表の中から、一番多く入力されている文字だけを別のセルに抽出させるにはどのようにしたら良いでしょうか。 上記の例を使用すると、A列の5行目(任意のセル)に「あ」と抽出するようにしたいです。 いろいろと調べてみましたが、このように表の中で最も多く入力されている、「文字」または「数字」だけを抽出するという処理方法がみつかりませんでした。 マクロなら可能でしょうか? このような処理ができる関数もなさそうなので、無理なのかな。 アドバイスを御願い致します。

  • 【Excel】特定の文字間の数字を取り出す

    Excel2003を使用しています。 あるセルに「●●●A9B××…」と入力してあった場合、AとBの間にある数字“9”を取り出すにはどうしたらいいでしょうか? 全体の文字数は変化しますが、AとBという文字は必ずあって、その間にある数字だけを取り出して、それを別の計算で使用したいのです。数字は1桁か2桁のいずれかですが、関数の組み合わせ等で可能でしょうか? よろしくお願いします。

  • Excelで数字だけ抽出

     Excelを最近になって職場で使い始めました。 初心者ですのでよろしくお願いします。  「パソコン(25%)」,「プリンタ(55%)」のような列の中から %の前の数字の部分だけを抽出したいのですがうまくできません。 MIDやLEFTだと、%の前の部分の文字数が同じでないといけないし、、。  今は隣の列に数字だけを手入力して、その数値を使って 計算しているのですが面倒なので、なにかいい手段があれば 教えてください。    

  • 文字と数字を1文字ずつ分割し右詰めさらに0は空白

    エクセルで仕訳伝票を作成していますが文字と数字を1文字づつ分割し右詰までできましたが、0のばあいは空白にしたいです。 =IF(COLUMNS(P:$P)>LEN(TEXT($A9,"¥0;¥-0")),"",LEFT(RIGHT(TEXT($A9,"¥0;¥-0"),COLUMNS(P:$P)),1)) 色々調べてこの関数を使っていますがA9に金額を入れ¥0は空白にしたいです。よろしくお願いいたします。

専門家に質問してみよう