スポンサーリンク

【簡単】VBAでIEの表をエクセルに書き出す方法~VBA(マクロ)でIE操作

IE関係
この記事は約5分で読めます。
スポンサーリンク

VBAでIEの表の内容をエクセルに書き出す方法~

IEの表をVBAでエクセルに書き出したい!
でも、IDや名前もわからないし、どうやって抜き出すべきかわからない!
という人も多いかと思います。
そこで今回は、楽天証券の表の内容を書き出すプログラムを説明しながら、
その方法を解説したいと思います。

楽天証券の表の内容を書き出す

楽天証券の表を書き出すためのコードになります。簡単に説明すると、
①サイトを立ち上げて
tagName=”tr”を検索 (”tr”は「行」を表します。)
.chirdrenを用いてtrの中の子要素の「列」を取得、書き出し。
 ※何個列があるかわからないので、とりあえず20まで取得。
  エラーが起こらないようにOn Error Resume Next入れてます。
という内容です。

Sub IE_table_output()
    
 Application.ScreenUpdating = False
     
'IEの起動
Dim objIE As Object
     
Set objIE = GetObject("", "InternetExplorer.Application")
     
objIE.Visible = True
         
    objIE.Navigate "https://www.rakuten-sec.co.jp/web/fund/find/search/result.html"  ' このURLを任意に変更
         
    ' ページの表示完了待ち。
    While objIE.ReadyState <> 4 Or objIE.Busy = True
        DoEvents
    Wend
     
    On Error Resume Next      '値がないとエラーが出るので、エラー回避用
    
    I = 1  '開始行を指定
    L = 0
    J = objIE.document.all.Length  '要素の数を知る
        
    Cells(I, 1).Value = "No"
              
    Dim A As Object
         
    For Each A In objIE.document.getElementsByTagName("tr")
    
        For L = 0 To 20
    
            Cells(I, L + 1) = A.Children(L).innertext
           
        Next
        
        I = I + 1
            
        'ステータスバーに進捗を表示
        Application.StatusBar = I & "/" & J
         
    Next
        
    On Error GoTo 0
  
    Cells.WrapText = False
    
Application.ScreenUpdating = True
Application.StatusBar = False

End Sub

上記のプログラムを実行すると楽天証券の下記の表を、エクセルに書き出すことができたと思います。

↓エクセルに書き出される

プログラムの解説

htmlの表(テーブル)の構成

htmlの表の構成は下記のようになっております。
trが行、th,tdが列を示し、trの中にthやtdが含まれております。
この特性を利用してプログラムを書いていきます。
※ちなみにthは「見出しで太字となり中央揃い」tdは「通常の文で左揃い」の違いです。

<table>
<tr>
 <th>行1列1</th>
 <th>行1列2 </th>
 <th>行1列3 </th>
 </tr>
 <tr>
 <td>行2列1</td>
 <td>行2列2 </td>
 <td>行2列3 </td> 
 </tr>
 <tr>
 <td>行3列1</td>
 <td>行3列2 </td>
 <td>行3列3 </td> 
 </tr> 
 </table>

For Each A In objIE.document.getElementsByTagName(“tr”)

まずは、for each構文を使って、タグの名前がtrのものをAに格納します。

objIE.document.getElementsByTagName(“tr”).Children(”番号”) .innertext

列の要素はtrタグの中にありましたので、
A.Children(”番号”).innerhtmlでtrタグの中のテキストを一つずつ書き出していきます。
注意していただきたいことは、番号が「0」から始まることです。
ちなみに今回は、列の要素が何個あるかわからなかったので、0~20と21回繰り返しています。
また、要素がないとエラーが起きますので、On Error Resume Next で無理やり実行しています。

セルへの書き出し

trは行を表していますので、trごとにi=i+1と加算していっています。
また、子要素tdは列でしたので、子要素を進めるのと同時にL=L+1と加算してセルに書き出していっています。

おまけ:Application.StatusBar = I & “/” & J

進捗状況を確認するため、ステータスバーに進捗状況を表示させています。

記事のまとめ

この記事のまとめは下記のとおりです。

・表のデータは、chirdrenを用いて要素を特定すると簡単に書き出すことができる!
・番号は(0)から始まるので注意すること!

コメント欄

タイトルとURLをコピーしました