自分方位研究所

日々の活動記録

(Excel VBA) タグから文字を抜き出す

タグにはさまれた文字列から必要な文字列を抜き出すコードを作成しました。

[InnerHTML]を使わずに、力技で文字列操作をしています。

Function NUKIDASItest は、任意の文字列にはさまれた特定の文字を抜き出します。

Sub 抜き出し()


Dim txt As String

'<td class="td-blog-author">はてなID</td>

txt = "<td class=""td-blog-author"">はてなID</td>"
Debug.Print txt

MsgBox NUKIDASItest(txt, "-author"">", "</td>")

End Sub
'--------------------------------------------------
Function NUKIDASItest(allText As String, mark1 As String, mark2 As String) As String


'タグから文字を抜き出す

'対象型
'***[目印(mark1)][抜き出し文字][目印(mark2)]***

'***:任意の文字列。無しでも可。

'allText: 文字列全体
'mark1: 抜き出し文字列直前の目印文字列(直後には抜き出し文字列が続いていること)
'mark2: 抜き出し文字列直後の目印文字列

Dim allLen As Integer
Dim mark1Len As Integer
Dim mark2Len As Integer
Dim mark1Instr As Integer
Dim mark2Instr As Integer

Dim mark1All As String  'mark1を含む不用文字全部
Dim mark2All As String  'mark2を含む不用文字全部
Dim tmpText As String

allLen = Len(allText)   '全文字列の文字数
mark1Len = Len(mark1)   '前方目印の文字数
mark2Len = Len(mark2)   '後方目印の文字数

mark1Instr = InStr(allText, mark1)  '前方目印位置
mark2Instr = InStrRev(allText, mark2)   '後方目印の位置


If mark1Len <> 0 Then
    mark1All = Left(allText, mark1Instr + mark1Len - 1)
Else
    mark1All = ""
End If
'Debug.Print mark1All

If mark2Len <> 0 Then
    mark2All = Right(allText, allLen - mark2Instr + 1)
Else
    mark2All = ""
End If
'Debug.Print mark2All

tmpText = Replace(allText, mark1All, "")
NUKIDASItest = Replace(tmpText, mark2All, "")


End Function

 

作成してから気づいたのですが、Mid関数を使った方がスマートにできますね。

明日はそれでやってみます。