【VBA&正規表現についての質問です】


行頭から ( まで "\A?.+?("
) から、行末まで ")?.+\Z"

として、()で囲まれた部分を置換(削除)したいのですが
何が悪いのか、以下のコードではエラーとなってしまいます。

ウマく動いてくれるコードをご教授ください。

<環境>
Microsoft VBScript Regular Expressions 5.5(参照設定済)
WinXP pro SP2
Office 2003 SP3


Sub 置換()

Dim ReStr As RegExp
Dim c As Range
Dim lastrow As Long
Dim DRng As Range

lastrow = Range("D65536").End(xlUp).Row
Set DRng = Range("D2:D" & lastrow)

Set ReStr = New RegExp
ReStr.Global = True
ReStr.Pattern = "\A?.+?("
For Each c In DRng
If Not TypeName(DRng) = "Range" Then Exit For
c.Value = ReStr.Replace(c.Value, "")
Next
End Sub

回答の条件
  • 1人20回まで
  • 登録:2009/04/17 13:39:28
  • 終了:2009/04/17 16:37:22

回答(2件)

id:mj99 No.1

mj99回答回数138ベストアンサー獲得回数382009/04/17 14:44:54

ポイント10pt

エラーになっているのは、ReStr.Replaceの部分でしょうか。

だとしたら、カッコがエスケープされていないのが原因です。

"\A?.+?("→"\A?.+?\("

それより、、、「()で囲まれた部分を置換(削除)したい」のなら、

単純に、"\(.*\)"で良いと思いますが。

Public Function testReplace(strData As String)
    Dim ReStr As New RegExp
    ReStr.Pattern = "\(.*\)"
    testReplace = ReStr.Replace(strData, "")
End Function
id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982009/04/17 15:32:17

ポイント10pt

質問で エラーになる原因は、正規表現の指定が正しくないからです。

カッコの場合 \を つけないと カッコには なりません。

なので

ReStr.Pattern = "\A?.+?("

ではなく

ReStr.Pattern = "\A?.+?\("

とすれば 行頭からカッコまで(カッコも含む)となります。

ただ、質問にあるソースを実行しても カッコ内だけ削除には なりませんけど?

カッコ内(カッコも含む)だけ削除したいならば

ReStr.Pattern = "\([^\(]*\)"

とすればいいでしょう。

  • id:taknt
    バックスラッシュは エンマーク(¥)です。
    半角だと バックスラッシュに置換されちゃいますね。
  • id:pocon
    あーすみません、原因が「(」をエスケープしないのが原因だと気付いて、キャンセルしちゃいました。

  • id:pocon
    takntさん、mj99さん

    すみません、コメント確認せずにキャンセルしちゃってました。
    ありがとうございます。
    勉強になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません