人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【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



●質問者: pocon
●カテゴリ:コンピュータ
✍キーワード:AS D2 EXIT Microsoft NeXT
○ 状態 :キャンセル
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mj99

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

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

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

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

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

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

2 ● きゃづみぃ

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

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

なので

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

ではなく

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

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

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

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

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

とすればいいでしょう。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