プロが教える店舗&オフィスのセキュリティ対策術

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

以前 QNo.5823420 で質問させて頂いたんですが
再度質問させてください。

"オーダー番号"+"半角スペース"+"部品型番"+"半角スペース"+"個数"+"半角スペース"+"部品名"
というような文字列の中から個数の数のみを抽出する方法を教えてください。
"文字列"+"半角スペース"+"文字列"+"半角スペース"+・・・と文字列の繋がる数は決まってませんので
個数は何番目のスペースの後にくるかは不定です。
数量の半角"ケ"とその前の半角スペースまでの間の数字を抽出したいです。

例1)文字列 :ABC110 XXYYZZ5566 2ケ ****
  抽出文字:2

例2)文字列 :ABC XYZ 5566 DDEE11 3ケ FFGG
  抽出文字:3

よろしくお願いします。

A 回答 (7件)

こんな感じかな? 9桁まで


=LOOKUP(10^10,MID(A2,FIND("ケ",A2)-{1,2,3,4,5,6,7,8,9},{1,2,3,4,5,6,7,8,9})*1)
配列数式(配列定数なので[Enter]のみの確定でOKです)
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
うまく抽出できました。
データの中には個数の前のスペースが無い物もまれにあったんですが
この方法はその場合でも抽出ができました。
配列数式はまだよくわからないんですがありがとうございました。

お礼日時:2010/08/30 18:55

「ABC110 XXYYZZ5566 2ケ ****」


で「ケ」の位置が何ケタ目にあるか見つけ出す。

「ABC110 XXYYZZ5566 2」
見つかった位置の1文字前から左側を抜きとる。

「 2」
右から1つ目に見つかる空白を探す。その右側を抜きとる。

「2」
以上です。
あとはこれらを文字列操作の関数の組み立てで実施。
普通に考えたらこの原理でしょう。

------------------------

空白をカンマ「,」に置き換えてCSVとして保存し、開き直すと
各列が「ABC110」「XXYYZZ5566」「2ケ」「****」ですから、
こっちのが悩まずにできて早いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
基本的な考え方を教えていただきありがとうございます。

お礼日時:2010/08/30 18:53

エクセルで検証した数式をコピー貼り付けしたのですが、スペースの連続が削除されてしまうようですね。


正しくは以下のように置換後の文字列にスペースを5つ連続した以下のような数式です(全角で入力しました)。

=RIGHT(SUBSTITUTE(REPLACE(A1,FIND("ケ",A1),100,"")," ","     "),5)*1
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
うまく抽出できました。
1番目に個数がある場合も抽出できました。

お礼日時:2010/08/30 18:53

ユーザ関数を作って使う方法を……


標準モジュールに以下のコードを入れます。

Function fSample(rng As Range) As Long
  fSample = 0
  Dim sData() As String
  sData = Split(Left(rng.Text, InStr(rng.Text, "ケ") - 1), " ")
  fSample = CLng(sData(UBound(sData)))
End Function

セルには =fSample(A1) と、入れます。
「ケ」が無かったり、「ケ」の前が文字列だったりした場合は #VALUE!が返ります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
VBAは自分にはまだ難しいので
試すところまでいけませんが
今後の参考とさせていただきます。

お礼日時:2010/08/30 18:51

たとえば数字が5桁までなら、以下のような数式で数字を抽出することができます。



=RIGHT(SUBSTITUTE(REPLACE(A1,FIND("ケ",A1),100,"")," "," "),5)*1
    • good
    • 0

まずは「ケ」を探します。

個数がせいぜい2桁までだと仮定できれ
ば、「ケ」の前2文字を取り出します。個数が1桁だと頭にスペース
が付きますが、気にせず1を掛けてみます。ちゃんと数値になります
ね。おしまい。
=mid(A1,find("ケ",A1)-2,2)*1

個数が4桁くらいもアリなんだという場合は、「ケ」の位置から5文
字くらい遡った位置をスペースの検索開始位置にします。抜き出す
文字数は「ケ」の位置と「ケ」から5文字以内のスペースの位置の差
ですから、本当は作業列があった方が気楽ですね。
=mid(A1,find(" ",A1,find("ケ",A1)-4),find("ケ",A1)-find(" ",A1,find("ケ",A1)-4))*1
こいつは個数の前の文字列が極端に短いとエラーになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
うまく抽出できました。
ただ1番目に個数がある場合は抽出できませんでした。

お礼日時:2010/08/30 18:50

以下のような式でどうでしょうか。


=MID(A1,FIND(" ",A1,FIND(" ",A1)+1)+1,FIND("ケ",A1)-FIND(" ",A1,FIND(" ",A1)+1)+1)-1
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼遅くなりすいません。
やってみましたがうまくいきませんでした。

お礼日時:2010/08/30 18:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!