VBA 宏删除前后所有内容标签

VBA 宏删除前后所有内容标签

我正在创建一份报告,其中有一列包含许多单元格,几乎每个框中都有 HTML 标签。我正在尝试创建一个 VBA 宏,用于从此列中删除一些 HTML 标签。

因此,在一种情况下,我有:

<h1>text text.........text</h1>
<p>text text.........text</p>
<div class="Take"> text text.........text </div>
<p>text text.........text</p>
<div class="Found">
 <div class="Deficient">
 <p>text text.........text</p>
 <p>text text.........text</p>
<img>....</img>

我仅仅列出了一些 HTML 标签,但还有更多。

我想要的是只提取标签之间的内容<div class=...>并保留 div 标签本身。其余部分应删除

<h1>text text.........text</h1>
<div class="Take"> text text.........text </div>
<div class="Found"> text text.........text </div>
<div class="Deficient"> text text.........text </div>

有人知道怎么做这个吗?

答案1

您可以使用 Excel 查找和替换。

搜索诸如的标签<h1>并将其替换为空(空白/空格)。然后对结束标签 '' 执行相同操作,这将保留内容。

例如

<h1>My content</h1>

会变成

My content

对于需要删除标签和内容的其他标签,请使用通配符*

搜索<p>*</p>并替换为空格!这将删除整个条目。

对于自动关闭的标签,比如 IMG,你可以这样做<img*/>

答案2

这应该会将其拉出,将 msgbox 替换为您想要打印值的位置,并相应地调整范围。如果这些不具体,cells那么您可以尝试通过搜索row

Sub test()

Dim c As Range
Dim sFound As String
Dim sValue As String
Dim i As Long
Dim j As Long
For Each c In Range("A:A")
    If Not c.Find("<div class") Is Nothing Then
       sFound = c.Value
       i = InStr(sFound, ">")
       j = InStr(sFound, "</div")
       sValue = Mid(sFound, i + 1, j - i - 1)

       MsgBox (sValue)

    End If
Next c

End Sub

例如,msgbox(svalue)你可以使用

dim k as integer
k=1

worksheets("sheet2").cells(k,1) = svalue
k=k+1

将其移动至另一张工作表。

如果你有一些<div class里面没有东西</div>或什么都没有的东西,扔进on error resume next

相关内容