VBA IE操作について
こんばんわ。いつもお世話になっております。
初心者の質問ですが、先生方のご意見ご指導宜しくお願いいたします。
OS : windows7 , EXCEL2007
--------------------------------------------------------------
プロ野球のサイトにアクセスし、(セントラル・リーグ)の球団に在籍する選手
の画像を自動で取得するコードを作りたいと思っています。
(1) 2012年度 選手一覧 → http://bis.npb.or.jp/players/ を開く
(2) 球団名のリンクをクリックして球団ページへ移動する
(3) 球団ページ内の選手名のリンクをクリックして選手ページへ移動する
(4) 選手紹介欄の画像を取得する
上記のような行程なのですが、(2)の球団数も6球団あります。
(4)の選手数にしても何十人もいますので、for ~ next でループさせたいと思っています。
このような場合IEで処理することは可能なのでしょうか?
参考サイトなどから沢山のお知恵をいただき、下記のようなコードを試してみたのですが、
エラーとなり、うまくいきませんでした。
sheet1
A
1
2
3 中日ドラゴンズ
4 東京ヤクルトスワローズ
5 読売ジャイアンツ
6 阪神タイガース
7 広島東洋カープ
8 広島東洋カープ
9 横浜DeNAベイスターズ
Sub Test ()
Sub Graph_Down2()
Dim nmbr As Integer
nmbr = Range("A3").End(xlDown).Row - 2
Set objIE = CreateObject("InternetExplorer.Application") 'IEを開く
objIE.Visible = True
objIE.Navigate "http://bis.npb.or.jp/players/"
Do While objIE.ReadyState <> 4 'サイトが開くまで待機
Do While objIE.Busy = True
Loop
Loop
For i = 0 To nmbr
'表示されているサイトのアンカータグ一つずつを変数objにセット
For Each obj In objIE.Document.getElementsByTagName("a")
'Obj.innerTextと全機種名が一致すれば
If Trim(Range("A" & i + 3).Value) = Trim(obj.innerText) Then
'該当するタグをクリック
obj.Click 'ページジャンプ
'//
'移動したページの画像を取得する処理コードを書く
'//
objIE.GoBack '前のページへ戻る '* ここでエラーになります
Exit For
End If
Next
Next i
' Set Obj = Nothing
' objIE.Quit
' Set objIE = Nothing
End Sub
上記コードですが、
IEで2012年度 選手一覧を開く → A3の球団名と一致したリンクをクリック →
中日ドラゴンズのページに移動 まではできています。
この先の処理についてご指導いただければと思います。
基礎ができていないど素人のため拙い説明ですが、
お分かりの方いましたら是非ご指導願います。
宜しくお願いいたします!
No.1ベストアンサー
- 回答日時:
こんにちわ
>objIE.GoBack '前のページへ戻る '* ここでエラーになります
これはobj.Click 'ページジャンプでリンク先に飛んだ場合はそうなるみたいですね。
また、私の環境ではobj.Click での処理は、
動作が不安定になるのでまったく違う方法を書きます。
Sub Graph_Down2()
Dim re As Object 'VBScript.RegExp
Dim mc As Object 'RegExp.Match
Dim mcmc As Object 'RegExp.Match
Dim url As String 'URLアドレス
Dim ret As String 'XMLHTTP.responsetext
Dim objIE, obj
Dim i As Long, j As Long, k As Long
Sheets("Sheet1").Cells.ClearContents
Set re = CreateObject("VBScript.RegExp")
re.Global = True
Set objIE = CreateObject("InternetExplorer.Application") 'IEを開く
objIE.Visible = True
objIE.Navigate "http://bis.npb.or.jp/players/"
Do While objIE.ReadyState <> 4 'サイトが開くまで待機
Do While objIE.Busy = True
Loop
Loop
ret = objIE.Document.body.innerHTML
' <a href="/teams/rst_d.html"> 球団のURL
re.Pattern = "<A href=""/(teams/rst_[dsgtc]b?\.html)"">"
Set mc = re.Execute(ret)
For j = 0 To mc.Count - 1
'Sheets("Sheet1")のA列にURLを書き出す。
Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1) = _
"http://bis.npb.or.jp/" & mc(j).SubMatches(0)
objIE.Navigate "http://bis.npb.or.jp/" & mc(j).SubMatches(0)
Do While objIE.ReadyState <> 4 'サイトが開くまで待機
Do While objIE.Busy = True
Loop
Loop
ret = objIE.Document.body.innerHTML
'<A href="/players/91595118.html"> 選手のURL
re.Pattern = "<A href=""/(players/\d+\.html)"">"
Set mcmc = re.Execute(ret)
For k = 0 To mcmc.Count - 1
'Sheets("Sheet1")のC列にURLを書き出す。
Sheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Offset(1) = _
"http://bis.npb.or.jp/" & mcmc(k).SubMatches(0)
Next k
Next j
Set obj = Nothing
objIE.Quit
Set objIE = Nothing
End Sub
Sub 画像を取得()
Dim objIE, obj
Dim i As Long, j As Long, k As Long
Set objIE = CreateObject("InternetExplorer.Application") 'IEを開く
objIE.Visible = True
'For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To 5 'テストのため、取りあえず4回まわす。
objIE.Navigate Sheets("Sheet1").Cells(i, 3).Value
Do While objIE.ReadyState <> 4 'サイトが開くまで待機
Do While objIE.Busy = True
Loop
Loop
MsgBox "ここに画像を取得する処理コードを書く"
Next i
objIE.Quit
Set objIE = Nothing
End Sub
また、画像の取得は私の手に余りますので、
もう一度、質問をしてください。
ありがとうございます。
しっかりとURLが取得できました。あとは画像取得のコードを考えていきたいと思います。
正規表現は苦手で、ずっと手を付けないままでしたが、
これを機に勉強したいと思います。
ありがとうございました。
また再度質問するかもしれませんが、
その時は宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像をクリックしたら音楽が流...
-
クッションページ?というのは...
-
リンク先からリンク元の、同じ...
-
インラインフレームの中に表示...
-
<a target="_top" href="***.ht...
-
リンクをクリックすると、同時...
-
作成したイメージマップが反応...
-
httpdで接続が拒否される
-
iframe内の特定の場所にジャン...
-
マウスを置くと説明文が出るや...
-
sitemap.xmlとサイトマップ.htm...
-
<table>をリンクボタンにした時...
-
指定した演算を実施の結果を表...
-
HTMLからフォルダを開きたい
-
社内で利用するWebサイトを立ち...
-
XREA使用で作成したHTMLファイ...
-
java_run.batがダウンロードで...
-
iPadの標準ブラウザでローカルH...
-
Excelで、社外秘(閲覧のみ)と...
-
WinでもMacでもHPを表示する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
form action="#"
-
リンク先からリンク元の、同じ...
-
googleサーチコンソールで、重...
-
<a href="/">トップへ</a> こ...
-
ページの途中にリンクするとそ...
-
httpdで接続が拒否される
-
画面を開いたときに指定位置ま...
-
a:linkのスタイルのインライン指定
-
iframe内の特定の場所にジャン...
-
Preタグ内URLからリンクは張れ...
-
<a target="_top" href="***.ht...
-
リンクの文字とリンクの文字を...
-
ポップアップ画面にアンカーを...
-
WEBページのヘッダーフッターを...
-
マップを使ってページをリンク...
-
ページ内の画像だけを一定時間...
-
DREAMWEAVER アンカーポイント...
-
インラインフレーム内のアンカ...
-
Excel VBAを使ってHTML生成をし...
-
フラグメント識別子によるジャ...
おすすめ情報