質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

411閲覧

VBAを使って、web上から数値を引っ張りたい

junkij

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/10/22 04:33

編集2020/10/22 05:09

初めてVBAを使って、IEからデータを引っ張りたいと思ったのですが、出来なくなってしまいました。

参考にしたサイトは
https://tonari-it.com/vba-ie-list/
です

商品の価格調査を行っておりまして、それをVBAを使って自動化したいと考えております。

やりたいこと
・A1セルにある商品名を、サイトで検索し、出てきたページに記載ある数値をB1セルに入力。

下記のコードを実行すると、エラーは起きないのですが、数値も入力されませんでした。

VBA

1Sub 完成版() 2 3 Dim ieApp As Internetexplorer 4 Set ieApp = New Internetexplorer 5 ieApp.Visible = True 6 ieApp.Navigate "検索するサイトのURL" 7 8 Do While ieApp.Busy = True Or ieApp.ReadyState < READYSTATE_COMPLETE 9 DoEvents 10 Loop 11 Dim doc As HTMLDocument 12 Set doc = ieApp.Document 13 14 Dim sbox As IHTMLElement 15 Set sbox = doc.getElementsByName("商品名")(0) 16 17 Dim tBox As IHTMLElement 18 Dim wb As Workbook 19 Set wb = ThisWorkbook 20 21 Dim sh As Worksheet 22 Set sh = wb.ActiveSheet 23 24 Set tBox = doc.getElementsByName("商品名")(0) 25 tBox.Value = sh.Range("A1").Value 26 27 Dim sButton As IHTMLElement 28 Set sButton = doc.getElementsByName("searchbutton")(0) 29 sButton.Click 30 31 Cells("1,2").Value = doc.getElementsByClassName("smaller")(0).innerText 32 33End Sub

読みづらい点も多々あるかと思いますが、
ご教授お願い致します。

追記
イメージ説明
念のため、<smaller>の中の56125が引っ張りたい数値です

追記
イメージ説明
確認したところ、A1セルを入力する前のページにもsmallerがありました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

radames1000

2020/10/22 04:42

L1にも何も入力されていませんか?
hatena19

2020/10/22 04:46

> 出来なくなってしまいました。 ということは以前はできていたということですか。 その時のコードは提示のコードと同じものですか。
junkij

2020/10/22 04:48

radames1000さん ありがとうございます。 ... more と表示されました
junkij

2020/10/22 04:50

hatena19さん ありがとうございます 誤解のある表現で申し訳ございません 以前出来ていたわけではなく 今回初めて作成し、初めて出たエラーです。
radames1000

2020/10/22 04:54

Cells("1,2")だとL1が指定されています。B1だとCells(1,2)です。
hatena19

2020/10/22 05:01

Set tBox = doc.getElementsByName("商品名")(0) tBox.Value = sh.Range("A1").Value の部分ですが、目的のテキストボックスにA1の値がちゃんと入力されていますか。 ステップ実行で確認してみてください。 https://www.excelspeedup.com/vbadebug/
hatena19

2020/10/22 05:06 編集

Cells("1,2").Value の部分は間違いですね。 Cells(1, 2).Value が正解です。
junkij

2020/10/22 05:02

初歩的な事で失礼いたしました。 B1には表示されましたが 「... more」はA1セルの値を入力する前のサイト上にある値のようです
junkij

2020/10/22 05:06

hatena19さん ありがとうございます Set tBox = doc.getElementsByName("商品名")(0) tBox.Value = sh.Range("A1").Value の部分ですが、目的のテキストボックスにA1の値がちゃんと入力されていますか。 こちらはテキストボックスにA1セルの値が入力されていました
hatena19

2020/10/22 05:07

sButton.Click(検索ボタンクリック)で検索結果が表示されるまで時間がかかると思いますので、少し待機するようにするいいかと思います。
junkij

2020/10/22 05:17

hatena19さん ありがとうございます sButton.Clickのしたに Do While ieApp.Busy = True Or ieApp.ReadyState < READYSTATE_COMPLETE DoEvents Loop を入れてみましたが、結果は変わりませんでした 検索後のページはieAppではなく、べつで指定する必要があるのでしょうか?
hatena19

2020/10/22 05:24

実際のURLの提示がないので、そのページがどのような動作をするのか確認できませんので、あくまで推測ですが、検索ボタンクリックで別URLへ移動しているのでしょうか。移動せずに同じURLのままなら、回答の方法を試してみてください。
guest

回答1

0

ベストアンサー

sButton.Click(検索ボタンクリック)で検索結果が表示されるまで時間がかかると思いますので、少し待機するようにするいいかと思います。

例えば下記のような感じで。

vba

1 sButton.Click 2 3 Dim res As String 4 res = doc.getElementsByClassName("smaller")(0).innerText 5 For i = 1 tp 50 6 If Not res Like "*more*" Then Exit For 7 DoEvents 8 Sleep 200 '0.2秒待機 9 res = doc.getElementsByClassName("smaller")(0).innerText 10 Next 11 If res Like "*more*" Then 12 Msgbox "検索に失敗しました。しばらく待って再トライしてください。" 13 Else 14 Cells(1, 2).Value = res 15 End If

モジュールの宣言部に下記のコードが必要です。

vba

1Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

投稿2020/10/22 05:21

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

junkij

2020/10/22 05:25

hatena19さん できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問