ウェブクエリのマクロ不正時の対応方法とは?

このQ&Aのポイント
  • エクセルにウェブクエリのマクロを組み込んで動かす際に、実行結果が正常と異常の2パターン存在することがあります。
  • 問題が発生する原因として、ヤフーの株価ランキングから取得した株価が一部ページで表示されない場合があります。
  • 詳細な処理内容やソースコードも共有されています。IE6で実行していることが明記されています。
回答を見る
  • ベストアンサー

ウェブクエリのマクロが不正な時がある

お世話になります、 エクセルにウェブクエリのマクロを組み込んで動かしたら 実行結果がOKの場合と駄目な場合があります。 ヤフーの株価ランキングから4ページ分をシートに 落とす処理なのですが7~8回に一度くらいページ があるのに株価表示がないような落ち方をします。 IE6で実行しています。 ソースは '1-4Loop処理 For i = 1 To UBound(urls) 'ワークシート追加 Worksheets("Sheet1").Select Worksheets.Add before:=Worksheets(ActiveSheet.Name) '名前を設定 ActiveSheet.Name = "rank" & i 'webクエリ取得対象シートをアクティブ Set ws = Worksheets("rank" & i) ws.Activate 'QueryTableがなければ追加する If ws.QueryTables.Count = 0 Then 'QueryTableの設定 With ws.QueryTables.Add("URL;", ws.Range("A1")) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone .WebTables = "17" End With End If With ws.QueryTables(1) .Connection = urls(i) .BackgroundQuery = True .Refresh BackgroundQuery:=False End With Next 宜しくお願いいたします。

noname#127172
noname#127172

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

[回答番号:No.1] の DOUGLAS_ です。  そもそも、 >株価表示がないような落ち方をします。 とお書きなのは、マクロ実行後に、いくつかのシートが1行目に 1 / 36 ページを表示(合計:1767件)[ 前の50件 | 次の50件 ] のような文字列だけが表示される、ということかなと存じまして、前回答を書きました。  この場合、[ツール バー] - [外部データ] の [データの更新] をクリックすると他のワークシートと同様の内容を読み込むようですので、 >毎回、取得するしかない ということでしたら、 Next の前に If Range("A1") <> "順位" And Range("A1") <> "コード" Then  ws.QueryTables(1).Refresh BackgroundQuery:=False End If とでもおまじないを書いておくといかがでしょうか?

noname#127172
質問者

お礼

アドバイス有難うございました、 If Range("A1") <> "順位" And Range("A1") <> "コード" Then  ws.QueryTables(1).Refresh BackgroundQuery:=False End If 教えて頂いた方法を参考に解決しました。 お世話様でした。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 お示しのコードは、 >ヤフーの株価ランキングから4ページ分をシートに落とす処理 ですよね。  毎度毎度、新たなシートを作成して、その処理をしていらっしゃるのでしょうか? >7~8回に一度くらいページがあるのに株価表示がないような落ち方をします。  この際、マクロで毎度の更新処理をするのではなくて、上記マクロは1回だけ実行しておいて、そのブックを保存し、開いた時に、[外部データ] の [すべて更新] が行なわれるように、ブックモジュール に Private Sub Workbook_Open()  ActiveWorkbook.RefreshAll End Sub と書いておくか、それでもダメなら、[ツール バー] - [外部データ] の [すべて更新] をクリックしてみられたらいかがでしょうか?

noname#127172
質問者

補足

説明不足で申し訳ありません、 処理に当たって取得するランキング形式 (値上がり率、値下がり率・・・)を 選択できる形式にしているので念の為 毎回削除する仕様にしています。 毎回、取得するしかないと思うのですが、 何か良いお考えがあれば宜しくお願いいたします。

