我想创建一个自定义函数,允许我从字符串中删除括号中的内容。假设我有一个字符串:“508(7S9 5DU)609(609)”,我希望有一个函数接收此字符串并转入“508 609”。
我一直在玩VBA编辑器,但我的VBA编程技巧非常有限,更不用说不存在了。
我提出了以下简洁的代码,但不幸的是它没有完成这项工作:
Function DelPar(Source As Range)
Source.Replace What:="(*) ", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Function
当我输入“= DelPar(源参考)”时,我获得“0”作为值...
提前感谢您的帮助,
祝你好运。
答案 0 :(得分:3)
您无法在UDF中使用Range.Replace
。您可以像这样使用正则表达式:
Function DelPar(Source As String)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\([\w ]+\)"
DelPar = Application.Trim(.Replace(Source, ""))
End With
End Function
答案 1 :(得分:2)
此宏将首先计算有"("
和")"
有多少对 - 但是,它目前不区分 < strong> {EDIT} 添加了一个检查,如果不存在"(*)"
和")*("
"(*)"
,则提前退出While循环,仅")*("
,并通过替换{{使循环计数与应用程序无关1}}
然后为每对循环一次,并构建一个以WorksheetFunction.Max
开头的字符串,并运行到下一个"("
,并用")"
替换该字符串(即删除)它)。 如果在达到""
之前达到第二个"("
,则会从")"
重新启动字符串。
"("
答案 2 :(得分:0)
此UDF会查找每对括号,并会删除它们之间的内容。
Public Function DELETE_BETWEEN_BRACKETS(ByRef ThisCell As Range) As String
If ThisCell.Count <> 1 Then
DELETE_BETWEEN_BRACKETS = "ERROR: Only 1 cell allowed"
Exit Function
End If
Dim ThisValue As String
Dim MyStart As Integer
Dim MyEnd As Integer
ThisValue = ThisCell.Value
MyStart = InStr(1, ThisValue, "(")
MyEnd = InStr(1, ThisValue, ")")
Do While MyStart > 0 And MyEnd > 0 And MyEnd > MyStart
ThisValue = Left(ThisValue, MyStart - 1) & Right(ThisValue, Len(ThisValue) - MyEnd)
MyStart = InStr(1, ThisValue, "(")
MyEnd = InStr(1, ThisValue, ")")
Loop
DELETE_BETWEEN_BRACKETS = Application.WorksheetFunction.Trim(ThisValue) 'we delete double spaces
End Function
注意我在删除每对括号后在末尾添加了Trim以清除那些双空格,并且在字符串末尾删除空格。强>
用值508 (7S9 5DU) 609 (609)
(23个字符长)测试后,我得到508 609
(7个字符长)。
根据您的需要进行调整。