[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでのWebクエリーの制御について』(ぴーすー)
初投稿です。お世話になります。
ExcelマクロでのWebクエリーの動作について、質問させてください。
詳細は下記の通りです。
【事象】
Amazonの売り上げランキングのページ(https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_nav_0 など)を読み込み、Excel上にDLしたい。
1ページ目は正しく読み込めるが、2ページ目以降(上記URLの末尾に「#2」を付与)の結果が1ページ目と同じになってしまう。
【原因】
2ページ目の読み込みの際、一旦1ページ目を表示させてから2ページ目の結果を表示する仕様になっているため、画面読み込みが完了しないままWebクエリが走ってしまい、同事象が発生していると推定される。
【対応案】
WEBクエリーで、IEのページ読み込みまでクエリへのDL処理をWaitさせる、もしくは5秒程度waitさせることで、同事象を回避したい。以下は、現在のWebクエリのソースです。
With Sheets("Download").QueryTables.Add(Connection:=s, Destination:=Worksheets("Download").Cells(1, c))
.Name = c .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone '書式なし .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False '読み込み完了を待つ End With
【補足】
本来であれば、Amazonのランキング取得にはAPIを通して実行するのが望ましいが、今回はAPIは使用しないでランキング取得したい。
APIを用いないRSSフィードだと、10位までしか取得できないという制約がある状況。
長文申し訳ありませんが、有識者の方にアドバイスをいただきたく思っております。
以上、よろしくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
追記:ためしたけれど上手くいかないいようですね。
just a moment.
追追記:
上手くいくようです。
(γ) 2016/09/27(火) 19:53
肝心のところが、単に s となっているので、分かりません。
すみません。上記sは変数として定義しているものになります。
プログラム全体は下記の通りです(長くてすみません。。。)
Sub Home_額縁1_Click()
'Loop処理変数の宣言
Dim r As Long '<== 行数をカウントアップするための変数 Dim c As Long '<== 列数をカウントアップするための変数 Dim s As String '<== URLを格納するための変数
r = 20 '<== まずは変数rの初期値を設定しておきます(20行目の意) c = 1 '<== まずは変数cの初期値を設定しておきます(1列目の意)
'Downloadシートの全てのセルの内容を削除
'SheetClear
'↓ここからループのスタートです Do While Cells(r, 1) <> "URL;" '<== 1列目(A列)が【「URL;」でない間】ループ処理を続行します(Whileキーワードで判定)
' URLの格納 s = Worksheets("Home").Cells(r, 1).Value
With Sheets("Download").QueryTables.Add(Connection:=s, Destination:=Worksheets("Download").Cells(1, c)) .Name = c .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone '書式なし .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False '読み込み完了を待つ End With
'変数rとcを1つ繰り上げ r = r + 1 '<== これを忘れると永久ループになってしまいます c = c + 1 '<== これを忘れると永久ループになってしまいます
Loop
'メッセージボックスで処理終了を表示 MsgBox "データのDL・加工が完了しました。"
End Sub
(ぴーすー) 2016/09/27(火) 21:35
(γ) 2016/09/27(火) 22:16
Excel上に下記の様にURLをセットする欄がありまして、そこに下記の様に設定しています。
URL;https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_nav_0
URL;https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_nav_0#2
URL;https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_nav_0#3
…
VBでそれを見に行って、変数sに格納する様にしています。
以上、よろしくお願いします。
(ぴーすー) 2016/09/27(火) 23:06
私にとっては、#2といったページ内リンクを使う根拠がわかりませんでした。
(γ) 2016/09/28(水) 05:41
#2を使用した根拠としては、1ページ目URL(https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_baby_pg_1?ie=UTF8&pg=1)の下部にある21〜40位をクリックすると出てきたのが「#」つきのリンク(https://www.amazon.co.jp/gp/bestsellers/baby/ref=zg_bs_baby_pg_1?ie=UTF8&pg=1#2)だったので、そのまま使用したからになります。
pg=1#2など、ページ数 # ページ数の場合はページ内リンクなのですね。
私の勉強不足でした。ありがとうございます。
(ぴーすー) 2016/09/28(水) 10:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.