• ベストアンサー

数値データの抜出

ss 6t×50h×1000L 6t×50h×1000L 上記のようなデータがあります。 tの前の6、hの前の50、Lの前の1000を取り出す関数をそれぞれご教授くださいませ。 パターンとしては・・ *t×*h×*L * *t×*h×*L ←最初にssなどの文字列がある時があります。ただし、抜き出すtの数値の前には半角スペースがあります。 お手数掛けますが、よろしくおねがいします。

noname#241383
noname#241383

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

  • ベストアンサー
回答No.5

要望があったので説明します。(添付図参照) 数式は中から考えていきます 1..B2セル =B$1&"×"  「t」と「×」をつなげます。  対象文字列前方にtが含まれていた時に対応するための布石  よって、「t×」「h×」「L×」が前方に含まれているときは使えない。 2.C2セル =FIND(B2,$A2&"×")  「t×」の場所を文字の左から検索します。  $A2&"×"は「L×」検索用 3.D2セル =LEFT($A2,C2-1)  「t×」の手前までの文字を取り出すために 2.から-1しています 4. E2:I2セル =RIGHT($D2,E$1)*1  文字を取出し、*1で数値化できるものを数値にする。  違うものは#VALUE!エラーとなる  この部分が配列 5. J2セル =8^8 単なる大きな数値。16,777,216  7文字(7桁)取り出しているので、9,999,999よりも大きな数値であればよい 6. K2セル =LOOKUP(J2,E2:I2)  配列部のエラーを無視してくれる。  5.の条件の時、一番右(列方向なら下)の数値を拾ってくれる。  という特性を持ったLOOKUP関数を使用しています

noname#241383
質問者

お礼

いろいろ考えていたのですが、とても難しかったです。 しかしながら、とても役に立ち感謝しています。 ありがとうございました。

その他の回答 (6)

noname#204879
noname#204879
回答No.7

[No.5]へのコメント、 CoalTarさん、懇切丁寧な解説を多謝です。 御蔭様で良く理解出来ましたが、私には思い付かない手法でした。 特に『$A2&"×"は「L×」検索用』なる手法に感銘を受けました。 その手法を利用させて戴いても、私が考え付くのは精々添付図の様な作業列を用いる方法です。参考迄に載せて置きます。ワーストアンサーでも私は辞退しません。(^_^) F1: =IF(ISERROR(FIND(" ",A1)),0,FIND(" ",A1)) G1: =FIND("×",$A1&"×",F1+1) セル G1 をズズーッと右2列にドラッグ&ペースト B1: =VALUE(MID($A1,F1+1,G1-F1-2)) セル B1 をズズーッと右2列にドラッグ&ペースト 範囲 B1:I1 をズズーッと下方にドラッグ&ペースト 【独白】それに付けても、何故質問者は梨の礫を決め込んで居るのだらう?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! VBAになってしまいますが、一例です。 ↓の画像のようにデータは2行目以降にあり、C~E列に表示するとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long, j As Long, k As Long, cnt As Long Dim str As String For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row j = 3 For k = 1 To Len(Cells(i, 1)) str = Mid(Cells(i, 1), k, 1) If str Like "[0-9]" Then cnt = k Do While Mid(Cells(i, 1), cnt, 1) Like "[0-9]" cnt = cnt + 1 Loop Cells(i, j) = Mid(Cells(i, 1), k, cnt - k) j = j + 1 k = cnt End If Next k Next i End Sub 'この行まで ※ 単に数値の連続を判断して、それを順番にC~E列に表示しているだけです。 ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。m(_ _)m

noname#204879
noname#204879
回答No.4

[No.1]の CoalTarさんへ、 いつも参考にさせていただいております。 今回もお見事な回答と思っておりますが、私には難解です。 》 説明は要望があれば。 質問者がご「要望」してくれることを待っているのですが、一向にそうしてくれないので私から… どうかご「説明」をお願いします。

回答No.3

一発で求めるなら、No.1さんの配列数式など。ベストアンサーは辞退します。 他の簡単な方法としては、「区切り位置」の機能でセルを分割。 「ss 6t×50h×1000L」などのデータを 1 列に並べ( 1 列ずつしか処理できません)、列全体を選択した状態で、リボン「データ」の「区切り位置」ウィザード起動。「カンマやタブなどの…」を指定し、「次へ」。「その他」をチェックしてその右のボックスに「×」を入力し、完了。 「×」の代わりに「 」(半角スペース)で同じことをすれば、スペースの位置で分割されます。 続いて、新しくできた 3 列に上と同じことを繰り返します。「カンマやタブなどの…」の代わりに「スペースによって…」を選ぶと、その次に出てくるプレビュー画面で、区切り位置とする縦線の位置をクリック、ドラッグ、ダブルクリックによって決められます。つまり「t」、「h」、「L」の記号だけ、別の列に分けられます。 なお添付図では、 C1 セルに「=if(b1="",a1,b1)」と入力し、 C 列をコピーして D 列に値複写してから、「スペースによって…」での処理を実行しました。 注意点。「区切り位置」は、複数の列を同時には処理できません。また、列の分割によって右方の既存データが上書きされてしまう場合は、ウィザードの完了時に警告が出ます。それを防ぐため、列の挿入などによって十分な間隔を空けてから、ウィザードを開始します。

