• ベストアンサー

Excelで、データの抽出について質問します。

Excelの同一セル内の数字のみの抽出について教えて 下さい。 セルA1:カベシタジゴウハン 9X 50X1800 D9 セルA2:ウケゴウハン T5.5 40X 300 U7 セルA3:ゴウハンK 2.5X 60X 80 スペーサー セルA4:ランバP *412X3547 W2 セルA5:VSF K 12.5X 47X 869 LE セルA6:VSF J*12X 68X2395 Wメン WX とシートに入っているとします。これを、 セルB1:9  セルC1:50  セルD1:1800 セルB2:5.5  セルC2:40  セルD2:300 セルB3:2.5  セルC3:60  セルD3:80 セルB4:空白 セルC4:412 セルD4:3547 セルB5:12.5 セルC5:47  セルD5:869 セルB6:12  セルC6:68  セルD6:2395 と入るように関数を使うにはどうしたら良いでしょうか。 マクロを使うことになっても構いませんので、教えて下さい。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

力技なので参考程度に! n-junさんの指摘されている、空白の部分は考慮していません Sub test() Dim i, ii, iii Dim a As String For i = 1 To Range("a65536").End(xlUp).Row a = "" iii = 0 For ii = 1 To Len(Cells(i, 1).Value) If IsNumeric(Mid(Cells(i, 1).Value, ii, 1)) Or Mid(Cells(i, 1).Value, ii, 1) = "." Then a = a & Mid(Cells(i, 1).Value, ii, 1) ElseIf a <> "" Then Cells(i, 2).Offset(, iii).Value = a a = "" iii = iii + 1 End If If iii = 3 Then Exit For Next ii Next i End Sub

08517502
質問者

補足

ご回答ありがとうございます。 すごい!思い通りに抽出できました。 補足なのですが、 セルA7:ゴウハン 13 15.0X 429X 539 F4 と入力されている場合 セルB7:15.0 セルC7:429 セルD7:539 と入るように出来ますでしょうか? 最初に記述していなくて申し訳ございません。

その他の回答 (6)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.7

n-junです。 >セルB2:5.5  セルC2:40  セルD2:300 T5.5の5.5を取り出すというのがなければ、 Sub try_3()  Dim RegExp As Object  Dim r As Range  Dim v As Variant  Dim st As String, i As Integer  Set RegExp = CreateObject("VBScript.Regexp")  RegExp.Pattern = "(\d+\.{1}|)\d+\X{1}\d+(\X{1}\d+|)"  For Each r In Range("A1:A7")      st = Replace(r.Value, "X ", "X")      If RegExp.test(st) Then         v = Split(RegExp.Execute(st)(0), "X")         i = IIf(UBound(v) = 1, 1, 0)         r.Offset(, 1 + i).Resize(, 3 - i).Value = v      End If  Next  Set RegExp = Nothing End Sub こんな感じでしょうか。

08517502
質問者

補足

n-junさん何度もご返事ありがとうございます。 #7のマクロを使わせてもらうと、 12.0X600X600で組み合わせされているものが 全て抜き出すことが出来ました。 充分満足なお答えを頂きましたので、 >セルA2:ウケゴウハン T5.5 40X 300 U7を >セルB2:5.5 セルC2:40 セルD2:300 この件関しては諦めることにします。 お手間おかけしました。 ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

n-junです。 #4のコードは、セルA1~A7にデータがあって実行結果をイミディエイトウィンドウに 表示する物です。 イミディエイトウィンドウは VBE画面で「表示」-「イミディエイトウィンドウ」をクリックしてください。 #5は文字列から、数字X数字X数字 の部分を取りだした物です。 必要な情報が上記であれば、あとはSplit 関数でわけてセルに代入するだけです。 ただ、 >5.5が何故必要なのかが・・・?ですね。 をクリアできないんです。 ⇒私の中で条件が絞り込まれていないだけです。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

#4です。 仮に、 Sub try2() Dim RegExp As Object Dim match As Variant Dim st1 As String Dim st2 As String st1 = "ゴウハン 13 15.0X 429X 539 F4" st1 = Replace(st1, "X ", "X") st2 = "VSF J*12X 68X2395 Wメン WX" st2 = Replace(st2, "X ", "X") Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "(\d+\.{1}|)\d+\X{1}\d+(\X{1}\d+|)" MsgBox RegExp.Execute(st1)(0) & vbLf & RegExp.Execute(st2)(0) Set RegExp = Nothing End Sub の様な状態まで持って行けたとしても、 >セルA2:ウケゴウハン T5.5 40X 300 U7 >セルB2:5.5  セルC2:40  セルD2:300 5.5が何故必要なのかが・・・?ですね。

08517502
質問者

補足

色々なパターンを考えて頂きありがとう ございます。 こちらのマクロもそのまま貼り付けさせてもらいました。 すると、Microsoft Excelと表示された小窓が出てきて、 そこには、 15.0X429X539 12X68X2395 と出ていました。これはどういう意味なのでしょうか? 度々の質問ご迷惑おかけします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

#1です。 数字だけをばらすのなら、 Sub try() Dim RegExp As Object Dim match As Variant Dim r As Range Dim st As String Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\d+\.{1}\d+|\d+" RegExp.Global = True For Each r In Range("A1:A7") If RegExp.Test(r.Value) Then For Each match In RegExp.Execute(r.Value) st = st & " " & match.Value Next Debug.Print st st = "" End If Next Set RegExp = Nothing End Sub でも出来ますが、結局必要・不必要の判定が難しいですね。 ⇒せめて、数字X数字X数字 と一定(半角スペースなし)であればできると思いますよ。

08517502
質問者

補足

ご回答ありがとうございます。 こちらからの返事が遅れてしまい申し訳ございません。 考えて頂いたマクロをそのまま貼り付けましたが、 マクロが機能しませんでした。 なぜなのでしょうか? 度々頼ってしまい申し訳ございません。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

#2です 私としては、n-junさんと同様に条件を確定するヒントになればと思い コードを提示したつもりだったのですが・・・ 文章の説明の方が良かったですかね 補足のようなことは予想できたので「力技なので参考程度に!」としたのですが ちゃんと説明しておいた方が良かったですね 期待させて申し訳ありません 補足のような条件が加わると、色々考えてみましたが 私にはお手上げです 重ね重ね申し訳ありませんでした

08517502
質問者

お礼

お返事ありがとうございます。 こちらの返事が遅くなり申し訳ございません。 わざわざお時間頂きありがとうございました。 最初に作ってくださったマクロを使わせて 頂きます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

回答ではないですが。 セルB2に5.5が入ったり、セルB4が空白であったりする条件があるのでしょうか? 他の値で比較すると"X"で区切られた3個の数字がそれぞれ入っているようですが、 B2は違いますよね? ⇒この条件の場合B4が空白なのは何となく見えそうですが。 条件を明確にされた方が宜しいかもしれません。

08517502
質問者

お礼

ご回答ありがとうございます。 >セルB2に5.5が入ったり、セルB4が空白であったりする条件があるのでしょうか? そうなんです。 法則を付けられない条件の中、データを抽出する 方法を探しています。 やはりこの条件では無理がありますよね… ありがとうございました。

関連するQ&A