• 締切済み

vbaで正規表現

正規表現のコードなんですが、 上手く動きません。 何故でしょうか… Sub Test() Dim reg As Object Dim ans As Object Dim c As Range         Set reg = CreateObject("VBScript.RegExp")     For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))             With reg             .Pattern = "^【[(1)-(20)](\d*/\d*)"             Set ans = .Execute(c.Value)         End With                 If ans > 0 Then             If Len(ans(0).submatches(0)) > 0 Then                             Debug.Print c.Address & "|" & ans(0).submatches(0)                             End If         End If             Next     End Sub

みんなの回答

回答No.2

こんにちは。 >何故でしょうか… 1. .Pattern = "^【[(1)-(20)](\d*/\d*)" この中で、エラーが起きています。 #1の方も書いていらっしゃいますが、「(1)-(20)」の意味が分かりません。 ついでに、「(\d*/\d*)」も論理的には、(\d+/\d+) になるのではないかと想像しています。 ・被検索値の数例を挙げてください。それを見ない限りは、分かりません。 2. If ans > 0 Then オブジェクトは、数値ではありませんから、ans.Count になります。  If ans.Count > 0 Then 3.If Len(ans(0).submatches(0)) > 0 Then 基本的には、これはいらないはずです。文字列を検索してヒットしたものですから、If ans.Count >0 で済んでいます。

noname#212058
noname#212058
回答No.1

正規表現のパターンに違和感があります。このパターン "^【[(1)-(20)](\d*/\d*)" は、正しくマッチングできる ものか、確認していますか? 確認していない場合は、チェックページなどで確認される ことをお勧めします。 ○チェックページの例  http://js.wakastream.jp/regex.html  ⇒ [パターン文字列]の項にパターンを、[対象文字列]の    項にチェックしたい文字列を入力してみてください。    [判定結果]にマッチングした文字列が背景色赤で表示    されます。背景色が変わらない場合(白のままの場合)    はマッチングが失敗しています。 なお、私が違和感を感じているのは "[(1)-(20)]" の部分です。 これはおそらく間違った書き方をしています。