如何检索位于(和)之间的数据?

时间:2013-09-05 15:03:52

标签: excel excel-vba vba

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的答案。
我需要做些什么才能修复我的代码?

2 个答案:

答案 0 :(得分: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 :(得分: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