2011-05-04 13 views
6

문자열에서 일부를 대체해야하지만 대체 할 내용이 다를 수 있습니다.VBA에서 변수 문자열 바꾸기

XY - test 
XXxY-test 
XXyyXx-TEST 
yXyy  -Test 

및 사실상 위의 공백과 다른 경우의 조합이 될 수 있습니다.

"테스트"부분을 바꾸고 "XXX"만 남겨 둬야합니다. 따라서 간단한 교체를 사용하는 경우

Replace("XXX -test", "- test", "") 

분명히 작동하지 않습니다. 따라서이 작업을 처리 할 수있는보다 정교한 Replace 버전이 필요합니다. 제가 사용할 수있는 것이 있습니까? 아니면 직접 작성해야합니까?

+1

정규식 ([이 참조 ] (http://www.vbforums.com/showthread.php?t=480272))가 도움이 될 수 있습니다. 패턴 문자열이 어떻게 보이는지 모르겠지만이를 작성하기위한 사이트가 많이 있습니다. – jonsca

답변

8

mj82의 방법보다 유연성이 필요한 경우 (예 : 초기 표현식의 길이를 알 수없는 경우) 정규 표현식을 사용할 수 있습니다. 예 :

Regex.Replace("XXX -test", "\s*-\s*test", "", RegexOptions.IgnoreCase) 
+2

함수를 사용하려고하는데 객체를 가져 오는 중에 오류가 발생하지 않습니다. "Regex"에 시계를 추가하면 객체가 비어 있다고 표시됩니다. 왜 이런 일이 일어나고 있는거야? 라이브러리를로드해야합니까? 저는 Excel 2010입니다. –

+0

'Microsoft VBScript Regular Expressions '를 참조에 추가해야합니다 (현재 버전은 5.5라고 생각합니다). 다음을 사용하여 변수를 선언하십시오 :'Dim Regex as New Regexp'. – Toast

1

XXX가 처음이면 Left (string; 3) 함수를 사용하여 왼쪽에서 3 자 (또는 원하는 길이)의 글자를 입력 할 수 있습니다.

+0

좋아요, 질문에서 그 점을 분명히하는 걸 잊었습니다. XXX는 또한 임의의 문자 (심지어 "test"와 비슷하게 포함)의 변수입니다. –

+0

"-"기호까지자를 수 있다면 (XXX 식에서는 사용할 수 없습니다) 다음이 도움이 될 수 있습니다 : Left (mystr, InStr (mystr, "-") - 1), "-"가 처음 나타날 때까지 모든 문자를 자릅니다. 그렇지 않으면 - Regex가 가장 좋은 솔루션입니다. – mj82

8

이것은 eggyal의 대답을 보완하기위한 것입니다. 이것은 VBA regexreplace 함수이므로 사용자는 자신의 답을 사용할 수 있습니다. 당신은 내가 유연성을 옵션으로 ignore_case을 추가 알 수 있습니다, 그래서 당신의 호출은 다음과 같습니다 여기

=RegexReplace(cell, "\s*-\s*test", "", TRUE) 

는 기능입니다, 당신이 그것을 유용 희망 :

' ------------------------------------------------------------------- 
' Search and Replace using a regular expression 
' ------------------------------------------------------------------- 

Function RegexReplace(ByVal text As String, _ 
         ByVal replace_what As String, _ 
         ByVal replace_with As String, _ 
         Optional ByVal ignore_case As Boolean = False) As String 

Dim RE As Object 
Set RE = CreateObject("vbscript.regexp") 

RE.ignorecase = ignore_case 
RE.pattern = replace_what 
RE.Global = True 
RegexReplace = RE.Replace(text, replace_with) 

End Function