回答No.2

ちょっとゴチャゴチャしてるけど、空白文字が適当に散らばっていても大丈夫、、、 B~C列:空列 D1~F1:単位文字t/h/L D2: =SUBSTITUTE(MID($G2,1,FIND(D$1,$G2)-1),B2&B$1&C2&C$1,"") E2,F2にコピー G2: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM($A2)," ",""),"×",""),"ss","") D2~G2: 下方向にもまとめてコピー

回答No.1

小数点も数えて、7桁までとして =LOOKUP(8^8,RIGHT(LEFT($A2,FIND(B$1&"×",$A2&"×")-1),{1,2,3,4,5,6,7})*1) 添付図参照 説明は要望があれば。

関連するQ&A

  • 文字列から数値を抜き出して計算

    あいう 1200t×398h×1200L こういった数字混じりの文字列があります。 "あいう"とかの文字列が含まない場合もあります。 要は、thLの左の数値を抜き出して掛け算する関数はできますでしょうか? お手数かけますがよろしくお願いします

  • 文字列から数値を抜き出して計算する関数

    5t×5h×5Lとあれば、5×5×5の計算結果を返す関数をご教授くださいませ。 t×h×Lのワンセットがあれば、tの左、hの左、Lの左の数値を抜き出して計算していただけるといいです。 316L 5t×5h×2Lとなっている場合もあります。 それでも、t×h×Lの左横以外は無視です。 5×5×2で50が正解です。 よろしくご教授お願いします。

  • 時間部分を括弧で囲う

    文字列中に時間相当の数値がある場合  時間のみ括弧で囲うワークシート関数を教えて下さい。 例えば  A2: Green ROM 12:34 B2: Green ROM (12:34) A2: soft Ball 05:12 B2: soft Ball (05:12) 時間区切りは、半角(:)又は全角(:)がありえます。 スペースも、半角、全角 がありえます。   見栄えを整えるのにスペースが連続することもあります。    例:soft Ball 0512 時間は、以下の形式を考慮します。 hh:mm:ss h:mm:ss mm:ss m:ss

  • エクセル 数値データを桁をそろえて文字列データに変換するには

    よろしくお願いします。 エクセル2002を使用しています。 数値データとして整数1桁、2桁、3桁のデータが混在してあります。 これを1桁、2桁のものは前にゼロを付けて全て3桁の文字列に変換する方法はありますか? できれば関数を使って 例  数値 文字列   8⇒008  12⇒012 235⇒235  11⇒011 できた文字列で品番コードとして使用します。 どなたかご存知の方、ご教授お願いします。

  • Excel関数で数値のみ取り出したい

    Excelの関数について教えてください。 A列には単位付の数値が入っています。数値の桁数は決まっていませんが、3桁区切り、小数も含まれて居ます。単位はkm2とか、m3、L、Kw、gとかの3文字以内です。 この列から、B列に「数値のみ取り出したい」場合の関数式を教えてください。

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

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

  • 先頭から連続する数値の桁数を取得したい

    oracleの関数で 例)項目 ADATA VARCHAR2(100) このADATAには (1)先頭から数字が8桁で次に文字(スペース含む)が入っているケース (2)先頭から数字が14桁で次に文字(スペース含む)が入っているケース (3)先頭の1バイト目から文字 という3つのパターンがあります。 レコードごとに(1)か(2)か(3)かを判別したいのですが、何かスマートな方法ないでしょうか? ×1文字ずつ数値かどうか比較し、ループする。 ○先頭から数値が何桁続いているか取得し、(1)8 (2)14 (3)0みたいに取得できる関数はないでしょうか? どなたかよい方法ご存知の方、ご教授ください。 以上よろしくお願い致します。

  • エクセルの関数で、数値に直したい

    120 Km のように単位とスペースが後ろに付いた数字を、数値の値を求める関数は無かったでしょうか?この場合は、120という値が求まればいいのですが。valueではだめなようですが、文字列の切り出しをしなくでも、一度で数値を取り出せるものはありませんでしょうか?

  • Excelの数値データの表示について

    Excelを利用していて、数値を入力し、右詰をすると コピーしてきた数値は問題なく右寄せされるのですが、 直接入力した数値が半角一文字分空いてしまいます。 どうしてでしょうか?    12,345   67,890    98,765 という感じです。 上記は半角数字と考えてください。 提出するものなのでカタチを綺麗に整えたいのですが、 数値がそろわないのでがたがたです。 以前に同じ質問があれば申し訳ございません。 よろしくおねがいいたします。

  • Excelのセル内の文字操作について

    Excelのセル内に、例えば Rmax_20.5s (←_ は半角スペースです) などの様な文字列が入っているのを、関数を使用して 20.5 の様に数値のみを残すことは可能でしょうか。 REPLACEやSEARCHなどで試みましたが、出来ませんでした。 どうぞ宜しくお願い申し上げます。

専門家に質問してみよう