获取括号之间的值

我有一些东西,看起来像下面的string列: V2397(+60)

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

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

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) 

我会使用正则expression式,因为它很容易处理

  • 一个不匹配的情况
  • 多个匹配在一个string,如果需要
  • 更复杂的匹配,如果你的分析需求发展

Test子运行三个示例stringtesting

下面的代码使用一个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 

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

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

感谢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)", "(", ")" )