获取括号之间的值

时间:2011-11-08 22:33:42

标签: excel vba excel-vba

我的列中包含一些类似于以下字符串的内容:V2397(+60)

如何获得括号之间的值?在这种情况下,+60

括号前的数字(和字符)不是标准化的,也不是括号之间的数字(可以是100,10 -10甚至0 ......)。

4 个答案:

答案 0 :(得分:12)

VBA代码:

cellValue = "V2397(+60)"
openingParen = instr(cellValue, "(")
closingParen = instr(cellValue, ")")
enclosedValue = mid(cellValue, openingParen+1, closingParen-openingParen-1)

显然应该从单元格中读取cellValue

或者,如果单元格A1具有这些值中的一个,则可以使用以下公式将所包含的值转发到不同的单元格:

=Mid(A1, Find("(", A1)+1, Find(")",A1)-Find("(",A1)-1)

答案 1 :(得分:4)

我会使用正则表达式,因为它可以轻松处理

  • a no match case
  • 如果需要,可以在一个字符串中匹配多个匹配项
  • 如果您的解析需求发展,则会出现更复杂的匹配

Test子运行三个样本字符串测试

下面的代码使用了一个UDF,您也可以直接在Excel中调用它,即= GetParen(A10)

Function GetParen(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Pattern = "\((.+?)\)"
        If .Test(strIn) Then
            Set objRegMC = .Execute(strIn)
            GetParen = objRegMC(0).submatches(0)
        Else
            GetParen = "No match"
        End If
    End With
    Set objRegex = Nothing
End Function

Sub Test()
MsgBox GetParen("V2397(+60)")
MsgBox GetParen("Not me")
MsgBox GetParen(ActiveSheet.Range("A1"))
End Sub

答案 2 :(得分:1)

使用InStr获取开括号字符和近括号字符的索引;然后使用Mid检索所需的子字符串。

如果参数不是变体,使用InStr$Mid$的效果会更好。

答案 3 :(得分:1)

感谢Andrew Cooper的回答。

对于任何有兴趣的人,我都重构了一个函数......

 Private Function GetEnclosedValue(query As String, openingParen As String, closingParen As String) As String
    Dim pos1 As Long
    Dim pos2 As Long

    pos1 = InStr(query, openingParen)
    pos2 = InStr(query, closingParen)

    GetEnclosedValue = Mid(query, (pos1 + 1), (pos2 - pos1) - 1)
End Function

使用

value = GetEnclosedValue("V2397(+60)", "(", ")" )