この人頭いいなと思ったエピソード

文字列から数値(integer型)を抽出したいのですが、うまくいきません。
val関数だと文字の途中の数値が判別できないし、困っています。
よろしくお願いします。

※以下、文字列と数値の関係です。
・"文字列" → 抽出したい数値
 "0k,abc,5k,abc3.0" → 0530
 "abc()_3t" → 3

A 回答 (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ならよくやってますけど)

ご参考になれば。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。

わざわざ、実行までして確かめてくれたんですね。。申し訳ないです。。
とても助かりました!ありがとうございます!!

お礼日時:2008/01/31 23:31

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で実行するとするとどうプログラムすればよいのでしょうか?
何度もすみません。。。

補足日時:2008/01/30 07:26
    • good
    • 0

>しかし、実は僕はまだVB初心者なためか


ところでVBとは、VB6.0?VB.NET(2002~2008)?或いはVBA?
のどれでしょう?
    • good
    • 0

ところで数値だとすると、


>"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" 

補足日時:2008/01/29 08:34
    • good
    • 0

[VBA] 正規表現オブジェクトの使い方


http://arrow3.way-nifty.com/shige/2006/07/vba__f …
等々
正規表現を使用されてみては如何でしょうか?

この回答への補足

回答、ありがとうございます。

しかし、実は僕はまだVB初心者なためか、参照ページを理解しきれませんでした。
お時間がありましたら、具体的に参考プログラム等、ヒントをいただけませんか?

補足日時:2008/01/29 08:31
    • good
    • 0

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


おすすめ情報