2013-09-05 2 views
0
Sub extractdateincells() 
    Dim i As Integer, r As Integer, str As String 
    For Each c In Range("a1:a10") 
     For i = 1 To Len(c.Value) 
      If Mid(c.Value, i, 1) = "(" Then 
       Range("b1:b10") = Mid(c.Value, i + 1, 1) 
      End If 
     Next 
    Next 
End Sub 

위의 코드를 사용하여 데이터를 추출하려고했지만 필요한 답을 얻을 수 없습니다.
cell1과 cell2에 king(anil434323)hkd3jejrew(3232213)가있는 경우 다음 셀에 anil4343233232213으로 대답해야합니다.
내 코드를 수정하려면 어떻게해야합니까? 대신 자신의 검색 루틴을 압연의(와) 사이에있는 데이터를 검색하는 방법은 무엇입니까?

답변

3

, InStrInStrRev를 사용

Sub extractdateincells() 
    Dim i As Integer, r As Integer, str As String 
    Dim OpenPos As Long, ClosePos As Long 
    For Each c In Range("a1:a10") 
     str = c.Value 
     OpenPos = InStr(str, "(") 
     ClosePos = InStrRev(str, ")") 
     If OpenPos > 0 And ClosePos > 0 Then 
      c.Value = Mid(str, OpenPos + 1, ClosePos - OpenPos - 1) 
     End If 
    Next 
End Sub 
+1

이 정말 좋은 30초 롤 – jlaverde

2

이 매크로를해야합니까? B1 셀이 수식을 사용하여 아래로 복사 :

=TRIM(MID(SUBSTITUTE(A1,")",REPT(" ",99)),FIND("(",A1&"(")+1,99)) 

그것을 매크로해야하는 경우, 이것은 당신을 위해 작동합니다 :

Sub extractdateincells() 

    Dim sCell As String 

    With Range("A1:A10") 
     sCell = .Cells(1).Address(0, 0, , True) 
     .Offset(, 1).Formula = "=TRIM(MID(SUBSTITUTE(" & sCell & ","")"",REPT("" "",99)),FIND(""(""," & sCell & "&""("")+1,99))" 
     .Offset(, 1).Value = .Offset(, 1).Value 
    End With 

End Sub 
+0

그것으로 나를 이길 ... 감사 – Sevak

관련 문제