• ベストアンサー

Webクエリで”次の10件”も自動で取り込むには?

取り込むWeb上の表が1画面のみの場合は簡単なのですが、”次の10件”や”次のページ”よいった格好で、取り込みたい表(データ)が複数のページに及ぶ場合、そのデータをマクロ等で自動的に取り込むためにはどうしたらよいのですか?全部で1000件あるデータを取り込む場合、とても手作業で100回(1000件÷10件)も繰り返すのは現実的ではないため。

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

基本的には、ページ数を何らかの方法で取得して、URLを 固定部分+変数で指定してループさうるだけです。 ↓はYahoo電話帳をウェブクエリで取得するサンプルです。 ただ、ちょいと不安定です。 >.Refresh BackgroundQuery:=False でエラーになる可能性があります。 WEBクエリを使わずにWEBソースから内容を取得する方法も ありますが、全てのHPで使えるわけではありません。 Option Explicit Public myie As Object Public kai1 As Integer Public kai2 As Integer Sub denwatyou() Dim s As String Dim kai As Integer Dim i As Long Dim j As Integer Dim k As Integer Dim cnt As Long Dim myrng As Range Dim myurl As String Dim motourl As String motourl = "http://phonebook.yahoo.co.jp/list?a2=46201&g3=4467000" Set myie = CreateObject("InternetExplorer.Application") With myie .navigate motourl .Visible = True While .Busy Or .readyState <> 4 Wend Call numget kai = kai2 \ kai1 + 1 For k = 1 To kai Set myrng = Worksheets(1).Cells(65536, 1).End(xlUp).Offset(1) 'myurl = motourl & motourl & "&b=" & k & "&h=s" '----- If Right(motourl, 1) = "/" Then myURL = motourl & "?b=" & k & "&h=s" Else myURL = motourl & "&b=" & k & "&h=s" End If '------ myie.navigate myurl While myie.Busy Or myie.readyState <> 4 Wend With ActiveSheet.QueryTables.Add(Connection:="URL;" & myurl, Destination:=myrng) .Name = Split(motourl, "/")(3) .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 Next k End With End Sub Sub numget() Dim Mybody As String Dim s As Variant Dim linestr As String Dim i As Long Dim cnt As Long Dim MyDoc As Object 'MSHTML.HTMLDocument Set MyDoc = myie.document Mybody = MyDoc.body.innerHTML s = Split(Mybody, vbCrLf) cnt = UBound(s) For i = 0 To cnt linestr = s(i) If linestr Like "*</B>件中<B>*" Then kai2 = Split(Split(linestr, "<B>")(1), "</B>")(0) kai1 = Split(Split(Split(linestr, "<B>")(2), "</B>")(0), "~")(1) Exit For End If Next i 'myie.Quit End Sub

hakuhodoma
質問者

お礼

回答ありがとうございます。 ただ、​http://phonebook.yahoo.co.jp/list?a2=46201&g3=4467000"​ にアクセスしたら 「指定されたURLは見つかりませんでした。」が出てきて、せっかくの回答内容を検証できません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

URLの不具合については、ちょうど別サイトでも話題になってました。 あえてURLはリンクしませんが、 「WEBからコピー時の特殊文字(?)の削除」 で検索したら見つかると思います。 まだ進行中の話題です。 URLをWEBからコピペするのでしたら参考になると思います。 また、IEで現在表示しているページのURLを取得するなら こんなかんじいけます。 タイトルの取得も入れてあります。 Dim MyShell As Object, MyWindow As Object Dim myurl As String Dim mytitle As String Set MyShell = CreateObject("Shell.Application") For Each MyWindow In MyShell.Windows If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then myurl = MyWindow.Locationurl mytitle = MyWindow.document.Title MsgBox myurl & vbCrLf & mytitle End If Next Set MyShell = Nothing

全文を見る
すると、全ての回答が全文表示されます。
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

WebからコピーしてそのままVBEに貼り付けてませんか? そうするとURLの部分がおかしくなります。 テキストエディタにコードを貼り付けてみると、URLの部分 の前後に長さ0の文字列が挿入されているようです。 URLの部分を修正して実行してみてください。 ※私のコードをVBEに貼り付けると、URLの部分が赤くなっているはずです。 この状態のときはおかしいと思ってください。

hakuhodoma
質問者

お礼

ありがとうございます。 上手く動きますね。 大変助かりました。 出力された表を見映えよく整えるくらいは自分でVBできますので、これからやります。

hakuhodoma
質問者

補足

