2013-07-02 2 views
0

다른 단어 나 숫자와 함께 영숫자 텍스트가있는 특정 열의 셀이 있습니다. 세포Excel의 셀에서 "단어"를 삭제하고 싶지만 영숫자 텍스트를 유지하고 싶습니다.

굵은에 있습니다

BOTTOM : 나는 J103에게

J103의 텍스트를 BOTTOM :, 주 및 13을 삭제하고 유지하려면 13

J103 참고 할 수있다 두 개 이상의 문자와 한 개에서 네 개의 숫자 범위를 포함하지만, 항상 결합되어 특정 행에 대해 동일한 문자로 시작됩니다. 일부 셀에는 유지하려는 텍스트 만 있지만 쉼표로 구분됩니다. 이 기준을 충족시키는 셀은 무시되어야한다.

CR33, CR45, CR49 - 행 1

D12, D13, D14, D104 - 행 내가 번호를하지 않습니다 삭제하려면 2 개

단어. 독립형 숫자는 글자를 가지지 않을 것이며, 이상한 일이 생기면 글자가 마지막 인 곳은 13a가 될 것입니다.

특정 셀이있는 경우 :

TOP : J104 바닥 : J103

내가 모두 TOP 싶습니다 및 BOTTOM : 제거 및 분리 나머지 J104과 J103 쉼표. 나는 모든 매크로 가능한 것처럼이 선호

J104, J103.

나는 VBA에서 초보자 그래서 그의 대답에 자신의 코드와 정규 표현식을 사용하는 앤디 G에 의해 제안되었다

부드럽게입니다.

나는이 문제에 관해 읽었지만 실제 일어나고있는 것을 완전히 이해하지 못했다. 이것이 내가 쓸모없는 것을 시도한 것이다.

Sub test() 
Dim rngToSearch As Range 
Dim rng As Range 
'Tools References - Microsoft VBScript Regular Expressions 5.5 
Dim rgx As New VBScript_RegExp_55.RegExp 
Dim matches As Variant, match As Variant 
Dim strTemp As String 
Dim LastRow As Long 
Dim cellText As String 
Dim i As Integer 

With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row 
    End With 

rgx.Pattern = "[A-Z]+\d{1,4}" 
'rgx.IgnoreCase = True 
rgx.Global = True 
Application.ScreenUpdating = False 
Set rngToSearch = Range("D1:D" & LastRow).CurrentRegion 
    For Each rng In rngToSearch 
    strTemp = "" 
    Set matches = rgx.Execute(rng.Value) 
    For Each match In matches 
     strTemp = strTemp & match.Value & "," 
    Next match 
    If Len(strTemp) > 0 Then 
     rng.Offset(0, 1).Value = Left(strTemp, Len(strTemp) - 1) 
    End If 
Next rng 
Application.ScreenUpdating = True 
End Sub 

나는 모든 답변을 주셔서 감사합니다. 미리 감사드립니다.

+2

이 MS Excel이 맞습니까? –

+0

예, 죄송합니다. Office 2007. – sparky3489

+2

정규식을 사용하여 다음 작업을 수행 할 수 있습니다. http://www.tmehta.com/regexp/ –

답변

0

글쎄, 아래 코드를 가지고 있지만 그것을 이해하고 적용하기 위해 연구해야 할 것입니다.

Sub KeepCodes() 
    Dim rngToSearch As Range 
    Dim rng As Range 
    'Tools References - Microsoft VBScript Regular Expressions 5.5 
    Dim rgx As New VBScript_RegExp_55.RegExp 
    Dim matches As Variant, match As Variant 
    Dim strTemp As String 

    rgx.Pattern = "[A-Z]+\d{1,4}" 
    'rgx.IgnoreCase = True 
    rgx.Global = True 
    Application.ScreenUpdating = False 
    Set rngToSearch = Range("A1").CurrentRegion 
    For Each rng In rngToSearch 
     strTemp = "" 
     Set matches = rgx.Execute(rng.Value) 
     For Each match In matches 
      strTemp = strTemp & match.Value & "," 
     Next match 
     If Len(strTemp) > 0 Then 
      rng.Offset(0, 1).Value = Left(strTemp, Len(strTemp) - 1) 
     End If 
    Next rng 
    Application.ScreenUpdating = True 
End Sub 

MSDN regex 문서를 읽으십시오.

+0

선택한 셀만 수행하도록하는 방법은 없습니까? 마지막 행에 대한 열의 행을 실행할 코드가 이미 있습니다. 나는 그것이 rgx.Global = True 라인에 있다고 가정한다. – sparky3489

+0

코드 (및 내가 제공 한 정규식 링크)를 학습하면 수정할 수 있습니다. 그리고, 아니,'rgx.Global'과 관련이 없습니다. –

+0

나는 코드를 연구하고 몇 가지 시도했지만 작업을 수행하기 위해 하나의 열만 관리 할 수는 없지만 전체 시트가 변경됩니다. 특정 열이 영향을받는 경우에만 변경해야하는 사항은 무엇입니까? – sparky3489