首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取括号中的值

获取括号中的值
EN

Stack Overflow用户
提问于 2011-11-09 06:33:42
回答 4查看 20.3K关注 0票数 9

我有一个包含一些内容的列,它看起来像下面的字符串:V2397(+60)

如何获取括号之间的值?在本例中为+60

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-09 06:38:52

VBA代码:

代码语言:javascript
复制
cellValue = "V2397(+60)"
openingParen = instr(cellValue, "(")
closingParen = instr(cellValue, ")")
enclosedValue = mid(cellValue, openingParen+1, closingParen-openingParen-1)

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

或者,如果单元格A1具有这些值之一,则可以使用以下公式将封闭的值扩展到不同的单元格:

代码语言:javascript
复制
=Mid(A1, Find("(", A1)+1, Find(")",A1)-Find("(",A1)-1)
票数 13
EN

Stack Overflow用户

发布于 2011-11-09 14:16:53

我将为此使用正则表达式,因为它很容易处理

  • a no match
  • 在一个字符串中有多个匹配项,如果需要
  • 更复杂的匹配项如果您的解析需要演进

Test子程序运行三个样例字符串测试

下面的代码使用了一个自定义函数,你也可以在Excel中直接调用它,即= GetParen(A10)

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2011-11-09 06:40:12

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8058032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档