2017-07-04 13 views
1

を使用して文字列内のパターンのすべてのインスタンスを検索と置換、私はこのようになります単純なパターンのすべてのインスタンス置き換えるしようとしている:いくつかの他の定数文字列でエクセルVBAを使って正規表現

{some text} 

を。ですから、中括弧で囲まれたテキストをすべて見つけて、中括弧で置き換えて別の文字列で置きたいと思います。

私は次のコードを使用し

Dim regEx As Object 
Set regEx = CreateObject("VBScript.RegExp") 
regEx.Pattern = "\{.*?\}" 
qtext = regEx.Replace(qtext, html_input) 

qtexthtml_inputは、いくつかの文字列です。しかし、これはパターンの最初のインスタンスを置き換えるだけです。例えば

qtext = "yadda yadda {1:NM:=12.000:0.120} omtty doom {1:NM:=6/6} loppy loop" 
html_input = "I am HTML" 

そして結果は次のようになります。

"yadda yadda I am HTML omtty doom I am HTML loppy loop" 

しかし、私が得ることである:

"yadda yadda I am HTML omtty doom {1:NM:=6/6} loppy loop" 

私は何をしないのですか?

+6

してみてください。 – SJR

+1

@SJRあなたは答えとして投稿する必要があるので、将来のユーザーは簡単に答えを見つけることができます –

答えて

3

@SJRのコメントでは、正規表現オブジェクトのGlobalプロパティをTrueに設定する必要があります。プロパティは、MSDNに記載されています。

グローバル - 正規表現を文字列内の可能性のあるすべての一致に対してテストする必要があるかどうかを示すブール値プロパティです。デフォルトでは、GlobalはFalseに設定されています。

だからあなたのコードに次のようになります。 `regEx.Global = true`を追加することを

Option Explicit 

Sub ReplaceText() 

    Dim regEx As Object 
    Dim qtext As String 
    Dim html_input As String 

    ' set up regex 
    Set regEx = CreateObject("VBScript.RegExp") 
    regEx.Pattern = "\{.*?\}" 
    regEx.Global = True '<-- set flag to true to replace all occurences of match 

    ' input and replacement text 
    qtext = "yadda yadda {1:NM:=12.000:0.120} omtty doom {1:NM:=6/6} loppy loop" 
    html_input = "I am HTML" 

    ' do replace 
    qtext = regEx.Replace(qtext, html_input) 

    ' test output 
    MsgBox qtext 

End Sub