我的列中包含一些类似于以下字符串的内容:V2397(+60)
如何获得括号之间的值?在这种情况下,+60
。
括号前的数字(和字符)不是标准化的,也不是括号之间的数字(可以是100,10 -10甚至0 ......)。
答案 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)
我会使用正则表达式,因为它可以轻松处理
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)", "(", ")" )