- ベストアンサー
文字列から数値を抽出したいのですが・・。
文字列から数値(integer型)を抽出したいのですが、うまくいきません。 val関数だと文字の途中の数値が判別できないし、困っています。 よろしくお願いします。 ※以下、文字列と数値の関係です。 ・"文字列" → 抽出したい数値 "0k,abc,5k,abc3.0" → 0530 "abc()_3t" → 3
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「プロジェクト」-「参照の追加」-「COM」で Microsoft VBScript Regular Expressions 5.5 を選択してOK。 コマンドボタン3での実行できたコード。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim re As New VBScript_RegExp_55.RegExp Dim matchs As VBScript_RegExp_55.MatchCollection Dim matchstr As VBScript_RegExp_55.Match 'Dim submatch As VBScript_RegExp_55.SubMatches Dim v() As String, x() As String Dim i As Integer ReDim v(0 To 4), x(0 To 4) v(0) = "abc012()_001t" v(1) = "abc3()_2t" v(2) = "abc5()_3t" v(3) = "abc6()_4t" v(4) = "abc7()_5t" re.Pattern = "\D*(\d+)\D*" re.Global = True For i = 0 To UBound(v) If re.Test(v(i)) = True Then matchs = re.Execute(v(i)) For Each matchstr In matchs x(i) = x(i) & matchstr.SubMatches.Item(0) Next Debug.Print(v(i) & " " & x(i)) End If Next End Sub 初めの宣言方法も違うようですね。 > ReDim v(0 To 4), x(0 To 4) 配列は0からのようです。 (なんせ2005は初めたばかりで。ExcelVBAならよくやってますけど) ご参考になれば。
その他の回答 (4)
- n-jun
- ベストアンサー率33% (959/2873)
VB6.0で参考URLの参照設定を行なった後で、 コマンドボタンを押すとイミディエイトウィンドウに書き出してる サンプルです。 Private Sub Command1_Click() Dim re As New RegExp Dim matchs As MatchCollection Dim matchstr As Match Dim submatch As SubMatches Dim v() As String, x() As String Dim i As Integer ReDim v(1 To 5), x(1 To 5) v(1) = "abc012()_001t" v(2) = "abc3()_2t" v(3) = "abc5()_3t" v(4) = "abc6()_4t" v(5) = "abc7()_5t" re.Pattern = "\D*(\d+)\D*" re.Global = True For i = 1 To UBound(v) If re.Test(v(i)) = True Then Set matchs = re.Execute(v(i)) For Each matchstr In matchs Set submatch = matchstr.SubMatches x(i) = x(i) & submatch.Item(0) Next Debug.Print v(i), x(i) End If Next End Sub ご参考になれば。
補足
回答ありがとうございます。 しかし、実はVB2005を扱っているんです。 なので、いただいたプログラムが正しく動きませんでした。 VB2005で実行するとするとどうプログラムすればよいのでしょうか? 何度もすみません。。。
- n-jun
- ベストアンサー率33% (959/2873)
>しかし、実は僕はまだVB初心者なためか ところでVBとは、VB6.0?VB.NET(2002~2008)?或いはVBA? のどれでしょう?
- n-jun
- ベストアンサー率33% (959/2873)
ところで数値だとすると、 >"0k,abc,5k,abc3.0" → 0530 この場合は530になってしまいますが。 数字(文字列)の事ですか?
補足
数値だと、0530は530になってしまうんですね。誤算でした。 ご指摘ありがとうございます。 ちなみに僕が何でこんなことをしているのか簡単に説明しますと・・ 実は今ソートのプログラムを作っているのですが、2種類のソートの仕方を実行しないといけなくて、その前処理として抽出プログラムを作ろうとしているんです。 (1)単に数値で昇順に並び替える "abc()_3t" → 3 "abc()_5t" → 5 "abc()_2t" → 2 "abc()_1t" → 1 を、抽出した数値をもとに以下のように並び替える。 "abc()_1t" "abc()_2t" "abc()_3t" "abc()_5t" (2)0k..5k→5k..0k→0k..5k→5k..0k、のように連続する項の終わりの数値と最初の数値をくっつけるように並び替え。(abc3.0は無視するようにする。) "0k,abc,5k,abc3.0" → 05 "0k,abc,5k,abc3.0" → 05 "5k,abc,0k,abc3.0" → 50 "5k,abc,0k,abc3.0" → 50 を、抽出した”数?”をもとに以下のように並び替える。 "0k,abc,5k,abc3.0" "5k,abc,0k,abc3.0" "0k,abc,5k,abc3.0" "5k,abc,0k,abc3.0"
- n-jun
- ベストアンサー率33% (959/2873)
[VBA] 正規表現オブジェクトの使い方 http://arrow3.way-nifty.com/shige/2006/07/vba__fc44.html 等々 正規表現を使用されてみては如何でしょうか?
補足
回答、ありがとうございます。 しかし、実は僕はまだVB初心者なためか、参照ページを理解しきれませんでした。 お時間がありましたら、具体的に参考プログラム等、ヒントをいただけませんか?
お礼
お礼が遅れてすみません。 わざわざ、実行までして確かめてくれたんですね。。申し訳ないです。。 とても助かりました!ありがとうございます!!