2017-05-04 12 views
-1

は私が(コロンスペース)で、すべての:(コロン)を交換する必要があります。私はreplace関数を使ってこれを行うことができます。は、文字列の数を特定し、交換する - VBA

description_string = Replace(currentSheet.Cells(i, j), ":", ": ") 

しかし、これは時間フォーマット(例えば、16:20)を置き換えます。私は私は、正規表現パターンとして

[a-zA-Z]:[a-zA-Z0-9] 

を用いて試みた前回値(例えば9:

として番号を持つコロン:を識別する必要があります。問題は、これからどのようにコロンだけを置き換えるかということです。置換しようとすると、コロンの前後の文字全体が置換されます。

私は検索と置換しようとしたが、

abcdの日のような問題は文字列です:01/01/17 10時18のデス:

:XYZ

すべてのコロンに変更得ています

私が欲しいの出力は

ABCD日である:01/01/17 10時18分デ:XYZ

+0

あなたは数がコロンの前に存在している場合は交換したくないことを意味しますか? – SJR

+0

「正規表現を使ってVBAを調べる」 - あなたは問題を解決する必要があるでしょう。あなたはいくつかの例を見つけた後、あなたはまだ問題がある場合は戻ってくると、質問を明確にしたり、新しいものを投稿する([そう]上の文字通り何百もあります)。 – Dave

+0

通常のExpresionsの使用はどうですか? [Microsoft Excelで正規表現(正規表現)を使用する方法の両方で細胞やループ](http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-両方のセルとループ) –

答えて

1

reg.Pattern = "(\D:)" ' non-digit followed by colon, as group $1 

\Dが非数字文字を指定する正規表現パターンを使用してみてください。 (\ D :)は、コロンが後に続く非数字の文字を指定します。かっこで括られたこのパターンは、後で置換すると$1と識別されます。キャプチャされた最初のグループであるためです。

次に、このように置き換える:

newString = reg.Replace(oldString, "$1 ") 'replace captured group by itself then space 

スペース続い自体にマッチグループ($1)に置き換えます(このような)パターンで唯一のグループの場合には"$1 "

代替かっこを削除し、キャプチャしたグループを($+)と指定することができます。

reg.Pattern = "\D:" ' non-digit followed by colon, as the only group ($+) 
newString = reg.Replace(oldString, "$+ ") 

Sub Example() 
    Dim reg As New RegExp: reg.Global = True: reg.Pattern = "(\D:)" 
    Dim oldString As String: oldString = "abcd Date:01/01/17 10:18 Des:xyz" 
    Dim newString As String: newString = reg.Replace(oldString, "$1 ") 
    Debug.Print newString 
End Sub 
abcd Date: 01/01/17 10:18 Des: xyz 
+0

ありがとうございました[A.S.H.](http://stackoverflow.com/users/4926357/a-s-h)。これは私を助けました。このシナリオで置換機能がどのように機能したか理解できますか? –

+1

@ManuMohanよろしくお願いします。答えにはいくつかの例があります。 '\ D'は非数字文字を指定します。 '(\ D:)'はコロンが後に続く非数字の文字を指定します。カッコで囲まれていると、この一致したパターンは置換で '$ 1 'と識別されます。最後に、置き換えはマッチしたグループ( '$ 1')をそれ自身に置き換えてスペースで置き換えます。お役に立てれば。 –

+0

おかげでASH ..私はちょうど '$ 1'で混乱してしまった。だから私の理解は$ 1は常に正規表現によって識別される文字列になります。私が間違っているなら私を訂正してください。 –

関連する問題