2016年8月12日 星期五

用excel批次取得台股歷史資料1

大家好,今天要來跟大家分享excel如何取得台灣股價加權指數的歷史資料。

除了作為試算表以及表格製作外,excel其實有很多功能。其中最為我所讚賞的是可以透過VBA操作excel。
除此之外,也可以透過錄製的方式取得這個動作的程式碼,只要稍微修飾過後,就可以透過批次執行,而達到自動化的效果。

如果要取得證交所的個股歷史資料,首先我們要去證交所歷史資料的網站,找到該功能後,把網址留存下來
以台積電為例,以下這個網址可以取得台積電在2016年7月的日成交價格與成交量資料
http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report201607/201607_F3_1_8_2330.php?STK_NO=2330&myear=2016&mmon=07
雖然目前證交所將網頁改版,如果自他的官方網站進入,網址的顯示內容與上述網址不同。但是經測試過後,原本的連結還是可以使用

我們可以透過excel內自網頁取讀資料的功能,把些資料導入到excel內

方法很簡單,以excel2010為例,首先先找到資料頁籤,並按下自web取得資料功能
之後會出現自網頁取得資料的工作視窗,再把以上的網址貼到網址列內,然後勾選成交資訊的表格
按下"匯入"後,系統會要你選擇要在哪一個儲存格寫入他取得的訊息,再按下確認之後
網頁內的成交資訊就會出現在excel內供你使用了。

但是這樣僅能取得一個月的資訊,對於取得資料並做分析幫助不大,這時我們可以透過錄製的功能,取得以上這個動作的程式碼。

流程如下

在excel的開發人員業籤內選擇錄製巨集
之後系統會詢問你要錄製在何處,直接按下確定後可以看到剛剛我們按下的錄製巨集按鈕變成了停止錄製。
現在,把剛剛我們取資料的動作,原封不動的重做一次。之後我們可以在excel巨集編輯處取得系統錄製的程式碼。

為了簡化,我直接把程式碼節錄在這裡

Public Sub GetData()
aazz = "URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report201607/201607_F3_1_8_2330.php?STK_NO=2330&myear=2016&mmon=07"


With ActiveSheet.QueryTables.Add(Connection:=aazz, Destination:=Range(Cells(1, 1), Cells(1, 1)))
.RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "8" .Refresh BackgroundQuery:=False End With End Sub

以上的程式可以順利取得台積電的2016年7月日成交資訊。