• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA webクエリをループさせる方法が知りたい)

VBAでwebクエリをループさせる方法

このQ&Aのポイント
  • Excel VBAを使用して複数のURLのwebページの内容を一括で取得する方法について教えてください。
  • Sheet1のB2セルから始まる複数のURLを指定し、コマンドボタンを押すことで、取得した内容をSheet2のA1セルから順に表示する方法についてお教えください。
  • VBA初心者ですので、わかりやすく解説していただけると助かります。

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

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

>Excel VBAを使用してwebクエリをループさせる方法が知りたいです。  「webクエリ」ですよね?  Excel の 標準メニュー [データ(D)] - [外部データの取り込み(D)] - [新しい Web クエリ(W)...] のお話しとして回答を書かせていただきます。 【作業の段取り】 1)先ず、データ を取り込む「Sheet2のA1セル」を アクティブ にします。 2)次に「Sheet1のB2セル~B3、B4、B5・・・」の URL を1つずつ読み込んで、WEb クエリ を実行します。 3)1つの URL の データ を読み込んだ後には、その クエリ デーブル の最終行の次行を アクティブ にします。 【VBA の コード を書く場所について】  「コマンドボタン」を右クリック し、[コードの表示(V)] を クリック すると、 Private Sub CommandButton*_Click() End Sub というような コード が現われます(「*」の部分は数字)ので、その2行の「間」に   Sheets("Sheet2").Select   Application.Run "Sheet2.webクエリをループ" を コピペ してください。  次に、Sheet2 の シート タブ を 右クリック し、[コードの表示(V)] を クリック すると現われる コード ウィンドウ に下記を コピペ してください。 Sub webクエリをループ()   Dim myQT As QueryTable   Dim i As Long   Dim myURL As String   Cells.Delete   For Each myQT In QueryTables: myQT.Delete: Next   Range("A1").Select   For i = 2 To Sheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row     myURL = Sheets("Sheet1").Cells(i, "B").Value     With QueryTables _         .Add(Connection:="URL;" & myURL, Destination:=Selection)       .BackgroundQuery = False       .AdjustColumnWidth = False       .WebSelectionType = xlEntirePage       .WebFormatting = xlWebFormattingNone       .Refresh BackgroundQuery:=False     End With     Cells(ActiveCell.Row + QueryTables(1).ResultRange.Rows.Count, 1).Select   Next End Sub 【コーディング について】  先ず、 .BackgroundQuery = False 以下の、QueryTables の プロパティ につきましては、実情に応じて変更なさってください。  QueryTables の操作は、当該シート を離れると、記述が厄介になりますので、Sheet2 に 実行マクロ を書いて、その マクロ を CommandButton*_Click() で呼び出すようにしました。 【クエリ デーブル の最終行の取得】  ポイント としては、1つの URL の データ を読み込んだ後の最終行の取得ですが、最後に実行された Web クエリ について QueryTables の インデックス が「1」になるようですので、 QueryTables(1).ResultRange.Rows.Count が 当該 クエリ テーブル の行数になります。  従いまして、現在の カーソル 位置(データ の反映位置「Destination」)の行番号に、それを足すと、「クエリ デーブル の最終行の次行」を取得できます。 Cells(ActiveCell.Row + QueryTables(1).ResultRange.Rows.Count, 1).Select 【これは、余談かも知れませんが。。】  Sheet2 の データ を全部削除しても、QueryTables がそのまま残って、ファイル の容量を大きくしたり、他にも問題が残りそうな気がします。  これを回避するためには、   For Each myQT In QueryTables: myQT.Delete: Next を付加しました。

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

参考で。 やり方は違いますが、似たようなことはしています。 1) 画面のハードコピーを(ショートカット押すだけで)取得するフリーソフトを使う。 2) webを参照し、 とあるフォルダに「xxxx01.jpg」「xxxx02.jpg」「xxxx03.jpg」・・・と ハードコピーのファイルがファイル名が規則的にできあがる。 3) エクセルのマクロでこのフォルダの「*.jpg」ファイルを取得して シート1に順番に列挙する。 画像ファイルを作るまでは自分で操作してがんばって、 画像ファイルを一括でエクセルへ、というのはVBAに任せたことあります。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

確認。 シート1のB2を押すとそのリンクが表示される 画面のハードコピーを取得 取得した画面をシート2のA1へ貼り付け シート1のB3を押すとそのリンクが表示される 画面のハードコピーを取得 取得した画面をシート2のA51へ貼り付け シート1のB4を押すとそのリンクが表示される 画面のハードコピーを取得 取得した画面をシート2のA101へ貼り付け (貼り付け画像の高さが50行分、とみた場合) こんなことがしたいということでしょうか。

colorbox0831
質問者

補足

ありがとうございます。 そういう感じと言えばそういう感じです。 ただ、上記すべてのことをコマンドボタンワンプッシュでできないでしょうか?

関連するQ&A

専門家に質問してみよう