たびたび申し訳ありません。 For i = 0 To cnt linestr = s(i) If linestr Like "*</B>件中<B>*" Then kai2 = Split(Split(linestr, "<B>")(1), "</B>")(0) kai1 = Split(Split(Split(linestr, "<B>")(2), "</B>")(0), "~")(1) Exit For End If Next i が全く理解できません。いくら検索しても、似たようなものにヒットしないため、さっぱりわかりません。"*</B>件中<B>*は一体何なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「次へ」で更新する複数のWEBページを自動で次ページを開いてWEBページを保存したいのですが・・・

    サイトを開くとページが複数ページにわたっていて、「次へ」を押すことにより次ページを開くようになっていますが、私の保存したいサイトは80ページぐらいになるのでとても手作業で開いては保存、という作業をするには時間がかかりすぎます。 こういった作業を自動で実行してくれるフリーのソフトはないでしょうか?

  • Webぺーじの表を取得

    データベースについて無知なのでご教示いただけると幸いです。 あるWebページ中のランキング表(テーブルで記述されています)を分析したいと思っているのですが、自動的にページ中の表の部分だけを抽出して保存するにはどのような方法がありますでしょうか? データ管理ソフトはOpenOfficeくらいしか持っていません。 すでに200ページほどパソコンに取りこんでいるのですが、その中のデータを手作業で抜き出すのが大変なので質問してみました。 意味不明な質問かもしれませんが、アドバイス頂けると幸いです。よろしくお願いいたします。

  • Webページからテキストを自動で抽出するプログラム

    複数のWebページ(html)からテキストだけを抽出する作業を自動で行うツールが必要なのですが、知っているのがあれば教えて欲しいです。 または、それを開発するにはどの言語が教えてくださると嬉しいです。 Webページのテキストの一部でもいいですが、すべてを抽出しても構いません。

  • 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 clipper作業自動化

    (1)ある学習サイトのWebページをgoogle chromeで開く (2)web clipper evernoteで記事をクリップ (3)次のレッスンへ行くボタンを押す →(1)に戻る という作業を自動化することは可能でしょうか? ※パソコンはmacです。

  • Webクエリ

    会社のイントラネットデータの売上データ表を落とすのにマクロを組んだのですが、 例えでいうと 大分類 □トヨタ □日産 □ホンダ 中分類 □カローラ □スカイライン □プレリュード 小分類 □1500000 □3000000 □2000000 の様に、大分類の欲しいデータのチェックボックスにサインして実行、次に中分類の欲しいデータのチェックボックスにサインして実行、最後に小分類の欲しいデータのチェックボックスにサインして実行してハイリッチ型式かhtmlにサインして取り込みすると、欲しい小分類のデータでなく大分類データになってしまいます。 後で、画面のデータソースをCSS型式で保存をかけたところ保存名のところの名前が大分類中分類小分類それぞれ同じでした。これは、どうしてなのでしょうか?又、その作ったマクロで試しに実行したらその日は、実行できたのですが、つぎの日欲しいデータ取り込みではないですが、試しに実行してみたら、Lodingという文字が貼り付けられて終了でした。時間日付によって代わってしまうjaba?だからでしょうか?

  • エクセルの最終ページだけを自動印刷

    エクセルの最終ページだけを自動印刷するには、どうしたらいいのでしょうか?マクロVBAを使い、エクセルシートが、何ページにわたって印刷されるのか判定し、その最終ページだけを印刷したいのです。 目的は、エクセルの表の最終行に新しいレコードを追加して行ってるのですが。手作業ですといちいちプレビューして何ページにまたがってるか確認して、そのページ番号を指定せねばなりません。その最終ページだけ印刷したいことがよくあるので、マクロで自動化したいのです。

  • ExcelVBAの繰り返し処理でwebクエリの取込みできますか。

    こんにちは。VBA初心者の駆け出しです。 よろしくお願いします。 「外部データの取込み」→「新しいwebクエリ」からデータを取り込んで、集計するマクロに取り組んでいますが、 webクエリの部分はマクロの記録で自動記述されたものを使っています。 URLが指定されるので、変数をおいてみたけどダメでした。 そもそも外部デ-タの取り込みは、変数使えないのでしょうか? すみません、データベースがサイトにしかなくて、webクエリしか方法がないのですが。。 サイトが(データが)膨大で、取り込む回数が100を超えるんで、URLだけ変更して、同じ記述を繰り返して使ってるのですが、 それだけでモジュール2つにしないとエラーになってしまいます。なんとかURLの部分を変数にできないか、とお助けをお願いします。もくはwebクエリを保存して、そのファイルを利用できないでしょうか? 各webページは同形式です。 未熟ながらloopが使えれば、と考えたのですが、脳が足らなくて、こちらに始めて投稿した次第です。説明分かりづらい所があったらご指摘お願いします。 環境: win2000 XP Officce ver.2002 2003 混合した環境です。 マクロを保存先のExcelは2003です。

  • アクセスでウェブ上のデータを半自動的に取り込みたいのですが

     今まで、気象データの集計をするのに、特定のウェブ上で参照したい年月日を入力して、その日の時毎データの頁を開き、データ表をマウスで範囲を指定してコピーし、エクセルに貼り付けて、そのデータを用いて集計を行っておりました。  しかし、上記の方法ですといちいち年月日の指定→画面の表示後必要箇所をコピー→エクセルに戻って貼り付け→ウェブに行って次の日の指定→と繰り返し作業が面倒です。  そこで、アクセスのフォームで取り込みたい年月日の範囲を指定することで、参照元のウェブから、特定範囲のデータを次々にコピーして、テーブルに各データを格納できるマクロを作成できないかと考えました。 所有バージョンはアクセス2002です。  今まではエクセルをよく使っており、簡易的なデータベースとしてもエクセルで済ませていましたが、データが蓄積すると処理に時間がかかるようになりましたので、アクセスを使った方がいいかなと考えます。  クエリーをとりあえず構成できるようになったのは2日前からです。モジュールは全く作ったことがありません。  よろしくご教示下さいますよう、お願い申し上げます。

  • エクセルのwebクエリについて

    A1に銘柄コード(4桁の数字)が入力されている場合、 B1以下にデータを取得するマクロを作りたいと考えています。 webクエリ機能を使えばデータを取得できるのはわかったのですが、 マクロのコードにA1の数値を参照させる方法がわかりません。 当方の環境は Windows XP Excel 2007 です。 どうか皆様よろしくお願い致します。

専門家に質問してみよう