• ベストアンサー

文字列+数字から最大を抽出する関数

あああ1 あああ2 いいい1 aa1 あああ3 ab1 ab2 いいい2 ab3 ab4 ab5 以上のようなデータが 縦1列に並んでいます。 これを以下のように抽出するには どのような数式を組めばいいですか? ご教授お願いします! (文字列が)あああ(の最大は)3 (文字列が)いいい(の最大は)2 (文字列が)aa (の最大は)1 (文字列が)ab (の最大は)5

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

  • ベストアンサー
  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.3

No.2です。OkWAveの文字数制限により詳しくは説明しきれません。概略説明になります。 No2にて回答のVBAの概略は以下の通りです。 1行→test: この処理に名づけたVBAの名前、VBAの処理内容にマッチした好きな名前を付けられます。 2~4行→Dim はVBAで使う変数の種類を定義する挨拶文 Dim とAs の間は、VBAで使われる変数名で何を指しているか推測しやすい文字を採用します。2行の”r”はシート内の行番号(row)のイニシャル”r”を採っています。 Long、 Integer、Stringは変数の種類で、夫々、大きな数値、整数、文字を示しています。 5行→C~E列の内容を消去 6行→1行、C~E列に項目名(「文字列」etc)を書き込む 7行~25行→Excelシートの2行からB列の最終行の各行について順次1行ずつVBAの8行から 17行までの処理を繰り返し行いなさいの意味 8行→dtは B列の各セルに書かれたデータ、su=0は変数suに”0”を代入(リセット)を行う。因みにsuはデータ内の数値部分を抽出し格納する変数。 9行~15行→”dt” の1文字目から最終文字目(Len(dt))までVBAの10行から 14行までの処理を繰り返し行いなさいの意味、Len(dt)はB列の各セルに書かれたデータの文字数 10行→B列の各セルに書かれたデータに数字があったら11行目の処理をしなさい 11行→数字を数値化、Ex. dt=”○○123”ならsuは順次 “1”→”1×10+2” →”(1×10+2)×10+3”=123のように変化し、最後は数値”123”となる 12行”dt”内が数字以外なら13行の処理を行う 13行→”dt”内の左側文字部分を抽出し変数”moji”に代入する。 16行→C列に文字部分”moji”を書く 17行→D列に数値部分”su”を書く 19行~20行→文字部分昇順、数値部分降順に並び替え 23行→文字列が前の行と異なったら、その文字列の数値部分が最大を示す故E列に”◎”を記入 26行→A列の昇順に並べ替えを行い、元のデータ並びに戻す 27行→VBA処理の完了 詳しくは、VBAのHELP画面で勉強されますよう希望します。 <HELP画面の表示方法> Moduleに貼りつけたVBAのコード内のスペース文字で区切られた単語 (Ex.”Dim”))内の任意の位置にマウスの「I」カーソルを合わせ「F1」キーを押すと、HELP画面が表示され、その語の説明と用例が表示されます。 小生は、この様にしてHELP画面を見ながら少しずつ用例を覚え、ホストコンピュータからExcel にダウンロードしてもらった1万件以上の受注データの分析にVBAを活用しました。

masunona
質問者

お礼

ばたばたしていてしばらく来れませんでした。 ご丁寧にありがとうございます! じっくり読ませていただき 早速勉強させてもらいます!! 本当にありがとうございます!!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.2

この抽出を行うには数式では不可能の様。 残された方法は、この抽出作業を人が行う際の思考手順を「VBA」というExcelなどで働くプログラム言語で表現し、そのプログラムの起動操作を人が行い、抽出作業をプログラムに行わせる方法です。 その為には (1)プログラム言語をExcel内に書く方法を知ること (2)そのプログラムを起動する方法を知ること (3)「VBA」なるプログラム言語を知ること が必要です。 (1) は、http://excelvba.pc-users.net/fol1/1_1.html等を参考に(2) はhttp://www.officepro.jp/excelvba/ini/index3.html等を参考にしたら容易に習得できます。 (3) は自身にあった本を探して根気強く学習するのが良いでしょう。しかし(3)は、長期間を要しますから、当質問に対するプログラム例を以下に参考に掲げます。コピー&貼り付けしてお試し下さい。 Sub test() Dim r As Long Dim p, su As Integer Dim dt, moji As String Columns("C:E").ClearContents Cells(1, "C").Value = "文字列": Cells(1, "D").Value = "数値": Cells(1, "E").Value = "抽出" For r = 2 To Range("B65536").End(xlUp).Row dt = Cells(r, "B"): su = 0 For p = 1 To Len(dt) If IsNumeric(Mid(dt, p, 1)) = True Then su = su * 10 + Val(Mid(dt, p, 1)) Else moji = Left(dt, p) End If Next p Cells(r, "C").Value = moji Cells(r, "D").Value = su Next r Columns("A:E").Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("D2") _ , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=True For r = 2 To Range("B65536").End(xlUp).Row If Cells(r, "C") <> Cells(r - 1, "C") Then Cells(r, "E").Value = "◎" End If Next r Columns("A:E").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess End Sub

masunona
質問者

お礼

しばらく仕事が忙しくのぞけずにいました。 やっと作業ができそうなので来てみたら すばらしい回答ありがとうございます!!! 関数で簡単にできそうな気がしていたのですが 私にとっては相当難しい作業です。。。 VBAのほうは本当に初歩の初歩の初心者なので ちょっと行列を変えようとしただけで まったく思うように動いてくれなくなりました。。。 そこでご面倒おかけしますが お時間あるときにでもプログラムの概要 (この行はこんな意味、などざっぱなもので結構です!) を教えていただけると助かります! どうぞ宜しくお願いします!

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんにちは えっと、回答するような立場じゃないんだけど、いま質問したついでに他のスレッド見てたら目に入ったので・・・ んで、処理系によって違うし言語も書いてないのであれです、コードは書けませんが、目的の数値を正規表現で抽出して比較関数にぶち込めばいいんでないかと。ま、データは配列格納なのかな。言語が不明なのでわかりません。 当方、WINDOW初心者です。ん?これOSの問題か?

