2014-11-14 2 views
1

최근 Excel에서 일부 문자열을 텍스트에서 추출하려고했습니다. 여기에 다른 게시물에서 스크립트를 사용했습니다 : How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loopsExcel RegEx 추출

매크로 코드가 잘 작동하기 때문에 셀 기능에서 사용할 수 없으므로 #NAME이 (가) 표시됩니까? 오류. 나는 "Microsoft VBScript Regular Expressions 5.5"를 포함 시켰지만 여전히 운이 없다.

매크로와 함께 사용할 수 있지만 스크립트를 변경해야합니다. A1 : A50 다음에 B1 : B50에 문자열을 포함하고 싶습니다. DD 월 YYYY 형식 (예 : 2014 년 7 월 28 일)과 C1 : C50 형식 G1234567Y 형식으로 계정을 추출합니다.

지금은 스크립트가 날짜를 ""로 바꿉니다. 날짜에 대한 정규 표현식은 정확하지만 B 열에 날짜를 삽입하는 방법은 무엇입니까? 그리고 1/50 범위에서 작동하는 C 열의 A/C 번호는 무엇입니까?

Sub simpleRegex() 
    Dim strPattern As String: strPattern = "[0-9][0-9].*[0-9][0-9][0-9][0-9]" 
    Dim strReplace As String: strReplace = "" 
    Dim regEx As New RegExp 
    Dim strInput As String 
    Dim Myrange As Range 
    Dim Out As Range 

    Set Myrange = ActiveSheet.Range("A1") 
    Set Out = ActiveSheet.Range("B1") 
    If strPattern <> "" Then 
     strInput = Myrange.Value 
     strReplace = "" 

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

     If regEx.Test(strInput) Then 
      Out = regEx.Replace(strInput, strReplace) 
     Else 
      MsgBox ("Not matched") 
     End If 
    End If 
End Sub 

어떤 도움을 친절하게 감사 : 이 코드입니다.

+0

열 A에 정확한 데이터 예를 제공 할 수 있습니까? 감사. –

답변

1

현재 일치하는 문자열을 빈 문자열로 바꾸는 것이 "그래서 결과가 나오지 않는 이유입니다. 일치 항목을 표시하려면 ()을 사용하고 검색하려면 $1을 사용하여 실제 일치 항목을 반환해야합니다. 귀하의 예를 바탕으로


, 내가 열 A의 텍스트를 가정합니다은 다음과 같습니다 : 여기

28 July 2014 G1234567Y가 날짜로 텍스트를 따로 분리 한 후 텍스트가 날짜를 다음하는 루틴 .

Private Sub splitUpRegexPattern() 
    Dim regEx As New RegExp 
    Dim strPattern As String 
    Dim strInput As String 
    Dim strReplace As String 
    Dim Myrange As Range 

    Set Myrange = ActiveSheet.Range("A1:A50") 

    For Each C In Myrange 
     strPattern = "([0-9]{1,2}.*[0-9]{4}) (.*)" 
     'strPattern = "(\d{1,2}.*\d{4}) (.*)" 

     If strPattern <> "" Then 
      strInput = C.Value 
      strReplace = "$1" 

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

      If regEx.Test(strInput) Then 
       C.Offset(0, 1) = regEx.Replace(strInput, "$1") 
       C.Offset(0, 2) = regEx.Replace(strInput, "$2") 
      Else 
       C.Offset(0, 1) = "(Not matched)" 
      End If 
     End If 
    Next 
End Sub 

결과 :

enter image description here


가의 세포 기능을 사용하려면, 같은 날짜 또는 다른 모든 것들로 하나의 조각을 추출하도록 설정. 다음 코드는 날짜를 추출합니다. =extractDate(A1)

Function extractDate(Myrange As Range) As String 
    Dim regEx As New RegExp 
    Dim strPattern As String 
    Dim strInput As String 
    Dim strRaplace As String 
    Dim strOutput As String 

    strPattern = "(\d{1,2}.*\d{4}) (.*)" 

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

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

     If regEx.Test(strInput) Then 
      extractDate = regEx.Replace(strInput, "$1") 
     Else 
      extractDate = "Not matched" 
     End If 
    End If 
End Function 

단순히 $2$1을 변경하고 패턴의 두 번째 정의 일치를 반환 날짜의 나머지 부분을 추출하는 다른 함수를 만들려면 : 셀 B1는 다음 식을 것이다.

+0

이것은 정확히 내가 찾고있는 것입니다. 도와 주셔서 대단히 감사합니다. 좋은 VbScripting 기본을 얻을 때입니다. :) – Czarkowski89