Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除字符串中两个特定字符之间的文本_Excel_Vba - Fatal编程技术网

Excel 删除字符串中两个特定字符之间的文本

Excel 删除字符串中两个特定字符之间的文本,excel,vba,Excel,Vba,我有一列数据,格式如下: xxxx(yyyy) 我想删除括号内的内容以及括号本身。尝试以下操作: =LEFT(A1,FIND("(",A1)-1) 选择要处理并运行此短宏的单元格: Sub DataGrabber() Dim r As Range For Each r In Intersect(ActiveSheet.UsedRange, Selection) If InStr(1, r.Value, "(") > 0 Then r

我有一列数据,格式如下:

xxxx(yyyy)

我想删除括号内的内容以及括号本身。

尝试以下操作:

=LEFT(A1,FIND("(",A1)-1)

选择要处理并运行此短宏的单元格:

Sub DataGrabber()
    Dim r As Range
    For Each r In Intersect(ActiveSheet.UsedRange, Selection)
        If InStr(1, r.Value, "(") > 0 Then
            r.Value = Split(r.Value, "(")(0)
        End If
    Next r
End Sub

我将为此作业使用正则表达式:

Sub DeleteMatches()
  Dim cell As Range, re As Object

  ' define the regular expression to match "(...)"  '
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "\([^)]*\)"  ' matches "(...)"  '

  ' iterate and clean each cell in range "C2:C100"  '
  For Each cell In Range("C2:C100")
    cell.Value = re.Replace(cell.Value, Empty)
  Next

End Sub

您可以使用Regexp在一个字符串中方便地进行多个替换

干净的绳子


不,它确实工作正常。我只是再次尝试,并在excel中运行它。确保您正确复制了代码。我单击了上面的“运行代码段”,得到了
错误:{“message”:“SyntaxError:missing;before语句”,“filename”:http://stacksnippets.net/js“,“lineno”:12,“colno”:16}
这是上载到dropbox的文件,在使用此代码之前,您需要先运行一个检查,以确保有一个括号,并且这只适用于第一次出现的情况,其余的将以一种很难找到任何其他发生情况的方式进行分解。但是对于一次出现很好。是的,但这只是一个示例,演示了如何非常容易地将字符串拆分为数组。在剩下的字符串上加“)”键,就得到了第二部分。但是上面的例子不是这样的,这就是我提供该代码的原因。我用了1000个小时的代码处理excel文件,我总是发现拆分字符串非常有用。问题确实要求VBA。@brettdj该问题用VBA和excel标记。这道题中没有一个词可以表示一个词胜过另一个词。OP可能只是假设只有vba才有可能。如果OP在哪里做出区分,我会很高兴地删除答案。
Sub DeleteMatches()
  Dim cell As Range, re As Object

  ' define the regular expression to match "(...)"  '
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "\([^)]*\)"  ' matches "(...)"  '

  ' iterate and clean each cell in range "C2:C100"  '
  For Each cell In Range("C2:C100")
    cell.Value = re.Replace(cell.Value, Empty)
  Next

End Sub
Sub Test()
Debug.Print CleanStr("xxxx(yyyy)")
Debug.Print CleanStr("and me ()")
Debug.Print CleanStr("and me ()` second string(aaa)")
End Sub
Function CleanStr(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
   .Pattern = "\([^)]*\)"
   .Global = True
   CleanStr = .Replace(strIn, vbNullString)
End With
End Function