問題:
用EXCEL抓取外部資料
http://fortune.wls.com.tw/stock/company/trust.cfm
在此網址中有可輸入代碼,希望輸入代碼後可以出現:法人持股、六日行情、信用交易三部份......
解答:
按 Alt+F11 進入 VBE, 插入一個模組, 把底下程式碼全部貼到插入的模組裡。
再按一次 Alt+F11 回到 Excel, 按 Alt+F8 選 GetStoeckInfo 執行它, 就可在工作表裡看到成果。
若要查更多個股, 只需增加 GetStockInfo 裡面的句子即可, 說明如下:
查詢目標: "2330" 指定股號
匯入到那裡: "sheet1" 指定工作表, "A1"指定儲存格
Sub GetStockInfo()
Call 法人持股("2330", "sheet1", "A1")
Call 法人持股("2340", "sheet1", "A35")
Call 六日行情("2330", "sheet2", "A1")
Call 六日行情("2340", "sheet2", "A10")
Call 信用交易("2330", "sheet3", "A1")
Call 信用交易("2340", "sheet3", "A25")
End Sub
Sub 法人持股(stock As String, tsheet As String, tcell As String)
Call GetWls("corporation.cfm", "6,7,8,9", stock, tsheet, tcell)
End Sub
Sub 六日行情(stock As String, tsheet As String, tcell As String)
Call GetWls("quote6day.cfm", "6", stock, tsheet, tcell)
End Sub
Sub 信用交易(stock As String, tsheet As String, tcell As String)
Call GetWls("trust.cfm", "7", stock, tsheet, tcell)
End Sub
Sub GetWls(cfm As String, tbl As String, stock As String, tsheet As String, tcell As String)
With Worksheets(tsheet).QueryTables.Add(Connection:= _
"URL;http://fortune.wls.com.tw/stock/company/" & cfm & "?scode=" & stock, _
Destination:=Worksheets(tsheet).Range(tcell))
.Name = cfm & "_" & stock
.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 = tbl
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
程式重點:
- 法人持股是 corporation.cfm, 六日行情是 quote6day.cfm, 信用交易是 trust.cfm, 這些是從">那個 fortune.wls.com.tw 的網頁上看來的。
- scode 這個參數可從實際操作或從網頁原始碼看出來 。
- .WebSelectionType = xlSpecifiedTables 表示不抓整頁, 只抓頁面上某些表格。
- .WebTables = "7" 表示要抓的是頁面上第7個表格。
- .Name 的內容文字可以自由決定。
- 參考: >抓取台北期交所 (Taifex) 網站提供的資訊(上) ; >抓取台北期交所 (Taifex) 網站提供的資訊(下)
- 13樓. stanley_su2016/11/09 04:47您好,看了您的文章 想請問 如果像用JAVA寫的 他的資料是動態的
如http://www.taoyuan-airport.com/chinese/flight_arrival/
這個網站的航班資料要怎麼處理呢
我想要的資料是 當天/全部/第一航廈
我想要下面的所有資料
這總情況要怎麼處理 (w777777752@yahoo.com.tw) - 12樓.2012/08/31 13:30想要以巨集利用web擷取機場航班資料
抱歉,我今天才看到您的留言。剛才概略地試了一下,不知道是不是你想要的:
Sub GetFlights()
ThisIsTheWay 於 2012/11/05 09:30回覆
Dim i, NextRow As Integer
Dim RngStr As String
NextRow = 1
For i = 1 To 36
RngStr = "A" + Format(NextRow)
With Worksheets("sheet1").QueryTables.Add(Connection:= _
"URL;http://210.241.14.104/chinese/schedule_c.jsp?pageindex=" + Format(i) + "&airline=null&area=null&apio=A&airtype=P&st=00:00&et=23:59&apcode=&bcode=null&dayindex=2&cnid=25", _
Destination:=Worksheets("Sheet1").Range(RngStr))
.Name = "Flights"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "4" '要抓的是網頁上的第四個表格
.WebPreFormattedTextToColumns = False
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
NextRow = NextRow + 11
Next i
End Sub - 11樓. Tony2011/04/05 01:04請問 ~
請問 高手 ~我想 抓取 Yam 個股 成交明細 到 Excel 該如何做?因為他有 多個 Tableshttp://yamstock.megatime.com.tw/asp/stockinfo/ps_pv_time.asp?stockid=1101&name1=D1&index1=2因為我想把個股成交明細資料一一 抓回計算 !! 謝謝 !!Tonytony6175@yahoo.com.tw - 10樓. qaz2010/11/01 08:01版大您好
版大您好
我照著文中所說的複製整段程式碼上去
再選取執行時會出現
執行階段錯誤'9':
陣列索引超出範圍
再按偵錯時,從with worksheets一直到(tcell))這三行會變黃底標示出來
請問一下版大,這狀況有解決的辦法嗎?
第一天開始學VBA,還不是很懂,不好意思,謝謝版大 - 9樓. Chargi2010/08/04 18:04請問一下大大, 外部檔案問題.
大大您好!
我之前有用Excel讀過遊戲的檔案,例如一些.dat檔案是像一些遊戲資料庫的東西,因為我不知道怎麼使用Excel讀取二進位,所以直接當成文字檔讀進來後再轉成16進位卻發現資料會少,所以想請教一下大大,您知道如何讀取二進位嗎?
- 8樓.2010/01/22 21:14
- 7樓. 林2009/12/27 10:08你好
你好在google 收尋 excel 的資料 就看到你的部落格,覺得你很厲害。想請教你一下
我想在台銀的網頁上 http://rate.bot.com.tw/Pages/Static/UIP005.zh-TW.htm 匯入外部資料
可是匯入的都一整個的網頁 可否只匯入黃金的賣價 在 excel 的a1 然後明天再抓的時候
匯入a2 這樣...的程式要怎麼寫呢 ???感謝
- 6樓.2009/06/22 21:33To 大大
謝謝大大~
如果有興趣的話...我想您可以嘗試在設定一次有關於信任的網站那邊
工具-->網際網路選項--->安全性--->信任的網站
1. 點"網站" 然後將此區域內的所有的網站需要伺服器驗證的打勾取消,之後新增此網頁
2.點"自訂層級"裡面的Active X 都用啟動或提示
3.點"預設等級"改為中或中低
4.點"套用"
我想這四個步驟都有用到應該是可以進入的(我也花了一陣子才進入的)
我再慢慢研究大大的發文吧~ 謝謝!
Thanks a lot! ThisIsTheWay 於 2009/07/04 13:43回覆 - 5樓.2009/06/11 22:37大大可否推薦有關與EXCEL VBA的相關書籍
大大是否也能夠推薦我如何利用EXCEL的編輯查詢來連結資料庫或外部資料, 以及用EXCEL VBA 抓取外部資料或資料庫的書籍呢? 我看到市面上的書籍似乎都寫得很精簡(我看不太懂).....希望大大能夠分享, thanks!我沒有看任何相關的書籍,我都是在網路上搜尋,有些值得參考的網站,您可以看我blog首頁推薦連結,其他就是我自己累積下來的知識和經驗 (在腦袋裡)。 ThisIsTheWay 於 2009/06/22 13:36回覆 - 4樓.2009/06/11 22:18請問您保險事業發展中心資料是否也可也用VBA抓取?
看了幾篇您發表的文章,感覺您滿厲害的,
所以想請問您如下的保險事業發展中心資料是否也可也用VBA抓取?
1.進入http://www.tii.org.tw/fcontent/database/sta_test2/statistics%2005_03_b.asp
2. 點選 (一)壽險統計樞紐分析查詢
3.點選 個人投資型保險商品保費收入
------------------------------------------------------------
我的目的是進入個人投資型保險商品保費收入 後把公司別的欄位拖曳到樞紐分析表上方,使得樞紐分析表為一公司別來分類. 感覺這種網路資料很不一樣,所以真的不知道怎麼用VBA來抓取資料. 可以請您幫忙看看嗎?
PS: 要進入個人投資型保險商品保費收入時必須先安裝好Office Web Component (網頁可下載), IE>工具>網際網路選項>安全性>信任的網站]將http://pivot.tii.org.tw新增至信任的網站,並設定相關ActiveX為提示或啟用即可.
真對不起,我疏忽了,今天才看到你的留言。
不曉得是何原因,我始終無法使保發中心這個網頁在我的 IE 裡正常顯示
Web Component 的內容。
但我知道它是要以多維度分析(樞紐分析表)的方式來呈現,它得到的資料是一個包裝好的 data cube, 我不知道在 Excel 要如何抓這樣子的資料。
ThisIsTheWay 於 2009/06/22 13:30回覆