2017-12-20 15 views
2

원본 게시물을 편집하십시오.Excel VBA regex in-cell 함수를 사용하여 문자열 부분을 이동하는 방법

VBA를 Excel과 정규식에서 사용하는 것이 처음입니다. 정규식 문자열의 다양한 변화로 인해 나를 위해 최고의 솔루션을 제공한다고 생각합니다.
유인물을 찾는 것이 아니라 도움을 주시면 감사하겠습니다. 배우고 싶습니다.

나는 내 통합 문서에 다음 (한 열)과 같이 텍스트 수천 개의 항목이 있습니다

911407 - Ariens 34" Wide-Area Walk-Behind Mower, 10.5hp Briggs & Stratton, Gear, CARB (SN: 000101 & Above) 
911379 (LMSPE CE) - Ariens Razor 21" Self-Propelled Lawn Mower, 175cc Subaru (SN: 020347 - 025999) 
08200835 (CE) - Ariens CE AX 136cc Recoil Engine 
922013 (ST4) - Ariens Snow Blower, CE 4hp Tecumseh (SN: 000101 & Above) 

내가 엑셀 ​​VBA에서 세포 기능 (매크로도 좋은 것를 사용하려면,하지만 난

  • 하는 하위 문자열의 각 발생을 찾기 "(CE)"또는 "CE"또는 "CE"멀티 문자에 포함 된 괄호로 표현
  • 현재에서 그것을 제거에) 어딘가에 시작해야 게재 순위 :
  • 편집 (선행 공백을 제거하고 쉼표를 추가하거나 쉼표를 추가)
  • 새 편집을 문자열의 새 위치로 "(SN : ...) "위의를 사용하여

원하는 결과를 인용 항목은 다음과 같습니다

911407 - Ariens 34" Wide-Area Walk-Behind Mower, 10.5hp Briggs & Stratton, Gear, CARB (SN: 000101 & Above) 
911373 (LMP) - Ariens Razor 21" Push Lawn Mower, 175cc Subaru, CE (SN: 035000 - 054999) 
08200835 - Ariens CE AX 136cc Recoil Engine, CE 
922013 (ST4) - Ariens Snow Blower, 4hp Tecumseh, CE (SN: 000101 & Above) 

이것은 내가 지금까지 발견이 만든 것입니다") (CE를 "그것을 제거합니다. 나는 단지 과거의 글을 읽고 실험함으로써 이걸 ​​가지고있다.

Function TomCEregex(Myrange As Range) As String 
Dim regEx As New RegExp 
Dim strPattern As String 
Dim strInput As String 
Dim strReplace As String 

strPattern = " \(CE\)" 

If strPattern <> "" Then 
    strInput = Myrange.Value 
    strReplace = "" 

    With regEx 
     .Global = True 
     .MultiLine = True 
     .IgnoreCase = False 
     .Pattern = strPattern 
    End With 

    If regEx.Test(strInput) Then 
     TomCEregex = regEx.Replace(strInput, strReplace) 
    Else 
     TomCEregex = "Not Matched" 
    End If 
End If 

End Function 

분명히, 나는 가까이 있지 않지만, 노력하고 있다는 것을 알기를 바랍니다.

감사합니다.

+0

이유는 바로 제거하지 "(CE)"을 " , CE "가 발생하기 전에"(SN : "? – dwirony

답변

2

SUBSTITUTE 기능은 트릭을 할 것입니다 여기 RegEx 또는 VBA, 필요 없음 : 그 다음 항상 배치 포함 된 문자열에서 그래서

=SUBSTITUTE(SUBSTITUTE(A1," (CE) ","")," (",", CE (") 

enter image description here

+0

) 훨씬 쉽습니다. 그러나 수천 개의 항목 (행)이 있고 물론 각 항목에 대상 문자열 패턴이 들어 있지는 않습니다. 먼저 각 항목을 평가하여 문자열 패턴이 들어 있는지 확인한 다음 SUBSTITUTE fu를 구현해야합니다 해당 인스턴스에만 적용됩니다. regex 기반 셀 내 기능을 사용하는 경우 행별로 평가하지 않아도됩니다. 대상 문자열 패턴을 찾을 수 없으면 함수는 원래 값을 반환합니다. 아니면 내가 그것을 돌볼 수있는 함수를 결합 할 수있는 IF 함수가 있습니다. –

+0

필요는 없습니다. 만약 당신이 올바르게 이해한다면, 대치 자의 본질은 그 문제를 해결할 것입니다. 왜냐하면 패턴 매치가 존재하지 않는 경우 그곳에있는 것을 그대로 남겨두기 때문에 수식을 행 아래로 끌 수 있기 때문에 패턴을 찾았을 때 작동 할 것입니다. –

+0

대상 패턴을 포함하지 않은 셀에 SUBSTITUTE 함수를 시도했지만, 필요하지 않은 경우 추가 된 대상 패턴으로 원래 값을 반환했습니다. –