- 締切済み
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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 >何故でしょうか… 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 で済んでいます。
正規表現のパターンに違和感があります。このパターン "^【[(1)-(20)](\d*/\d*)" は、正しくマッチングできる ものか、確認していますか? 確認していない場合は、チェックページなどで確認される ことをお勧めします。 ○チェックページの例 http://js.wakastream.jp/regex.html ⇒ [パターン文字列]の項にパターンを、[対象文字列]の 項にチェックしたい文字列を入力してみてください。 [判定結果]にマッチングした文字列が背景色赤で表示 されます。背景色が変わらない場合(白のままの場合) はマッチングが失敗しています。 なお、私が違和感を感じているのは "[(1)-(20)]" の部分です。 これはおそらく間違った書き方をしています。