WEB HTML形式のテーブル(表)の値を取得する

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit
'**************************************************
'HTML形式のテーブル(表)の値を取得する
'**************************************************
'1.ユーザーフォームを設置 UserForm1
'2.テキストボックスを設置 TextBox1
'3.コマンドボタンを設置 CommandButton1
'4.WebBrowserを設置 WebBrowser1


'**************************************************
'フォーム上のブラウザに指定アドレス先を表示
'**************************************************
Private Sub CommandButton1_Click()
    Me.WebBrowser1.Navigate Trim(Me.TextBox1.Value)
End Sub



'**************************************************
'読み込み(DL)が完了後発生するイベント
'**************************************************
'注意:テーブルエレメントは行も列も「0」から始まります。
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)

Dim sht As Worksheet, cnt As Long
Dim cnty As Long, str As String

'抽出した値を格納するシートを指定
Set sht = ThisWorkbook.Worksheets("Sheet4")

Dim objTable As Object
Dim 全テーブル数 As Long
Dim 該当テーブル番号 As Long
Dim 行数 As Long, x As Long
Dim 列数 As Long, y As Long
Dim テキスト As String
Dim 目的タイトル As String

    'HTMLドキュメントのテーブルタグをオブジェクトにセット
    Set objTable = Me.WebBrowser1.Document.getElementsByTagName("TABLE")

    'TABLEが無い場合
    If objTable Is Nothing Then
        Set objTable = Nothing
        MsgBox "TABLE Object Nothing!"
        Exit Sub
    End If

    'TABLEが無い場合
    If objTable.Length = 0 Then
        Set objTable = Nothing
        MsgBox "TABLE Object 全テーブル数 = 0!"
        Exit Sub
    Else
        全テーブル数 = objTable.Length - 1
    End If

    '全テキストのみ抽出(因みに)
    テキスト = objTable(0).Rows(0).Cells(0).innerText

    '目的のテーブル番号指定
    該当テーブル番号 = 7

    str = objTable(該当テーブル番号).Rows(0).Cells(0).innerText

    目的タイトル = Trim(Mid(str, 1, InStr(1, str, "[") - 1))

    '目的のテーブル番号指定
    該当テーブル番号 = 11

    '目的のテーブル行数取得
    行数 = objTable(該当テーブル番号).Rows.Length - 1 '縦数

    'エラー回避
    If 行数 < 0 Then
        MsgBox "TABLE Object ERR!"
        Exit Sub
    End If

        '(項目行必要の場合は0から始める)
        '(項目行不要の場合は1から始める)
        For x = 1 To 行数
            '目的のテーブル列数取得
            列数 = objTable(該当テーブル番号).Rows(x).Cells.Length - 1
                'エラー回避
                If 列数 < 0 Then
                    MsgBox "TABLE Object ERR!"
                    Exit Sub
                End If

            '書き込むシートの最終行取得
            cnt = sht.Cells(65536, 1).End(xlUp).Row + 1
            'シート書き込み用列番号を初期化
            cnty = 0
            cnty = cnty + 1
            sht.Cells(cnt, cnty).Value = 目的タイトル
            For y = 0 To 列数
                cnty = cnty + 1
                テキスト = objTable(該当テーブル番号).Rows(x).Cells(y).innerText
                Debug.Print "テ[" & 該当テーブル番号 & "]" & "行[" & x & "]" & "列[" & y & "]:" & テキスト
                sht.Cells(cnt, cnty).Value = Trim(テキスト)
            Next y
        Next x

    Set objTable = Nothing

End Sub

 

2000年01月01日|[VBサンプルコード]:[WEB]