我有以下字符串:
BAXH14#cote href="nego_cotes_in_en.php?symbol=BAX&instrument=BAXH14#cote">14 MAR</A></TD>
<TD>98.620</TD>
<TD>98.630</TD>
<TD>98.620</TD>
<TD>0</TD>
<TD>33,568</TD>
<TD>6,071</TD><
我想检索 98.620 中的第三行。这个字符串中的数字每天都会改变,所以任何帮助都会很棒。
如果它是一个字符串而不是您正在解析或跨多行的文件,最直接的方法是使用以下内容。假设字符串在 Sheet1 的 Range("A1") 中。
Dim dataSplit() As String
Dim returnData As String
dataSplit = Split(Sheet1.Range("A1").Value2, "</TD>")
returnData = Right$(dataSplit(2), Len(dataSplit(2)) - 5)
使用 Mid (string, start, length) 和 find (what, where, startpos) 您可以跳过两个换行符 - char (10) 并将长度设置为第二个和第三个换行符位置之间的差异,如下所示:-
=MID(A1,FIND(CHAR(10),A1,FIND(CHAR(10),A1,1)+1),FIND(CHAR(10),A1,FIND(CHAR(10),A1,FIND(CHAR(10),A1,1)+1)+1)-FIND(CHAR(10),A1,FIND(CHAR(10),A1,1)+1))
假设 A1 包含您的字符串。如果您需要将其视为行尾标记,则将所有字符(10)替换为“”。
优雅的?当然不是!
假设您使用的是 VBA,这可以解决问题 - 只需将 str 设置为您的字符串
Sub test()
Dim str As String
Dim n As Integer
n = 3
str = "testData<TD>98.620</TD><TD>98.630</TD><TD>98.620</TD><TD>0</TD><TD>33,568</TD><TD>6,071</TD>"
subSTR = str
For i = 1 To n
If Not (InStr(1, subSTR, "<TD>") = 0) Then
subSTR = Right(subSTR, Len(subSTR) - InStr(1, subSTR, "<TD>") - 3)
Else
subSTR = ""
Exit Sub
End If
Next i
finalStr = Left(subSTR, InStr(1, subSTR, "</TD>") - 1)
End Sub
一种简单的方法是使用Split函数将字符串分解为数组。这需要一个字符串并在调试窗口中打印第三项。像这样...
Sub split_td()
Dim values() As String
Dim sourceString As String
Dim result As String
' get your source data here
sourceString = "<td>1</td><td>2</td><td>3 - pick me!</td><td>4</td>"
'break it into an array of strings
values = Split(sourceString, "<td>")
'tidy up the end tag
result = Replace(values(3), "</td>", "")
Debug.Print values(3)
End Sub
如果您不介意工作表中的额外列,那么您可以执行以下操作...
A------------------------ B----------------------------------------------------------
<td>1</td><td>2</td><td>3 - pick me!</td><td>4</td>
=SEARCH("<td>", B$1)
=SEARCH("</td>",B$1) =SUBSTITUTE(SUBSTITUTE(MID(B$1,A2,A3-A2),"/",""),"<td>","")
=SEARCH("</td>",B$1,A3+1) =SUBSTITUTE(SUBSTITUTE(MID(B$1,A3,A4-A3),"/",""),"<td>","")
=SEARCH("</td>",B$1,A4+1) =SUBSTITUTE(SUBSTITUTE(MID(B$1,A4,A5-A4),"/",""),"<td>","")
(etc)
然后将文本操作的点放在 A 列中,并在 B 列中进行提取。