関連するQ&A

  • WEBクエリ

    WEBクエリでヤフーから、時系列で株価を取得するマクロを作っています。 シートAの左に、次々と1銘柄1シートで読み込む場合、下のコードをもっと短くする方法はあるのでしょうか?コードは同じで、銘柄の番号のみ違います。よろしくお願いします。 Sheets("A").Select Sheets.Add ActiveSheet.Name = "2002" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2002.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2002" Sheets("A").Select Sheets.Add ActiveSheet.Name = "2202" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2202.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2202" Sheets("A").Select Sheets.Add ActiveSheet.Name = "3000" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=3000.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "3000" ・ ・ ・ このような感じで銘柄の番号のみが違うコードが続きます。

  • マクロを使ったWEBクエリでデータが正常にできない

    マクロを使ったWEBクエリでデータが正常に取得できない エクセル2013を使用しております。 下記URLを参考に、マクロでWEBクエリで116ページ分の データ取得用マクロを作成してみたのですが、データ取得が出来ません。 マクロを使用したWEBクエリをご存知の方がいらっしゃいましたら 解決方法をアドバイス頂きたいと思います。 -参考元- http://okwave.jp/qa/q8208492.html 取得したいWEBページ http://www.walkerplus.com/spot_list/ar0300/2.html http://www.walkerplus.com/spot_list/ar0300/3.html ... http://www.walkerplus.com/spot_list/ar0300/117.html 取得用シートに記載したURL 2.html 3.html ... 117.html -作成したマクロです- Sub WEBクエリ実行() Dim St As Object Dim I As Integer Set St = ActiveSheet Sheets.Add After:=Sheets(Sheets.Count) For I = 1 To 116 With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.walkerplus.com/spot_list/ar0300/" & Format(St.Cells(I, 1), "@"), Destination:=Range("C" & (I - 1) * 1000 + 1)) .FieldNames = True .FillAdjacentFormulas = False .PreserveFormatting = True .BackgroundQuery = True .SaveData = True .AdjustColumnWidth = True .WebTables = "1" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .Refresh BackgroundQuery:=False End With Next I End Sub -マクロは ここまで- 修正箇所のアドバイス もしくは、 他の方法でも、117ページ全て取得可能なマクロをアドバイス頂けると嬉しいです!

  • VBAのUserformのボタンからwebクエリ

    VBAのUserformのボタンを押すことによってwebクエリを取得という形を希望しているのですが、 以下のようにコードを設定した場合、Button1をクリックしただけではずっと”取得中”という文字が表示されるだけで何も動きはありません。 そこで、フォーム自体を×ボタンで消すと、その直後にwebクエリのデータが指定のシートに反映されます。 Private Sub CommandButton1_Click() 'Webクエリ作成 'WebSelectionType = xlAllTables With ActiveSheet.QueryTables.Add( _ Connection:="URL;http://www.yahoo.co.jp", _ Destination:=Worksheets("abc").Cells(1, 1)) .WebSelectionType = xlAllTables '既定値 .Refresh End With End Sub なぜフォームを消さないとシートに反映されないのでしょうか? ボタンを押すだけで即座に反映され、その後も作業を続けられるようにしたいので、方法を教えてください。 よろしくお願いします。

  • VBA Webクエリについて

    VBA初心者です。 VBAを使い、下記「やりたいこと」をしたいのですが、 「質問内容」にありますように、上手くできません…。 基礎がわかっていない為、お粗末な内容かもしれませんが、 教えてください。何卒よろしくお願い致します。 ■やりたいこと シート「1」にあるURLアドレスのリスト(C列)に沿って WEBクエリを実行し、シート「2」に取得したデータを 連続して末行に入力したいです。 ■質問内容 見よう見真似で、下記VBAを作成しました。(1To3は仮の回数です) WEBクエリが実行され、末行に取得データが入力されますが、 1回目、2回目の取得データは消え(長い空白行ができ)、 ラストの3回目のデータのみが残るかたちになります。 取得したデータが消えず、連続してWEBクエリを実行できるよう 下記を添削して頂けませんでしょうか。 ---------------------------------------------------------------- Sub Macro2() Dim Lrow As Long For カウンタ = 1 To 3 Lrow = Worksheets("2").Range("A" & CStr(Rows.Count)).End(xlUp).Row セル範囲 = "C" & カウンタ With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & Worksheets("1").Range(セル範囲).Value, Destination:=Worksheets("2").Range("A" & Lrow)) .Name = Worksheets("1").Range(セル範囲).Value .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 Next End Sub

  • VBAでのwebクエリ更新について

    下記のように、For文で各シートに設定してあるwebクエリを更新しています。 問題は、サイトによって更新中にExcelに拘束され他の操作ができなくなる(ネットブラウザで文字が打てなかったり、ページが開けなかったり)場合があります。 そこで、webクエリの更新をバックグランドで処理して、他の操作ができるようにするみたいなことはできるのでしょうか?詳しい方アドバイスよろしくお願いしますm(_ _)m For i = 1 To MAX Worksheets("シート名" & i).Range("B5").QueryTable.Refresh BackgroundQuery:=False Next i

  • Webクエリで困っています

    以下のマクロを作りました。Webクエリで、セルA1に入力してあるURLを読み込んで表を取り込み、必要なところを選択してコピーするようにしたいのです。しかし、実行すると上から3行目まで黄色になってエラーになります。特に3行目には矢印が表示されています。いろいろ調べましたが結局分かりませんでした。宜しくお願いします。 ------------------------------------------------------ Sub クエリで取得() ' ' クエリで取得 Macro ' マクロ記録日 : 2009/7/30 ユーザー名 : charlie ' ' With ActiveSheet.QueryTables.Add(Connection:= _ Range("A1").Value _ , Destination:=Range("A2")) .Name = "resultlist?tbws=x0p01a&hd=20090716&jcd=01_2" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshOnFileOpen = False .BackgroundQuery = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range("A19:Q54").Select Selection.Copy End Sub ----------------------------------------------------------

  • 連続してWEBクエリを実行

    VBA初心者です。(作業環境Windows7 64bit Excel2010) 現在、WEBクエリを使用し、あるホームページより情報を収集する作業を行っているのですが、 WEBクエリをループさせる技術がない為、作業が難航しております。 具体的に行いたい作業としましては、 A列に商品番号を数種類入れておき、VBAにてURLの後ろにその番号を追加、 つなぎ合わせたURLでホームページにアクセス ⇒ 情報を収集するというものです。 乏しい知識をフル活用し、ループさせずに情報を収集するところまでは作成できたのですが、 どちら様か、ループさせる方法を教えていただける方がおりましたら、ご指導いただけないでしょうか。 ■セルに予め入力する番号例■       A 【1】 131023999 【2】 131022082 【3】 131023869 【4】 131023796 【5】 131044236 ※最終的には、一度に100種類のページにアクセスしたいと考えております。 ■現在作成しているVBAサンプル■ Sub WEBクエリ実行() Dim SIC1 As String Dim SIC2 As String Dim SIC3 As String SIC1 = Range("A1").Text SIC2 = Range("A2").Text SIC3 = Range("A3").Text On Error Resume Next With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.bcn-chubu.jp/search/detailed.php?id=" & SIC1, Destination:=Range("C1")) .FieldNames = True .FillAdjacentFormulas = False .PreserveFormatting = True .BackgroundQuery = True .SaveData = True .AdjustColumnWidth = True .WebTables = "1" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .Refresh BackgroundQuery:=False End With With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.bcn-chubu.jp/search/detailed.php?id=" & SIC2, Destination:=Range("C31")) .FieldNames = True .FillAdjacentFormulas = False .PreserveFormatting = True .BackgroundQuery = True .SaveData = True .AdjustColumnWidth = True .WebTables = "1" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .Refresh BackgroundQuery:=False End With With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.bcn-chubu.jp/search/detailed.php?id=" & SIC3, Destination:=Range("C61")) .FieldNames = True .FillAdjacentFormulas = False .PreserveFormatting = True .BackgroundQuery = True .SaveData = True .AdjustColumnWidth = True .WebTables = "1" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .Refresh BackgroundQuery:=False End With End Sub ちなみに、WEBクエリで収集した情報は、それぞれ指定のセルにアウトプットさせております。 ※30行刻みで情報が書き出されるようになっております。 VBA初心者のため、現在作成しているプログラムが「正しいのか」さえ、判断できていない状況ですが、ご指導いただける方がおりましたら、何卒よろしくお願いいたします。

  • Excel webクエリ データ抽出に時間がかかる

    エクセルのwebクエリを使ってヤフーファイナンスよりデータをダウンロードしたいと考えています。 ネットで調べて以下のようなマクロを組みましたが、実行してから完了するまで1秒ほどかかります。 Sub データ抽出() With Worksheets("test") With .QueryTables.Add(Connection:="URL;http://stocks.finance.yahoo.co.jp/stocks/history/?code=1301.T", Destination:=Range("$A$1")) .WebSelectionType = xlSpecifiedTables .WebTables = "2" .Refresh BackgroundQuery:=False .Parent.Names(.Name).Delete .Delete End With End With End Sub 上のものは【1301】(株)極洋のものですが、これを全銘柄で実行したいのですが、時間がかかりすぎます。 みなさんもそのくらいのスピードで行っているのでしょうか。 改善するところがあれば教えていただきたいです。 OSはwindows7, Excelは2010です。 宜しくお願いします。

  • WEBクエリで読み取ったデータを更新したい

    A1には http://table.yahoo.co.jp/t?s=8888.t&g=w が入力されています。 下のマクロでデータを取り込みました。(1回目) 翌日、データを取り込みました。(2回目) このとき、A1にあったURLがN1に移動しています。 また、1回目のデータがN10:U65に残っています。 3回目を試みましたが、最後まで行きませんでした。 そこで質問です。 2回目の動作後もN10:U65にデータが残ってしまうので残らないようにする方法を教えてください。 データがA10:G65の範囲で更新されるには何が不足か教えてください。 以上時間の許す方でご存知の方がいらっしゃいましたら教えてください。 Sub Macro1() Dim myQT As QueryTable With ActiveSheet Set myQT = .QueryTables.Add _ (Connection:="URL;" & .Range("A1").Text, _ Destination:=.Range("A10")) myQT.WebTables = 13 myQT.Refresh BackgroundQuery:=False End With End Sub

  • VBAでのクエリ抽出でURL指定の中で変数使用

    VBAでのクエリ抽出文(下記)で、URL指定文の中で変数を使用したいのですが""で囲まれているため使用できません。なにかよい方法はないでしょうか。 With ActiveSheet.QueryTables.Add(Connection:= _ "url;http://www.○○○.com/○○「変数」", _ Destination:=Range("A101")) .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "1,2,3" .Refresh BackgroundQuery:=False End With 「変数」の部分で変数を使いたいのですが。

専門家に質問してみよう