
Excel VBAを使用してwebクエリでSheet1のB2セル~B3、B4、B5・・・と複数のURLからデータをループで取得し、Sheet2のA1セル~A2、A3、A4にて表示しています。
取得データの内容が3行だと仮定(あくまで仮定です)すると、通常であれば以下※1のように表示されると思います。
※1
━━【A】━━━━
【1】B2セルURLの取得内容
【2】B2セルURLの取得内容
【3】B2セルURLの取得内容
【4】B3セルURLの取得内容
【5】B3セルURLの取得内容
【6】B3セルURLの取得内容
【7】B4セルURLの取得内容
【8】B4セルURLの取得内容
【9】B4セルURLの取得内容
・ ・
・ ・
・ ・
━━━━━
これを以下※2のように、取得したデータを横に表示することはできないでしょうか?
※2
━━【A】━━━━━━━━【B】━━━━━━━━【C】━━━━
【1】B2セルURLの取得内容 B2セルURLの取得内容 B2セルURLの取得内容
【2】B3セルURLの取得内容 B3セルURLの取得内容 B3セルURLの取得内容
【3】B4セルURLの取得内容 B4セルURLの取得内容 B4セルURLの取得内容
【4】B5セルURLの取得内容 B5セルURLの取得内容 B5セルURLの取得内容
【5】B6セルURLの取得内容 B6セルURLの取得内容 B6セルURLの取得内容
・ ・ ・ ・
・ ・ ・ ・
・ ・ ・ ・
━━━━━
参考までに以下VBAを使用して、webクエリをループでデータ取得しています。
━━━━━
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
.WebTables = "2"
.Refresh BackgroundQuery:=False
End With
Cells(ActiveCell.Row + QueryTables(1).ResultRange.Rows.Count, 1).Select
Next
End Sub
━━━━━
当方VBA初心者ですので、できるだけわかりやすくご教授頂けると助かります。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
NO2のjcctairaです。
> ただ、取得データの1行目しか表示されません。
とのことですが、エラーになるので下記のように修正してテストしています。
URLの内容により違うのかも知れませんが、私のテストではうまくいっているようですが?
Sub webクエリ()
Dim myQT As QueryTable
Dim i As Long
Dim myURL As String
Cells.Delete
For Each myQT In ActiveSheet.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 ActiveSheet.QueryTables _
.Add(Connection:="URL;" & myURL, Destination:=Selection)
.BackgroundQuery = False
.AdjustColumnWidth = False
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
'' .WebTables = "2" ' エラーになるのでコメントアウト
.Refresh
End With
Cells(ActiveCell.Row, "B") = Cells(ActiveCell.Row + 1, "A")
Cells(ActiveCell.Row, "C") = Cells(ActiveCell.Row + 2, "A")
Cells(ActiveCell.Row + 1, "A").Select
Range(ActiveCell.Row & ":" & Rows.Count).Delete
Next
End Sub
No.2
- 回答日時:
End With以降を修正してください。
【説明】
・取得した3行(縦)を横にコピーします。
・次のデータを取得するために1行ActiveCellを下に
・ActiveCell以降をクリアー
:
End With
Cells(ActiveCell.Row, "B") = Cells(ActiveCell.Row + 1, "A")
Cells(ActiveCell.Row, "C") = Cells(ActiveCell.Row + 2, "A")
Cells(ActiveCell.Row + 1, "A").Select
Range(ActiveCell.Row & ":" & Rows.Count).Delete
Next
No.1
- 回答日時:
すみません。
調べてみましたがwebクエリでテーブルから取得したデータの操作方法が分かりませんでした。
ただ
Cells(ActiveCell.Row + QueryTables(1).ResultRange.Rows.Count, 1).Select
を
Cells(ActiveCell.Row , 1+ QueryTables(1).ResultRange.Columns.Count).Select
とすれば3行分のデータを縦に書き込んだら
右にデータの項目数分スライドして次のデータを書き込むはずですので、
全てのデータが書き込まれたら縦と横を入れ替えれば似たようなことはできるのではないかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel UserForm の表示位置
-
【ExcelVBA】値を変更しながら...
-
昨日、質問した件『VBA にて、...
-
VBAマクロ実行時エラーの修正に...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA にて、条件付き書式で背景...
-
オーバーフローを回避する方法?
-
Rangeの範囲指定限界
-
Excel 範囲指定スクショについ...
-
エクセル VBA ボタンをクリック...
-
【Excel VBA】マクロで書き込ん...
-
ユーザフォームを使ってのデー...
-
【マクロ】実行時エラー '424':...
-
列方向、行方向の定義
-
「段」と「行」の違いがよくわ...
-
excel 小さすぎて見えないセル...
-
VBA シートをコピーする際に Co...
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
Excelのシート上のShapeにイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel UserForm の表示位置
-
VBAマクロ実行時エラーの修正に...
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
【VBA】写真の貼り付けコードが...
-
データグリッドビューの結合セ...
-
複数指定セルの可視セルのみを...
-
エクセル、マクロで番号を読込...
-
CellEnterイベント仕様について
-
C# DataGridViewで複数選択した...
-
【ExcelVBA】値を変更しながら...
-
EXCEL VBA 文中の書式ごと複写...
-
マクロ初心者です。 マクロで範...
-
【Excel VBA】一番右端セルまで...
-
【Excel VBA】マクロで書き込ん...
-
VBA:日付を配列に入れ別セルに...
-
DataGridViewでグリッド内に線...
-
DataGridViewのフォーカス遷移...
おすすめ情報