テキストボックス以外から値を取得する 

操作対象画面(単純なテーブルの例)を起動
'サンプル3.4.1_テキストボックス以外(テーブル)から値を取得する
Public Sub getDataFromTable()
    Dim ie As InternetExplorer
    Dim htdoc As HTMLDocument
    Dim TDs As Object
    Dim TD As HTMLTableCell
    
    '操作対象Web画面を取得
    Set ie = getIE("単純なテーブルの例")
    'ドキュメントを取り出す(参照設定:Microsoft HTML Object Library)
    Set htdoc = ie.document
    'ドキュメントに含まれるすべてのTD要素を取り出す
    Set TDs = htdoc.getElementsByTagName("TD")
    'すべてのTD要素内の値を出力する
    For Each TD In TDs
        'innerTextを出力
        MsgBox TD.innerText
    Next
End Sub

'ドキュメントタイトル/URLを指定してIEを取得
Public Function getIE(arg_title As String, Optional arg_url As String) As Object
    Dim ie As Object    'IEを格納する変数(オブジェクト型)
    Dim sh As Object    '起動中のShellWindow一式を格納する変数
    Dim win As Object   'ShellWindowを格納する変数
    Dim document_title As String    'ドキュメントタイトルの一時格納変数
    Set sh = CreateObject("Shell.Application")  'ShellWindowをwinsに格納
    'ShellWindowから1つづつ取得して処理
    For Each win In sh.windows
        'ドキュメントタイトル取得失敗を無視(処理継続)
        On Error Resume Next
        document_title = ""
        document_title = win.document.Title
        On Error GoTo 0
        'タイトルバーに引数が含まれるかチェック
        If InStr(document_title, arg_title) > 0 Then
            Set ie = win  '変数ieに取得したwinを格納
            Exit For      'ループを抜ける
        End If
    Next
    Set getIE = ie  '値の返却
End Function
タグから値を取得する場合、まずはタグ名を指定してHTML文書中のすべての特定タグ要素を取得する。
Set TDs = htdoc.getElementsByTagName("TD")
取得した各要素に対して、For Eachでループさせれば全要素の値が出力できるわ。
For Each TD In TDs
    'innerTextを出力
    MsgBox TD.innerText
Next
'サンプル3.4.2_テキストボックス以外(テーブル)から値を取得する(特定値)
Public Sub getDataFromTable2()
    Dim ie As InternetExplorer
    Dim htdoc As HTMLDocument
    Dim TDs As Object
    Dim i As Integer
    
    '操作対象Web画面を取得
    Set ie = getIE("単純なテーブルの例")
    'ドキュメントを取り出す(参照設定:Microsoft HTML Object Library)
    Set htdoc = ie.document
    'ドキュメントに含まれるすべてのTD要素を取り出す
    Set TDs = htdoc.getElementsByTagName("TD")
    'すべてのTD要素内の値をチェック(Lengthは要素数なので、indexとしては-1が必要)
    For i = 0 To TDs.Length - 1
        'innerTextをチェック
        If TDs(i).innerText = "ラーメン" Then
            '次のTDタグに金額があるのでi+1番目のinnerTextを表示
            MsgBox TDs(i + 1).innerText
            'ループを抜ける
            Exit For
        End If
    Next
End Sub

'ドキュメントタイトル/URLを指定してIEを取得
Public Function getIE(arg_title As String, Optional arg_url As String) As Object
    Dim ie As Object    'IEを格納する変数(オブジェクト型)
    Dim sh As Object    '起動中のShellWindow一式を格納する変数
    Dim win As Object   'ShellWindowを格納する変数
    Dim document_title As String    'ドキュメントタイトルの一時格納変数
    Set sh = CreateObject("Shell.Application")  'ShellWindowをwinsに格納
    'ShellWindowから1つづつ取得して処理
    For Each win In sh.windows
        'ドキュメントタイトル取得失敗を無視(処理継続)
        On Error Resume Next
        document_title = ""
        document_title = win.document.Title
        On Error GoTo 0
        'タイトルバーに引数が含まれるかチェック
        If InStr(document_title, arg_title) > 0 Then
            Set ie = win  '変数ieに取得したwinを格納
            Exit For      'ループを抜ける
        End If
    Next
    Set getIE = ie  '値の返却
End Function
先の例ではテーブルのすべてのセル値を取得したけれど、今度はテーブル中の特定の値、たとえば「ラーメン」に対応する価格を取得する。
考え方としては、「ラーメン」という値が出てきたら、その次のTDタグの値を取得する、という処理を作るわ。
そのためにはループの条件をFor Eachから以下のように修正する必要がある。
For i = 0 To TDs.Length - 1
ループの中ではTD要素の中身を評価して、「ラーメン」だった場合に「i + 1」番目のTD要素の値を取得する。
If TDs(i).innerText = "ラーメン" Then
    '次のTDタグに金額があるのでi+1番目のinnerTextを表示
    MsgBox TDs(i + 1).innerText
今回はシンプルなテーブルなのでi+1が隣のセルを表すけれど、複雑な段組や入れ子構造がある場合はiに加算する値を調整したり出現回数を意識する場合があるわ。