Excel VBAでオブジェクト指向プログラミング(HTMLドキュメント編)
■HTMLDocumentオブジェクトとは
HTMLDocumentオブジェクトはMicrosoftから提供されている、HTML関連オブジェクトの中で最上位に位置するオブジェクト(クラス)であり、HTML文書に関する機能が集約されています。
HTMLDocumentオブジェクトの下位オブジェクト(サブクラス)は下表の通りですが、後述するサンプル・プログラムで使用しているHTMLDocumentオブジェクト、IHTMLDocument2オブジェクト、IHTMLElementオブジェクトについて概要を説明します。
⇒詳細はMicrosoftのサイト(HtmlDocument クラス)を参照して下さい。
HTMLDocumentオブジェクトの階層構造
HTMLDocumentオブジェクトの下位オブジェクト(サブクラス)は下表の通りです。
| HTMLDocumentオブジェクト | |||||||||||
| IDOMEventオブジェクト | |||||||||||
| IDOMNodeIteratorオブジェクト | |||||||||||
| IDOMProcessingInstructionオブジェクト | |||||||||||
| IDOMTreeWalkerオブジェクト | |||||||||||
| IHTMLDocument2オブジェクト | |||||||||||
| IHTMLDOMAttributeオブジェクト | |||||||||||
| IHTMLDOMChildrenCollectionオブジェクト | |||||||||||
| IHTMLDOMNodeオブジェクト | |||||||||||
| IHTMLDOMNode3オブジェクト | |||||||||||
| IHTMLDOMRangeオブジェクト | |||||||||||
| IHTMLElementオブジェクト | |||||||||||
| IHTMLElement2オブジェクト | |||||||||||
| IHTMLElementCollectionオブジェクト | |||||||||||
| IHTMLEventObjオブジェクト | |||||||||||
| IHTMLRenderStyleオブジェクト | |||||||||||
| IHTMLSelectionオブジェクト | |||||||||||
| IHTMLStyleSheetオブジェクト | |||||||||||
■HTMLDocumentオブジェクトの詳細
HTML文書の文書全体を読み込む際には最初にHTMLDocumentオブジェクトをインスタンス化し、CreateDocumentFromUrlメソッドでIHTMLDocument2オブジェクトを取得しますが、個々の要素を取り扱う場合にはIHTMLElementオブジェクトを使用します。
HTMLDocumentオブジェクトを使用するための手順
HTMLDocumentオブジェクトを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。
①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft HTML Object Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。


