获取括号之间的值
我有一些东西,看起来像下面的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)", "(", ")" )