masunona
質問者

お礼

すみません。せっかくなんですけど まったく意味がわかりませんでした。。。 soudan1989さんが初心者とおっしゃるなら 私まだ生まれてもない赤ん坊以下ですね。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • 【エクセル】文字列分割の関数

    エクセルで文字列を分割する数式を探しております。 以下のデータを 右から4桁とそれ以外に分割したいのです。 20002  → 2 0002 30003  → 3 0003 40010  → 4 0010 511000 → 51 1000 1019550 →101 9550 1012279 →101 2279 2019220 →201 9220 3338850 →333 8550 たとえばLEFT関数やRIGHT関数ですと、分割というよりも 抽出になってしまい、私の求めているものとは異なってしまいます。 考えが煮詰まってしまい、これ以上進めない状態です。。。 何卒よろしくお願いいたします。

  • エクセルで文字列の最大値を抽出する方法

    文字列の最大値を抽出したいのですが 4つのセルにA、B、C、Dが入力されている場合の文字列の最大値Dを抽出する関数式を知りたい エクセルヘルプで見るとMAXAとなっていたのですが抽出する答えは”0”となってしまいます。

  • 文字列から数字をカウント

    エクセルバージョン2007 A列に以下の文字列が有る場合、数字の一塊のカウントではなく、文字列に入っています "0,1,2,3,4,5,6,7,8,9" それぞれをカウントする関数をご教授頂ければ幸いです。 12345-67890    → B列に 10 と表示 2aa-12345-00   → B列に 8 と表示 1bb        → B列に 1 と表示 以上、宜しくお願い致します。

  • 文字列の抽出について

    A列に 500行位の文字列があり、 その行の中から以下を抽出したいです。 ただ、抽出したい文字列は、0123456で始まり、abcdという文字列まで。 しかも改行されています。 ※抽出したい文字列 【A列 0123456 ~ B列 abcd】という文字列 【F列 0123456 ~ B列 abcd】という文字列 A列 0123456 B列 xxxx abcd C列 1111 D列 2222 E列 3333 F列 0123456 G列 xxxx abcd H列 4444 I列 5555 J列 6666 宜しくお願い致します。

  • 説明:エクセル関数で条件が二つの時の数値抽出

    質問ではないですが、No8332355 の回答の説明です。 下記の式 =SUMPRODUCT(($AA$75:$AA$152=X75)*($AB$75:$AB$152=Y75),$AC$75:$AC$152) の説明です。 まず、SUMPRODUCT の第1引数ですが、 ($AA$75:$AA$152=X75) は”配列数式”と呼ばれていて、{$AA$75=X75,$AA$76=X75,$AA$77=X75,・・・,$AA$152=X75} という配列データを返します。 1つづつの式は比較論理式ですから、値が一致すれば1、しなければ0となります。 (例えば、3行目で一致するとすれば、{0,0,1,0,0・・・,0}となります。) 同様に ($AB$75:$AB$152=Y75) は {$AB$75=Y75,$AB$76=Y75,$AB$77=Y75,・・・,$AB$152=Y75} となります。 この配列数式を掛け算すると、個々の対応する配列位置のデータが掛け合わされた配列データができます。つまり、X75とY75の値がAA列、AB列で一致した行のみ1となり、他は0になります。 SUMPRODUCT は、この配列と、AC列のデータを個々に掛け合わせて足し合わせるので、結果として検索列が一致した行のAC列のデータが取り出せる、というわけです。 配列数式については、ググってみれば、いろいろ解説が書かれたページがヒットしますので、そちらをご覧になって下さい。 伝わりましたかね?

  • Excel 文字列の抽出

    Excel初心者です。 1つのセルに以下のデータが入力されています。 A:文字列B:文字列C:文字列D:文字列 このセルの「C:」から「D:」の間にある文字列を 他のセルに抽出する方法を教えてください。 宜しくお願いいたします。

  • エクセル 文字列-文字列 を数式で区切りしたい

    文字列の文字数が列で同じならLEFT、RIGHTで作ることができるのですが、 左右の文字数がランダムの場合がわかりません。 (例) A列 AAA-AAAAAA AA-AAAAA AAAAA-AA ↓ B列    C列 AAA   AAAAAA AA    AAAAA AAAAA AA この時のB1とC1の数式の作り方をご教授ください。 宜しくお願いいたします。

  • 文字列抽出の方法

    こんにちは。Excelの文字列抽出の方法で、 12345あいうえと 23434Abcfsafjkfafal 98438かきくここabcdfdsfsdfasfasfja などのデータがあります。最初の5文字は必ず数値になります。数値以降の文字列を取得したいのですが、何文字あるかは不明です。その最後までデータを取得したいと考えています。mid関数を使うと思ったのですが、5文字目以降の文字列のバイト数、文字数がわからないので使うことができません。どのように解決すればよいかご教授お願いいたします。

  • Excelで複数の文字列を抽出する方法

    Excel 2007で列に、[xxxA],[xxxB],[xxxC]... といった文字列があります。 例えば、この文字列の右端が、[A]か[B]で終わる文字列のみを抽出する方法をご教授ください。 一つの文字列であれば、RIGHT関数で抽出できたのですが、2つ以上の抽出方法が判りません。 どうぞよろしくお願いいたします。