循环从Excel VBA中的单个字符串中提取两个不同的字符串
我收到excel中的html文本,我只是想从中提取一些文本 我在单元格A1中有以下文本:循环从Excel VBA中的单个字符串中提取两个不同的字符串,excel,vba,string,extract,Excel,Vba,String,Extract,我收到excel中的html文本,我只是想从中提取一些文本 我在单元格A1中有以下文本: <b>From:</b></p> </td> <td width=760 colspan=10 valign=bottom style='width:380.0pt;padding:0in 0in 0in 0in; height:9.05pt'> <p class=MsoNormal><a href="ma
<b>From:</b></p> </td>
<td width=760 colspan=10 valign=bottom
style='width:380.0pt;padding:0in 0in 0in 0in; height:9.05pt'>
<p class=MsoNormal><a href="mailto:name@email.com">LastName, First</a></p>
</td> </tr>
From:
我想提取“name@email.com和“LastName,First”,分别放入单元格B1和C1。我需要把这个循环通过多个单元格,所以我需要考虑字符串长度的不同。
对于更多的上下文,这篇文章为我要做的事情提供了一个很好的基础,但是我一直坚持下去,因为我拉的字符串会在长度和内容上有所不同。p> 在A1中输入字符串,在B1中输入:
=LEFT(MID(A1,FIND("mailto:",A1)+7,9999),FIND(CHAR(34),MID(A1,FIND("mailto:",A1)+7,9999))-1)
=LEFT(MID(A1,FIND(B1,A1)+LEN(B1)+2,9999),FIND("<",MID(A1,FIND(B1,A1)+LEN(B1)+2,9999))-1)
并在C1中输入:
=LEFT(MID(A1,FIND("mailto:",A1)+7,9999),FIND(CHAR(34),MID(A1,FIND("mailto:",A1)+7,9999))-1)
=LEFT(MID(A1,FIND(B1,A1)+LEN(B1)+2,9999),FIND("<",MID(A1,FIND(B1,A1)+LEN(B1)+2,9999))-1)
=LEFT(MID(A1,FIND(B1,A1)+LEN(B1)+29999),FIND(可能是这样的。注意引号(“),我的HTML变量代码没有考虑它!在HTML代码字符串分隔符中查找始终相同的字符串分隔符
Dim HTMLarray1() As String
Dim HTMLarray2() As String
Dim HTML As String
HTML = "<b>From:</b></p></td><td width=760 colspan=10" _
& "valign=bottom style='width:380.0pt;padding:0in 0in 0in 0in;" _
& "height:9.05pt'><p class=MsoNormal>" _
& "<a href="mailto:name@email.com">LastName, First" _
& "</a></p></td></tr>"
HTMLarray1 = Split(HTML, "<a href="mailto:")
HTMLarray1 = Split(HTMLarray1(1), "">")
HTMLarray2 = Split(HTMLarray1(1), "</a>")
Dim email As String
Dim name As String
email = HTMLarray1(0)
name = HTMLarray2(0)
Dim htmlaray1()作为字符串
Dim HTMLARAY2()作为字符串
将HTML设置为字符串
HTML=“From:”_
&“
”
htmlaray1=Split(HTML,“”)
将电子邮件设置为字符串
将名称设置为字符串
电子邮件=htmlaray1(0)
name=htmlaray2(0)
.IIRC有一个库,你可以引用它来解析HTML,然后提取你需要的特定节点,假设单元格包含实际有效的HTML。我被告知HTML无效,因为有些单元格缺少结束标记等。但幸运的是,我需要的文本周围的标记在每个单元格中都是一致的。所以基本上你需要从无效的HTML中提取
标记。并且只有一个这样的标记?是的,两个问题都有。我需要提取A标记,并从那里区分提取(mailto:)和(“>)之间的文本以获取电子邮件,以及(“>)和()对于LastName,首先可以使用InStr
获取
的第一个索引;然后可以使用其他标准字符串操作函数提取所需的子字符串(Mid
,InStr
,Left
,Trim
)基本上是Gary的学生发布的Excel公式的代码版本。这完成了任务,谢谢!我正在努力制作上面提到的代码版本。