在Microsoft Excel中删除特定标记之间的文本

时间:2013-06-04 17:50:26

标签: excel vba

我有一些类似的文字:

  

Lorem ipsum dolor< code> sit amet,consectetuer adipiscing elit,< / code> sed diam nonummy nibh euismod tincidunt ut< code> laoreet dolore magna< / code> aliquam erat volutpat。

我正在尝试删除每对“代码”标记之间的所有内容。我编写了一个函数,当每个单元格只有一对标签时效果很好,但它不会处理多个实例。这是所需的输出:

  

Lorem ipsum dolor< code>< / code> sed diam nonummy nibh euismod tincidunt ut< code>< / code> aliquam erat volutpat。

你怎么建议我这样做?

3 个答案:

答案 0 :(得分:1)

此VBA函数可用于去除打开和关闭HTML标记及其包含的内容。它使用正则表达式,在这种有限的用法中应该没问题(但是beware using regex to parse HTML)。

Function stripEnclosed(strIn As String) As String
Dim re As VBScript_RegExp_55.RegExp, AllMatches As VBScript_RegExp_55.MatchCollection, M As VBScript_RegExp_55.Match
Dim closeIndex As Long
tmpstr = strIn
Set re = New VBScript_RegExp_55.RegExp
re.Global = True
re.Pattern = "<[^/>]+>"
Set AllMatches = re.Execute(tmpstr)
For Each M In AllMatches
    closeIndex = InStr(tmpstr, Replace(M.Value, "<", "</"))
    If closeIndex <> 0 Then tmpstr = Left(tmpstr, InStr(tmpstr, M.Value) - 1) & Mid(tmpstr, closeIndex + Len(M.Value) + 1)
Next M
stripEnclosed = tmpstr
End Function

注意:您必须将“Microsoft VBScript Regular Expressions 5.5”引用添加到您的VBA项目中。

如果您只想删除某个标记(例如<CODE></CODE>),只需使用以下内容替换代码的re.Pattern = "<[^/>]+>"行:

re.Pattern = "<CODE>"

答案 1 :(得分:0)

基于宏录像机:

Sub Test()
    'working for selection replacing all <*> sections
    Selection.Replace What:="<*>", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub
在OP发表评论后

编辑尝试2:

Sub Attempt_second()
    'working for selection replacing all <*> sections
    Selection.Replace What:="<*code>*<*/*code>", Replacement:="<code></code>", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

它会将文本替换为<code></code>,删除其间的其他空格。

答案 2 :(得分:0)

KazJaw 的答案简单,优雅,似乎可以满足您的需求。

我采取了完全不同的方法:

Public Function StripHTML(str As String) As String

Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
    .Global = True
    .IgnoreCase = True
    .MultiLine = True
    .Pattern = "<[^>]+>"
End With

StripHTML = RegEx.Replace(str, "")
Set RegEx = Nothing

End Function