②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。
- Dim htmldoc As Object
③インスタンスの生成
プログラムの処理部でインスタンスを生成。
- Set htmldoc = New HTMLDocument
- 'ここにオブジェクトを使用した処理を記述
- Set htmldoc = Nothing
(参考)「Set htmldoc = New HTMLDocument」の部分を「Set htmldoc = CreateObject(“htmlfile")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。
CreateDocumentFromUrlメソッド
HTMLDocumentオブジェクトのCreateDocumentFromUrlメソッドを実行すると、HTML文書をIHTMLDocument2オブジェクトとして取得できます。
- Set doc = htmldoc.createDocumentFromUrl(bstrURL As String, bstrOptions As String) As IHTMLDocument2
引数として指定できる項目は下表の通りです。
| 引数 | 説明 |
|---|---|
| bstrURL | URL (HTML文書を取得したいURLをString型で指定) |
| bstrOptions | メディアタイプ(Printまたはnull) (vbNullStringを指定) |
■IHTMLDocument2オブジェクトの詳細
IHTMLDocument2オブジェクトには多くのメソッドとプロパティがありますが、後述するサンプル・プログラムで使用しているものを中心に主なものを下表に掲載します。
IHTMLDocument2オブジェクトのメソッド
IHTMLDocument2オブジェクトで提供されているメソッドおよび定義内容は、下表の通りです。
| clearメソッド | |||||||||||
| Sub clear() | |||||||||||
| closeメソッド | |||||||||||
| Sub close() | |||||||||||
| createElementメソッド | |||||||||||
| Function createElement(eTag As String) As IHTMLElement | |||||||||||
| createStyleSheetメソッド | |||||||||||
| Function createStyleSheet([bstrHref As String], [lIndex As Long = -1]) As IHTMLStyleSheet | |||||||||||
| elementFromPointメソッド | |||||||||||
| Function elementFromPoint(x As Long, y As Long) As IHTMLElement | |||||||||||
| execCommandメソッド | |||||||||||
| Function execCommand(cmdID As String, [showUI As Boolean = False], [value]) As Boolean | |||||||||||
| execCommandShowHelpメソッド | |||||||||||
| Function execCommandShowHelp(cmdID As String) As Boolean | |||||||||||
| openメソッド | |||||||||||
| Function open([url As String = “text/html"], [name], [features], [replace]) As Object | |||||||||||
| openメソッド | |||||||||||
| Function open([url As String = “text/html"], [name], [features], [replace]) As Object | |||||||||||
| queryCommandEnabledメソッド | |||||||||||
| Function queryCommandEnabled(cmdID As String) As Boolean | |||||||||||
| queryCommandIndetermメソッド | |||||||||||
| Function queryCommandIndeterm(cmdID As String) As Boolean | |||||||||||
| queryCommandStateメソッド | |||||||||||
| Function queryCommandState(cmdID As String) As Boolean | |||||||||||
| queryCommandSupportedメソッド | |||||||||||
| Function queryCommandSupported(cmdID As String) As Boolean | |||||||||||
| queryCommandTextメソッド | |||||||||||
| Function queryCommandText(cmdID As String) As String | |||||||||||
| queryCommandValueメソッド | |||||||||||
| Function queryCommandValue(cmdID As String) | |||||||||||
| toStringメソッド | |||||||||||
| Function toString() As String | |||||||||||
| writeメソッド | |||||||||||
| Sub write(ParamArray psarray() As Variant) | |||||||||||
| writelnメソッド | |||||||||||
| Sub writeln(ParamArray psarray() As Variant) | |||||||||||
IHTMLDocument2オブジェクトのプロパティ
IHTMLDocument2オブジェクトで提供されているプロパティのうち、次項で説明するIHTMLElementオブジェクトに関連するプロパティおよび定義内容は、下表の通りです。
| activeElementプロパティ(読み取り専用) | |||||||||||
| Property activeElement As IHTMLElement | |||||||||||
| allプロパティ(読み取り専用) | |||||||||||
| Property all As IHTMLElementCollection | |||||||||||
| anchorsプロパティ(読み取り専用) | |||||||||||
| Property anchors As IHTMLElementCollection | |||||||||||
| appletsプロパティ(読み取り専用) | |||||||||||
| Property applets As IHTMLElementCollection | |||||||||||
| bodyプロパティ(読み取り専用) | |||||||||||
| Property body As IHTMLElement | |||||||||||
| embedsプロパティ(読み取り専用) | |||||||||||
| Property embeds As IHTMLElementCollection | |||||||||||
| formsプロパティ(読み取り専用) | |||||||||||
| Property forms As IHTMLElementCollection | |||||||||||
| imagesプロパティ(読み取り専用) | |||||||||||
| Property images As IHTMLElementCollection | |||||||||||
| linksプロパティ(読み取り専用) | |||||||||||
| Property links As IHTMLElementCollection | |||||||||||
| scriptsプロパティ(読み取り専用) | |||||||||||
| Property scripts As IHTMLElementCollection | |||||||||||
■IHTMLElementオブジェクトの詳細
IHTMLElementオブジェクトで提供されているメソッドおよびプロパティは以下の通りです。
IHTMLElementオブジェクトのメソッド
IHTMLElementオブジェクトで提供されているメソッドおよび定義内容は、下表の通りです。
| clickメソッド | |||||||||||
| Sub click() | |||||||||||
| containsメソッド | |||||||||||
| Function contains(pChild As IHTMLElement) As Boolean | |||||||||||
| getAttributeメソッド | |||||||||||
| Function getAttribute(strAttributeName As String, [lFlags As Long]) | |||||||||||
| insertAdjacentHTMLメソッド | |||||||||||
| Sub insertAdjacentHTML(where As String, html As String) | |||||||||||
| insertAdjacentTextメソッド | |||||||||||
| Sub insertAdjacentText(where As String, text As String) | |||||||||||
| removeAttributeメソッド | |||||||||||
| Function removeAttribute(strAttributeName As String, [lFlags As Long = 1]) As Boolean | |||||||||||
| scrollIntoViewメソッド | |||||||||||
| Sub scrollIntoView([varargStart]) | |||||||||||
| setAttributeメソッド | |||||||||||
| Sub setAttribute(strAttributeName As String, AttributeValue, [lFlags As Long = 1]) | |||||||||||
| toStringメソッド | |||||||||||
| Function toString() As String | |||||||||||
IHTMLElementオブジェクトのプロパティ
IHTMLElementオブジェクトで提供されているプロパティおよび定義内容は、下表の通りです。
| allプロパティ(読み取り専用) | |||||||||||
| Property all As Object | |||||||||||
| childrenプロパティ(読み取り専用) | |||||||||||
| Property children As Object | |||||||||||
| classNameプロパティ | |||||||||||
| Property className As String | |||||||||||
| documentプロパティ(読み取り専用) | |||||||||||
| Property document As Object | |||||||||||
| filtersプロパティ(読み取り専用) | |||||||||||
| Property filters As IHTMLFiltersCollection | |||||||||||
| idプロパティ | |||||||||||
| Property id As String | |||||||||||
| innerHTMLプロパティ | |||||||||||
| Property innerHTML As String | |||||||||||
| innerTextプロパティ | |||||||||||
| Property innerText As String | |||||||||||
| isTextEditプロパティ(読み取り専用) | |||||||||||
| Property isTextEdit As Boolean | |||||||||||
| langプロパティ | |||||||||||
| Property lang As String | |||||||||||
| languageプロパティ | |||||||||||
| Property language As String | |||||||||||
| offsetHeightプロパティ(読み取り専用) | |||||||||||
| Property offsetHeight As Long | |||||||||||
| offsetLeftプロパティ(読み取り専用) | |||||||||||
| Property offsetLeft As Long | |||||||||||
| offsetParentプロパティ(読み取り専用) | |||||||||||
| Property offsetParent As IHTMLElement | |||||||||||
| offsetTopプロパティ(読み取り専用) | |||||||||||
| Property offsetTop As Long | |||||||||||
| offsetWidthプロパティ(読み取り専用) | |||||||||||
| Property offsetWidth As Long | |||||||||||
| onafterupdateプロパティ | |||||||||||
| Property onafterupdate As Variant | |||||||||||
| onbeforeupdateプロパティ | |||||||||||
| Property onbeforeupdate As Variant | |||||||||||
| onclickプロパティ | |||||||||||
| Property onclick As Variant | |||||||||||
| ondataavailableプロパティ | |||||||||||
| Property ondataavailable As Variant | |||||||||||
| ondatasetchangedプロパティ | |||||||||||
| Property ondatasetchanged As Variant | |||||||||||
| ondatasetcompleteプロパティ | |||||||||||
| Property ondatasetcomplete As Variant | |||||||||||
| ondblclickプロパティ | |||||||||||
| Property ondblclick As Variant | |||||||||||
| ondragstartプロパティ | |||||||||||
| Property ondragstart As Variant | |||||||||||
| onerrorupdateプロパティ | |||||||||||
| Property onerrorupdate As Variant | |||||||||||
| onfilterchangeプロパティ | |||||||||||
| Property onfilterchange As Variant | |||||||||||
| onhelpプロパティ | |||||||||||
| Property onhelp As Variant | |||||||||||
| onkeydownプロパティ | |||||||||||
| Property onkeydown As Variant | |||||||||||
| onkeypressプロパティ | |||||||||||
| Property onkeypress As Variant | |||||||||||
| onkeyupプロパティ | |||||||||||
| Property onkeyup As Variant | |||||||||||
| onmousedownプロパティ | |||||||||||
| Property onmousedown As Variant | |||||||||||
| onmousemoveプロパティ | |||||||||||
| Property onmousemove As Variant | |||||||||||
| onmouseoutプロパティ | |||||||||||
| Property onmouseout As Variant | |||||||||||
| onmouseoverプロパティ | |||||||||||
| Property onmouseover As Variant | |||||||||||
| onmouseupプロパティ | |||||||||||
| Property onmouseup As Variant | |||||||||||
| onrowenterプロパティ | |||||||||||
| Property onrowenter As Variant | |||||||||||
| onrowexitプロパティ | |||||||||||
| Property onrowexit As Variant | |||||||||||
| onselectstartプロパティ | |||||||||||
| Property onselectstart As Variant | |||||||||||
| outerHTMLプロパティ | |||||||||||
| Property outerHTML As String | |||||||||||
| outerTextプロパティ | |||||||||||
| Property outerText As String | |||||||||||
| parentElementプロパティ(読み取り専用) | |||||||||||
| Property parentElement As IHTMLElement | |||||||||||
| parentTextEditプロパティ(読み取り専用) | |||||||||||
| Property parentTextEdit As IHTMLElement | |||||||||||
| recordNumberプロパティ(読み取り専用) | |||||||||||
| Property recordNumber As Variant | |||||||||||
| sourceIndexプロパティ(読み取り専用) | |||||||||||
| Property sourceIndex As Long | |||||||||||
| styleプロパティ(読み取り専用) | |||||||||||
| Property style As IHTMLStyle | |||||||||||
| tagNameプロパティ(読み取り専用) | |||||||||||
| Property tagName As String | |||||||||||
| titleプロパティ | |||||||||||
| Property title As String | |||||||||||
■HTMLソースをExcelシートに表示する処理
HTMLDocumentオブジェクトを使用して、URL指定でHTML文書を読み込み、HTMLソースを表示するExcelツールです。
処理の概要
処理の流れは以下の通りです。
①HTMLDocumentオブジェクトを作成後、URL指定でHTML文書を読み込み
②HTML文書を行単位で配列に格納し、配列の各要素をExcelシートにセット
③使用済のオブジェクトを破棄
サンプル・プログラム
行番号10でHTMLDocumentオブジェクトを作成し、行番号11~15でHTML文書を取得しています。
行番号11ではHTMLDocumentオブジェクトのcreateDocumentFromUrlメソッドによりHTML文書全体の取得を要求し、行番号12~14で処理の完了を待った後、行番号15でbody部分のソースをString型の変数に代入しています。
行番号16でHTML文書を行単位に分割して配列に格納し、行番号19~22で配列の各要素をExcelシートにセットしています。
(注)HTMLDocumentオブジェクト用のオブジェクト変数を定義する際、行番号1で「Dim sht, htmldoc, doc As Object」と定義したところ、正しく動作しないケースがあったため、行番号2で「Dim htmldoc As MSHTML.HTMLDocument」、行番号3で「Dim doc As MSHTML.IHTMLDocument2」と厳格な定義を行っています。
- Dim sht As Object
- Dim htmldoc As MSHTML.HTMLDocument
- Dim doc As MSHTML.IHTMLDocument2
- Dim tbl As Variant
- Dim strTEXT As String
- Dim i, cnt As Integer
- Private Sub Sample1()
- Set sht = ActiveSheet
- Set htmldoc = New HTMLDocument
- Set doc = htmldoc.createDocumentFromUrl(“https://xxx", vbNullString)
- Do While doc.readyState <> “complete"
- DoEvents
- Loop
- strTEXT = doc.body.innerHTML
- tbl = Split(strTEXT, vbLf)
- cnt = 0
- For i = 0 To UBound(tbl)
- cnt = cnt + 1
- sht.Cells(cnt, 1) = tbl(i)
- Next i
- Set doc = Nothing
- Set htmldoc = Nothing
- End Sub
■HTMLテキストをExcelシートに表示する処理
HTMLDocumentオブジェクトを使用して、URL指定でHTML文書を読み込み、HTMLテキストを表示するExcelツールです。
処理の概要
処理の流れは以下の通りです。
①HTMLDocumentオブジェクトを作成後、URL指定でHTMLテキストを読み込み
②HTMLテキストを行単位で配列に格納し、配列の各要素をExcelシートにセット
③使用済のオブジェクトを破棄
サンプル・プログラム
行番号10でHTMLDocumentオブジェクトを作成し、行番号11~15でHTML文書を取得しています。
行番号11ではHTMLDocumentオブジェクトのcreateDocumentFromUrlメソッドによりHTML文書全体の取得を要求し、行番号12~14で処理の完了を待った後、行番号15でbody部分のテキストをString型の変数に代入しています。
行番号16でHTML文書を行単位に分割して配列に格納し、行番号19~22で配列の各要素をExcelシートにセットしています。
(前項のサンプル・プログラムとの相違点は、行番号15だけです)
- Dim sht As Object
- Dim htmldoc As MSHTML.HTMLDocument
- Dim doc As MSHTML.IHTMLDocument2
- Dim tbl As Variant
- Dim strTEXT As String
- Dim i, cnt As Integer
- Private Sub Sample2()
- Set sht = ActiveSheet
- Set htmldoc = New HTMLDocument
- Set doc = htmldoc.createDocumentFromUrl(“https://xxx", vbNullString)
- Do While doc.readyState <> “complete"
- DoEvents
- Loop
- strTEXT = doc.body.innerText
- tbl = Split(strTEXT, vbLf)
- cnt = 0
- For i = 0 To UBound(tbl)
- cnt = cnt + 1
- sht.Cells(cnt, 1) = tbl(i)
- Next i
- Set doc = Nothing
- Set htmldoc = Nothing
- End Sub
■HTMLソースから画像ファイルのURLを抽出し、Excelシートにハイパーリンクを設定する処理
HTMLDocumentオブジェクトを使用して、URL指定でHTML文書を読み込み、取得したHTMLソースから画像ファイルのURLを抽出し、Excelシートにハイパーリンクを設定するExcelツールです。
処理の概要
処理の流れは以下の通りです。
①HTMLDocumentオブジェクトを作成後、URL指定でHTMLテキストを読み込み
②HTMLソースを検索して画像ファイルのURLを抽出し、Excelシートにハイパーリンクを設定
③使用済のオブジェクトを破棄
サンプル・プログラム
行番号10でHTMLDocumentオブジェクトを作成し、行番号11~15でHTML文書を取得しています。
行番号11ではHTMLDocumentオブジェクトのcreateDocumentFromUrlメソッドによりHTML文書全体の取得を要求し、行番号12~14で処理の完了を待った後、行番号15でbody部分のソースをString型の変数に代入しています。
行番号16でHTML文書を行単位に分割して配列に格納し、行番号18~32で画像ファイルのURLを検索し、ExcelシートのA1セルにハイパーリンクを設定しています。
このサンプル・プログラムでは、<img ~ src="https://xxx.jpg" ~>という形式の文字列を検索しているため、行番号19~20で「<img 」、行番号23で「src=」、行番号24~25で「.jpg」を検索し、行番号26~27でExcelシートのA1セルにハイパーリンクを設定しています。
- Dim sht As Object
- Dim htmldoc As MSHTML.HTMLDocument
- Dim doc As MSHTML.IHTMLDocument2
- Dim tbl1, tbl2 As Variant
- Dim strTEXT As String
- Dim i, j, pos As Integer
- Private Sub Sampl3()
- Set sht = ActiveSheet
- Set htmldoc = New HTMLDocument
- Set doc = htmldoc.createDocumentFromUrl(“https://xxx", vbNullString)
- Do While doc.readyState <> “complete"
- DoEvents
- Loop
- strTEXT = doc.body.innerHTML
- tbl1 = Split(strTEXT, vbLf)
- For i = 0 To UBound(tbl1)
- pos = InStr(tbl1(i), “<img “)
- If pos > 0 Then
- tbl2 = Split(tbl1(i), " “)
- For j = 0 To UBound(tbl2)
- If Left(tbl2(j), 4) = “src=" Then
- pos = InStr(tbl2(j), “.jpg")
- If pos > 0 Then
- sht.Range(“A1") = Mid(tbl2(j), 6, Len(tbl2(j)) – 6)
- sht.Hyperlinks.Add Anchor:=sht.Range(“A1"), Address:=sht.Range(“A1").Value
- End If
- End If
- Next j
- End If
- Next i
- Set doc = Nothing
- Set htmldoc = Nothing
- End Sub
XMLHTTPオブジェクトを使用したHTML文書の取得方法
XMLHTTPオブジェクトは、MicrosoftのXMLドキュメント・オブジェクト・モデル(DOM)に含まれているオブジェクトで、以下のメソッドおよびプロパティが提供されています。
⇒詳細はMicrosoftのサイト(XMLドキュメント・オブジェクト・モデル(DOM))を参照して下さい。
XMLHTTPオブジェクトのメソッド
XMLHTTPオブジェクトで提供されているメソッドおよび定義内容は、下表の通りです。
| abortメソッド | |||||||||||
| Sub abort() | |||||||||||
| getAllResponseHeadersメソッド | |||||||||||
| Function getAllResponseHeaders() As String | |||||||||||
| getResponseHeaderメソッド | |||||||||||
| Function getResponseHeader(bstrHeader As String) As String | |||||||||||
| openメソッド | |||||||||||
| Sub open(bstrMethod As String, bstrUrl As String, [varAsync], [bstrUser], [bstrPassword]) | |||||||||||
| sendメソッド | |||||||||||
| Sub send([varBody]) | |||||||||||
| setRequestHeaderメソッド | |||||||||||
| Sub setRequestHeader(bstrHeader As String, bstrValue As String) | |||||||||||
XMLHTTPオブジェクトのプロパティ
XMLHTTPオブジェクトで提供されているプロパティおよび定義内容は、下表の通りです。
| onreadystatechangeプロパティ | |||||||||||
| Property onreadystatechange As Object | |||||||||||
| readyStateプロパティ(読み取り専用) | |||||||||||
| Property readyState As Long | |||||||||||
| responseBodyプロパティ(読み取り専用) | |||||||||||
| Property responseBody As Variant | |||||||||||
| responseStreamプロパティ(読み取り専用) | |||||||||||
| Property responseStream As Variant | |||||||||||
| responseTextプロパティ(読み取り専用) | |||||||||||
| Property responseText As String | |||||||||||
| responseXMLプロパティ(読み取り専用) | |||||||||||
| Property responseXML As Object | |||||||||||
| statusプロパティ(読み取り専用) | |||||||||||
| Property status As Long | |||||||||||
| statusTextプロパティ(読み取り専用) | |||||||||||
| Property statusText As String | |||||||||||
XMLHTTPオブジェクトを使用して、HTMLソースをExcelシートに表示する処理
ここではXMLHTTPオブジェクトを使用して、HTMLソースをExcelシートに表示するためのサンプルプログラムをご紹介します。
①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft XML. v6.0 Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。
(参考)サンプル・プログラムの行番号8「Set xmlhttp = New XMLHTTP60」の部分を
「Set xmlhttp = CreateObject(“MSXML2.XMLHTTP")]と記述すれば、ライブラリの参照設定は不要です。
②サンプル・プログラム
行番号8でXMLHTTPオブジェクトを作成し、行番号9~14でHTML文書を取得しています。
行番号9でOpenメソッド、行番号10でSendメソッドを実行後、行番号11~13で処理の完了を待った(※)後、行番号14でbody部分のソースをString型の変数に代入しています。
行番号15でHTML文書を行単位に分割して配列に格納し、行番号18~21で配列の各要素をExcelシートにセットしています。
(※)readyStateプロパティの戻り値は、「0:UNINITIALIZED、1:LOADING、2:LOADED、3:INTERACTIVE、4:COMPLETED」と定義されています。
- Dim sht, xmlhttp As Object
- Dim tbl As Variant
- Dim strTEXT As String
- Dim i, cnt As Integer
- Private Sub Sample4()
- Set sht = ActiveSheet
- Set xmlhttp = New XMLHTTP60
- xmlhttp.Open “GET", “https://xxx"
- xmlhttp.Send
- Do While xmlhttp.readyState <> 4
- DoEvents
- Loop
- strTEXT = xmlhttp.responseText
- tbl = Split(strTEXT, vbLf)
- cnt = 0
- For i = 0 To UBound(tbl)
- cnt = cnt + 1
- sht.Cells(cnt, 1) = tbl(i)
- Next i
- Set xmlhttp = Nothing
- End Sub
XMLHTTPオブジェクトとHTMLDocumentオブジェクトを使用して、HTMLテキストをExcelシートに表示する処理
XMLHTTPオブジェクトを使用して、URL指定でHTML文書を読み込み、取得したHTMLソースをHTMLDocumentオブジェクトに書き込んで、HTMLテキストを取得するExcelツールです。
処理の概要
処理の流れは以下の通りです。
①XMLHTTPオブジェクトを作成し、URL指定でHTMLソースを読み込み
②HTMLDocumentオブジェクトを作成し、HTMLソースを書き込んだ後、HTMLテキストを読み込み
③HTMLテキストを行単位で配列に格納し、配列の各要素をExcelシートにセット
④使用済のオブジェクトを破棄
(補足)XMLHTTPオブジェクトを使用した方がHTMLソースの取得に要する時間が短いのですが、XMLHTTPオブジェクトにはHTMLテキストを返す機能がないため、HTMLDocumentオブジェクトに書き込んでHTMLテキストを取得しています。
サンプル・プログラム
行番号8でXMLHTTPオブジェクトを作成し、行番号9~14でHTML文書を取得しています。
行番号9でOpenメソッド、行番号10でSendメソッドを実行後、行番号11~13で処理の完了を待った後、行番号14でbody部分のソースをString型の変数に代入しています。
行番号16でHTMLDocumentオブジェクトを作成し、行番号17でHTMLソースを書き込み、行番号18でbody部分のテキストをString型の変数に代入しています。
行番号19でHTML文書を行単位に分割して配列に格納し、行番号22~25で配列の各要素をExcelシートにセットしています。
(注)HTMLDocumentオブジェクト用のオブジェクト変数を定義する際、前掲のサンプル・プログラムと同様に「Dim htmldoc As MSHTML.HTMLDocument」と定義したところ、Writeメソッドの箇所でエラーになったため、行番号1で「Dim sht, xmlhttp, htmldoc As Object」とアバウトな定義をしています。
- Dim sht, xmlhttp, htmldoc As Object
- Dim tbl As Variant
- Dim strTEXT As String
- Dim i, cnt As Integer
- Private Sub Sample5()
- Set sht = ActiveSheet
- Set xmlhttp = New XMLHTTP60
- xmlhttp.Open “GET", “https://xxx"
- xmlhttp.Send
- Do While xmlhttp.readyState <> 4
- DoEvents
- Loop
- strTEXT = xmlhttp.responseText
- Set htmldoc = New HTMLDocument
- htmldoc.Write strTEXT
- strTEXT = htmldoc.getElementsByTagName(“body")(0).innerText
- tbl = Split(strTEXT, vbLf)
- cnt = 0
- For i = 0 To UBound(tbl)
- cnt = cnt + 1
- sht.Cells(cnt, 1) = tbl(i)
- Next i
- Set htmldoc = Nothing
- Set xmlhttp = Nothing
- End Sub
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ





ディスカッション
コメント一覧
まだ、コメントがありません