Excel-VBA IEに表示したWebページテキストを取得するマクロ

2019/12/31

プログラム

t f B! P L
Excel VBAマクロ。今回は
IEに表示したWebページテキストを取得するマクロ
を示す。

IE(Internet Explorer)をひらいて接続待機。
WebページのHTMLテキスト部分を取得して
エクセルシートに入力。
取得した値をWebページに入力したり、
ボタンをクリックするマクロ。

■Excel-VBA IEに表示したWebページテキストを取得するマクロ

Sub sample51()

    Dim ObjIE As Object
    Set ObjIE = CreateObject("InternetExplorer.Application")
    ObjIE.Visible = True
    ObjIE.navigate "http://〇〇"
    Call IEWait(ObjIE)

Dim PIC As Long
Dim k As Long
Dim TN As String
Dim PN As String
PIC = 666

For k = 1 To PIC
    ObjIE.navigate "http://〇〇"
    Call IEWait(ObjIE)

Dim Obj As Object
Dim j As Integer
Dim i As Integer
  j = 0

  For Each Obj In ObjIE.Document.all
    Select Case Obj.tagName
      Case "TR", "TD", "TH"
          Select Case Obj.tagName
            Case "TR"
              j = j + 1
              i = 0
            Case "TD", "TH"
              i = i + 1
              ActiveSheet.Cells(j, i).Value = Obj.innerText
          End Select
    End Select
  Next
    
    Cells(8, 2).Replace What:=" ", replacement:=""
    Cells(4, 2).Replace What:=" ", replacement:=""
    ActiveSheet.Calculate
TN = Cells(4, 2)
PN = Cells(8, 2)

  For Each objTag In ObjIE.Document.getElementsByTagName("input")
    If InStr(objTag.outerHTML, "Input_TN") > 0 Then
      objTag.Value = TN
    Call IEWait(ObjIE)
      Exit For
    End If
  Next

  For Each objTag In ObjIE.Document.getElementsByTagName("input")
    If InStr(objTag.outerHTML, "Input_PN") > 0 Then
      objTag.Value = PN
    Call IEWait(ObjIE)
      Exit For
    End If
  Next

  For Each objTag In ObjIE.Document.getElementsByTagName("input")
    If InStr(objTag.outerHTML, "Button_F1") > 0 Then
      objTag.Click
    Call IEWait(ObjIE)
      Exit For
    End If
  Next

  For Each objTag In ObjIE.Document.getElementsByTagName("input")
    If InStr(objTag.outerHTML, "Button_F2") > 0 Then
      objTag.Click
    Call IEWait(ObjIE)
      Exit For
    End If
  Next

    Next k

End Sub

Function IEWait(ByRef ObjIE As Object)
    Do While ObjIE.Busy = True Or ObjIE.readyState <> 4
        DoEvents
    Loop
End Function
※[3.] 変数宣言。
※[4.] IEをオブジェクトにセット。
※[5.] IEを可視化。
※[6.] IEを任意のURLに接続。
※[7.] Webページ読み込み待機マクロ呼び出し。

※[9.~12.] 変数宣言。
※[13.] 入力してボタン押すループ処理回数。

※[15.] 666回ループ処理。
※[16.] IEを任意のURLに接続。
※[17.] Webページ読み込み待機マクロ呼び出し。
※[19.~21.] 変数宣言。
※[22.] jを初期化。

※[24.~36.] TR,TD,THタグの要素取得して
エクセルシートにテキスト値を入力。
※[37.~38.] 半角スペース削除。
※[39.] アクティブシートの関数を計算する。
※[40.~41.] テキスト値を変数にセット。

※[43.~49.] HTMLのinputタグ名「Input_TN」に
j行1列目のセルの値を入力する。
※[51.~57.] HTMLのinputタグ名「Input_PN」に
j行2列目のセルの値を入力する。
※[59.~65.] HTMLのinputタグ名「Button_F1」を
クリックする。
※[67.~73.] HTMLのinputタグ名「Button_F2」を
クリックする。
※[75.] 次の行に処理をうつる。
※[79.~83.] Webページ読み込み待機マクロ。

■マクロ実行対象

■ワークブック「Book.xlsx」

■IEで表示されたテキストを取得したいWebページ。
社内システムなど。

■マクロ実行結果

実行すると、Webページのテキストを取得して
エクセルシートに転記。
その値をWebページに入力、
ボタンをクリックして自動処理する。

■あとがき

今回はExcel VBAマクロ。
IEに表示したWebページテキストを取得するマクロ
を示した。

Webページのテキストを取得して自動処理
したい場合に使う。

本マクロではテキスト取得して
半角スペース削除後、
Webページ入力とボタンのクリック、
それを666回ループ処理
まで行っているが、
テキスト取得のみであれば以下のコードとなる。
Sub sample51a()

    Dim ObjIE As Object
    Set ObjIE = CreateObject("InternetExplorer.Application")
    ObjIE.Visible = True
    ObjIE.navigate "http://〇〇"
    Call IEWait(ObjIE)

Dim Obj As Object
Dim j As Integer
Dim i As Integer
  j = 0

  For Each Obj In ObjIE.Document.all
    Select Case Obj.tagName
      Case "TR", "TD", "TH"
          Select Case Obj.tagName
            Case "TR"
              j = j + 1
              i = 0
            Case "TD", "TH"
              i = i + 1
              ActiveSheet.Cells(j, i).Value = Obj.innerText
          End Select
    End Select
  Next

End Sub

Function IEWait(ByRef ObjIE As Object)
    Do While ObjIE.Busy = True Or ObjIE.readyState <> 4
        DoEvents
    Loop
End Function

【関連記事】
Excel-VBA IEのタグネームクリックと値を入力するマクロ

LibreOfficeBasicではエラーが出て使えなかった。
666は悪魔の数字というが、特に意味はない。
以上。

ブログ アーカイブ

ラベル

このブログを検索

スポンサーリンク

自己紹介

機械メーカー総合職正社員10年勤務後退職。 エクセルVBAプログラム歴 5年。 LibreOffice(無料)でVBAマクロ検証。
■Fortniteクエスト攻略動画■
■Twitter■
⇒詳細プロフィールを表示

QooQ