2017-10-25 93 views
0

私はVBAの初心者で、エクスペリエンス(SGからバンコク)のフライト価格をいくつかの実践のために抽出しようとしていました。残念ながら、私のコードはあまりうまく動かない。それはただ一つの価格を返しただけです(私はそれがどこから来たのか分かりません)。もし誰かが私を助けてくれたら本当に感謝します。ありがとうございました!VBAを使用してウェブサイトからデータをスクラップする方法は?

Sub ExtractRaw() 
Dim wb As Workbook 
Dim ws As Worksheet 
Set wb = ThisWorkbook 
Set ws = wb.Sheets("Sheet1") 

Dim ie As Object 
Set ie = CreateObject("InternetExplorer.Application") 
With ie 
.Visible = True .navigate "https://www.expedia.com.sg/Flights-Search?rfrr=TG.LP.SrchWzd.Flight&langid=2057&trip=OneWay&leg1=from:Singapore,%20Singapore%20(SIN-Changi),to:Bangkok,%20Thailand%20(BKK-Suvarnabhumi%20Intl.),departure:" & DateAdd("d", 1, Date) & "TANYT&passengers=children:0,adults:1,seniors:0,infantinlap:Y&options=cabinclass:economy,sortby:price,carrier:&mode=search&paandi=true" 

Do While ie.Busy 
DoEvents 
Loop 

Dim doc As HTMLDocument 
Set doc = ie.document 
While ie.readyState <> 4 
Wend 
On Error Resume Next 

Dim i As Integer For i = 0 To 200 
Range("A1").Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 

Next i 
ie.Quit 
Application.EnableEvents = True 
End With 
End Sub 
+0

この記事の回答を参照してください。https://stackoverflow.com/questions/44955755/extracting-the-inner-text-from-span-using-vba/44956013#44956013 –

答えて

1

あなたの問題は、私が思うここにある:

Dim i As Integer 
    For i = 0 To 200 
    Range("A1").Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 
Next i 

あなたは、任意の200回ループした後、繰り返し価格でセルA1を更新しています。これは

あなたにそれがそのelment上のダウン検出したすべての内部テキストのリストを与えるでしょう
Range("A1").Offset(i,0).Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 

を試してみてくださいあなたは常にA1

にマッチした最後の要素の内部テキストが残されます意味しますループが終了するまでの列。

本当に、毎回200回ループする良い理由がない限り、ループに入る前にループする必要がある反復回数を判断する必要があると思います。

+0

ahはい、複数の値を返します。ありがとうございました。しかし、返される値は行をスキップしているようです...セルA1-7から空白になり、中央のどこかでも同様になります –

関連する問題