自動でできることはなるべく自動で。そう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 

続く・・・・