自動でできることはなるべく自動で。そうEXCELのVBAがあればIEの定型業務をクリック一発で済ませられるのです。

環境

実際に当サイトのページを操作できるエクセルファイルを用意しました。改造して使ってください

VBAでIEを操作するにあたっての概念

概念を最初に理解しておくとわかりやすい。
すごく大雑把に言うと、

「IE(オブジェクト)でURLに移動し、移動先のIEのページ内容をHTMLdocumentオブジェクトに代入、そして操作する」です。

  • IEオブジェクト
  • HTMLdocumentオブジェクト

この上記2個のオブジェクトの命令とプロパティさえわかればよいのです。

  • id="login"にユーザー名をセットするには?
  • 2番目のフォームの3つ目の「削除ボタン」をクリックしたい
  • ページを印刷したい

どのオブジェクトに命令を出すか?これが間違っていなければ、思い通りにIEを操作できます。下に図を置きます。

 

 

ではコードを実際に見てみよう。

サンプルサイトとエクセルファイルも用意しています。

エクセルでライブラリの参照など 準備編

エクセルでVBAを動かしIEを操作するには設定が必要です。

http://www.vba-ie.net/library/ を参考にして初期設定してください

さあ、ここから俺流コードを書いてゆきますよ

 URLを開く

エクセルを起動すると自動でURLを開きます。

Auto_Open()はエクセルファイルを開くと自動で実行する関数です。

Dim objIE As InternetExplorer 'IEオブジェクトを準備

Const HOMEURL = "https://samuraishockdo.info/sample/vba/" '定数にURLをセットしておく

Sub Auto_Open()
    
    Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット
    
    objIE.Visible = True 'IEを表示
     
    objIE.navigate "https://samuraishockdo.info/sample/vba/" 'IEでURLを開く

End Sub

リンクを開く

HTMLといえばリンク。まずはリンクを開く操作のいろいろ

何番目かのリンクを開く

objIE.document.Linksでページ全体のリンクのリスト(配列)を取得できる。何番目というのは(添え数字)で選ぶことが出来る。
それを.clickすることで選んだリンクをクリックしたことになる。クリックしたいリンクがページ内で固定の時はこれでOKだ。

Sub 三番目のリンクオープン()

'objIE.document.Links でページ全体のリンクのリストを得る(2)で3番目のリンクを取得できる

    objIE.document.Links(2).Click

End Sub

リンクのテキストを判定してリンクを開く

開きたいリンクが毎回順番が変わるがリンクの文字は固定の場合、リンク全体からリンクの文字を判定してリンクを開く。
リンク全体のコレクションを取得して、それをループする。
リンク.Textでリンクのテキストを取得できる、それをifで判定して.Clickする。

Sub リンクの文字列によるリンクオープン()
'objIE.document.Links でページ全体のリンクのリストを得てループする
'目的の文字列を含むリンクをクリックする

    ' リンクのコレクションを得て、1個づつリンクをループする
    For Each link In objIE.document.Links
        
        'リンクのテキスト部分が"ブログ"ならクリックする。
        
        If link.Text = "ブログ" Then
         link.Click
         End If
        
        
    Next link


End Sub

テーブル編、リンク文字がすべて同じでTDが違う場合でリンクを開く

テーブル内のリンクの文字が全部同じでリンクでは判定できない。TDにはそれぞれ違う名前がある場合は、まずTDの全体を取得して、TDを1個づつループする
そしてinner.Textが目的の文字列とマッチしたら、その子要素をchildren(添え字)で取得
今回はaタグはchildren(0)なので.children(0).Clickとする。

Sub テーブルセルの文字列で判定してリンクオープン()

'objIE.document.getElementsByTagName("td")で全体のTDのリストを得てループする

For Each td In objIE.document.getElementsByTagName("td")
    
     'Instr関数でtd.innerTextに"きょうの千鳥"が含まれていたらを判定
     If InStr(td.innerText, "きょうの千鳥") Then
     
     ' td.Children(0)はTDの子要素0番目(すなわちaタグ)そいつをクリック!!
        td.Children(0).Click
        
     End If

Next td

End Sub

続く・・・・