• 締切済み

連続して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初心者のため、現在作成しているプログラムが「正しいのか」さえ、判断できていない状況ですが、ご指導いただける方がおりましたら、何卒よろしくお願いいたします。

みんなの回答

noname#184106
noname#184106
回答No.1

こんにちわ。 こちらでいけると思います。 Sub WEBクエリ実行() Dim St As Object Dim I As Integer Set St = ActiveSheet Sheets.Add After:=Sheets(Sheets.Count) For I = 1 To 5 With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.bcn-chubu.jp/search/detailed.php?id=" & Format(St.Cells(I, 1), "@"), Destination:=Range("C" & (I - 1) * 30 + 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

関連するQ&A

  • 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 ----------------------------------------------------------

  • データのある所まで指定したい

    下記のようにB3からB80までマクロ実行できる様に設定しておきます。 例えばB38までしかデータがない場合、B39でデバッグになってしまいます。 データの入っている所まで実行できるようにお願い致します。 e = 70 ***************************************************** Dim y3 As String y3 = Range("B3").Value Dim cp3 As String cp3 = Range("P3").Value With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & y3, Destination:=Range("E" & e + 1)) .Name = "000" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "" & cp3 .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With e = Range("E65536").End(xlUp).Row ******************************************************      ・      ・      ・ ****************************************************** Dim y80 As String y80 = Range("B80").Value Dim cp80 As String cp80 = Range("P80").Value With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & y80, Destination:=Range("E" & e + 1)) .Name = "000" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "" & cp80 .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With e = Range("E65536").End(xlUp).Row ********************************************************

  • EXCELのwebクエリについての質問です。

    EXCELのwebクエリについての質問です。 よろしくお願いします。 webサイトにあるデータをエクセルに自動で取り込みたいのですが、 そのサイトが、データ100件毎にページを増やしていく仕様なので50ページあったら50回 も手動でデータを取りにいかないといけません。なんとかして自動にしたいのですが・・・ そのサイトはhttp://○×○×.com/page=1/のように"page="に数値を入れれば良いのでエクセルでなんとかなりそうかなと思い質問しました。 ウェブクエリ取得をマクロで記録してみました。 With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://○×○×.com/page=1", Destination _ :=Range("$A$1")) .Name = "page=1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "2" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With この中で、 1."page=1"を連番で連続取得したい。(総ページ数は人的に確認して、どこかに入力できればいいです) 2.エクセルに1つの表にしたいので:=Range("$A$1")だと上書きしていってしまのでどうにかしたい。 3..Name = "page=1"も連番で増やしていきたい。 こんなことは可能でしょうか。 VBAは初心者以下です。 どなたかお助けください。

  • エクセルマクロ WEBクエリを使用。WEBのURLを一部変数にし順次データを表示させたいのですが、うまくいきません。

    WEBクエリでWEB画面上の一部の情報をエクセル上に表示させます。 その際、URLの一部を変更して、順次新しいデータを表示させたいのです。 具体的にはURLに数字があり、その数字を変数にし、エクセル上にある複数の数字を順次読ませて次々表示させるイメージです。 まず「マクロの記録」を使って、WEBクエリを読ませるベースを作りました。 例として、yahooファイナンスを使ったケースを用いますと ---------------------------------------------------- Sub Macro1() ' Macro1 Macro With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://quote.yahoo.co.jp/q?s=6758.t&d=t", Destination:=Range("$A$1")) .Name = "q?s=6758.t&d=t" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "10" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub ---------------------------------------------------- とマクロが書かれました。 この中の6758は証券コードで、別の証券コードにしたときの情報を取得したいため、6758を変数にしました。 ---------------------------------------------------- Dim SIC As Integer SIC = Range("A1").Text  ---------------------------------------------------- (注)Range("A1")に6758という数値が入っています この2文を上記ベースマクロの冒頭に加え、 ベースマクロ内の"6758"(2箇所)を"SIC"に打ちかえたら、 うまく読んでこないのです。 読ませるにはどうしたらよいでしょう。 素人なため、質問内容がわかりにくかったらご容赦ください。 わかりやすく教えて頂けるとありがたいです。 よろしくお願いします。

  • エクセルWEBクエリ 貼り付け時の自動変換

    WEBクエリにて、データをシートに張り付ける際、 データの1:1 1:2 3:2などのコロンが間にある文字列が、 ユーザー定義の時間として認識して貼り付けされてしまい困っております。(h:mm) (例) 1:1 1:2 3:2 → 1:01 1:02 3:02 一通り、ヘルプやVBAのヘルプなどを見ましたが、わかりませんでした。 ハイフンで区切られているものは、WEBクエリ中のオプションで日付認識無効をチェックすることで、解決出来るようですが、コロン「:」の解決策は見当たりません。m(__)m もしご存知の方がおられたら、ご教授のほどお願い申し上げます。 そのままの数字が認識できれば、どんな方法でも構いません。 下記は、参考にWEBクエリのマクロ記録そのままの状態です。 Sub Macro5() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.○○○", Destination:=Range("$A$1") ) .Name = "1122" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "12" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = True .WebDisableDateRecognition = True .WebDisableRedirections = True .Refresh BackgroundQuery:=False End With End Sub

  • 取り込みたいWEBページのURLをURLが入力されているセルから取得(エクセル2002)

    最初に下のようにマクロを組みました。 WEBデータを取り込むマクロです。 【やってみたいこと】 セル上に入力されているURLを取り込む。 A1にhttp://biz.yahoo.co.jp/ranking/up/day/all.html が入力されていた場合に "URL;http://biz.yahoo.co.jp/ranking/up/day/all.html" のURL部分「http://biz.yahoo.co.jp/ranking/up/day/all.html」 を(A1)などに置き換えることは可能でしょうか? Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2004/10/15 ユーザー名 : ' ' With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://biz.yahoo.co.jp/ranking/up/day/all.html", Destination:=Range("A1" _ )) .Name = "all" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "11" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub

  • VBAの追加

    同じ様な場所からデータを取り出す時、欲しい情報はWebTables="5"でK3に「5」を入力しておきますが、たまに1つか2つくらい場所違いにより欲しい情報はWebTables="4"の時が存在します。 l3(エル3)に「4」を入力しておいて、WebTables =5に欲しくない情報が入っている場合はWebTables =4を使用するという命令を追加したいと思います。 下記右側のようにセルに「メーカー」の文字が入っていればそのままWebTables =5を使い、「メーカー」の文字が入っていなければWebTables =4を実行 と考えております。 また、それ以外の方法でも構いませんのでお願い致します。 Dim i As Long Dim myAddress As String lastrow = ActiveSheet.Range("A3").End(xlDown).Row d = 50 For i = 3 To lastrow myAddress = Range("B" & i).Value Dim bbb As String bbb = Range("K3").Value With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & myAddress, Destination:=Range("B" & d + 1)) .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "" & bbb .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With d = Range("B65536").End(xlUp).Row Next i                     WebTables =5の場合                     正しく欲しい情報                     111111111111111111         メーカー1111111111                     111111111111111111     →   11111111111111111                     111111111111111111         11111111111111111 WebTables =4の場合 正しく欲しい情報      欲しくない情報が入っている 111111111111111111     222222222222222222 111111111111111111     222222222222222222 111111111111111111     222222222222222222

  • エクセルVBA URLの記述をセル参照に

    VBA初心者です。WEBクエリの作業をマクロで記録したものを編集しています。 そこで、コードのURL部分をセル参照にしたいのですが、コンパイルエラーが出るため記述が間違っているようです。もともとが間違っているのかどうかもわからず、その点につきまして、ご教授をお願い申し上げます。 Connection:="URL;http://www.○○○○" ↓編集 (URLを入れているセルは、Sheet1のA1、データを返すのはSheet2のA1) Connection:="ActiveWorkbook.WorkSheets("Sheet1").Range("A1")" "Sheet1"部分が選択された状態でエラーとなります。 以下は、ソースです。 Sub test1() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.○○○○", Destination:=Range _ ("$A$1")) .Name = "151" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "22" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub

  • WEBクリエを使って、財務情報を取得

    WEBクリエを使って、ロイターのサイトからを損益計算書、 貸借対照表、キャッシュ・フロー計算書を取得しています 成功するときは3つとも確実に取得出来るのですが、たまに失敗して 3つとも損益計算書だったりする時があります この原因は何なのでしょうか? 解る方、ご教授下さい コードは下記の様な感じで書いてます myURL21 = "URL;http://jp.reuters.com/investing/quotes/financialStatements?symbol=" myURL22 = ".T&statement=is" With ActiveSheet.QueryTables.Add(Connection:= _ myURL21 & Sheets("DL1").Range("A1") & myURL22, Destination _ :=Range("A10")) .Name = "financialStatements?symbol=" & Sheets("DL1").Range("A1") & myURL22 .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .Refresh BackgroundQuery:=False .Delete End With

  • 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

専門家に質問してみよう