Re: [心得] 用Excel抓Yahoo Finance歷史股價
網誌好讀版:
http://kslman.blogspot.tw/2017/11/excalvbacsv.html
------以下是內文------
google試算表跑資料很慢,而且抓不到上櫃和興櫃資料。
而且如果要跟我原本電腦裡的資料連結還要下載下來。
因為有用Excel做紀錄的習慣,所以還是直接匯在Excel的檔案裏面比較方便。
研究了幾天,把之前yahoo那個VBA,改成抓證交所、櫃買中心、政府資料開放平臺的方案
,供大家參考:
https://drive.google.com/open?id=1Ekn1MIGolNi3bqoH-xfv16mD9Z_D0OoF
(政府開放平台的興櫃資料我是查到這個:https://data.gov.tw/dataset/11398
因為我不知道怎麼解析櫃買中心的興櫃csv下載連結,有人知道的話可以跟我說下)
使用方式:
1. 「關注」的分頁C列填入股票代碼。
2. 點擊「TW」、「TWO」、「TWN」各分頁左上「refresh」按鈕就可以刷新。
目前問題:
1. 興櫃股票我抓的政府資料開放平臺的資料沒有前一天價格,所以沒有辦法算漲跌、漲
跌幅和昨收。(如果有人知道哪邊抓的資料有漲跌或前一天價格可以跟我說一下)
2. P/E只有上市有。
3. 目前我只會每個分頁各自加一個按鈕,但我不知道怎麼樣做可以一個按鈕直接刷新三
個分頁,如果有人知道怎麼做可以教我一下,我可以調整一下。
4. 美股不知道哪邊有資料,有人知道那邊有美股類似證交所這樣一個表有全部股價資料
的網站嗎?
5. 我不知道要怎麼判斷最近交易日,所以如果還沒收盤或假日用會沒資料。
(暫時先找了一個土炮的方法,目前的連結已經先更新)
巨集內容如下。
抓上市股票:
Private Sub CommandButton1_Click()
'宣告變數
Dim QuerySheet As Worksheet
Dim DataSheet As Worksheet
Dim qurl As String
'告訴Excel不要每更新一格就重新計算
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'將現在的工作表設為資料表
Set DataSheet = ActiveSheet
qurl =
"http://www.tse.com.tw/exchangeReport/MI_INDEX?response=csv&date=" +
Range("A9") + Range("A10") + Range("A11") + "&type=ALLBUT0999"
Range("B:Z").Clear
'抓取資料
QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl,
Destination:=DataSheet.Range("B1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
.RefreshStyle = xlInsertEntireRows
.Delete
End With
'讓Excel重新活回來,讓資料能夠顯示
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
'切數據
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True,
_
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5,
1), Array(6, 1)), _
TrailingMinusNumbers:=True
End Sub
抓上櫃股票:
Private Sub CommandButton1_Click()
'宣告變數
Dim QuerySheet As Worksheet
Dim DataSheet As Worksheet
Dim qurl As String
'告訴Excel不要每更新一格就重新計算
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'將現在的工作表設為資料表
Set DataSheet = ActiveSheet
qurl =
"http://www.tpex.org.tw/web/stock/aftertrading/otc_quotes_no1430/stk_wn1430_print.php?l=zh-tw&d="
+ Range("A9") + "/" + Range("A10") + "/" + Range("A11") +
"&se=EW&s=0,asc,0"
Range("B:Z").Clear
'抓取資料
QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl,
Destination:=DataSheet.Range("B1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
.RefreshStyle = xlInsertEntireRows
.Delete
End With
'讓Excel重新活回來,讓資料能夠顯示
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
抓興櫃股票:
Private Sub CommandButton1_Click()
'宣告變數
Dim QuerySheet As Worksheet
Dim DataSheet As Worksheet
Dim qurl As String
'告訴Excel不要每更新一格就重新計算
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
'將現在的工作表設為資料表
Set DataSheet = ActiveSheet
qurl = "http://www.gretai.org.tw/storage/emgstk/ch/new.csv"
Range("B:Z").Clear
'抓取資料
QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl,
Destination:=DataSheet.Range("B1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
.RefreshStyle = xlInsertEntireRows
.Delete
End With
'讓Excel重新活回來,讓資料能夠顯示
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
'切數據
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True,
_
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5,
1), Array(6, 1)), _
TrailingMinusNumbers:=True
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.68.55
※ 文章網址: https://www.ptt.cc/bbs/Stock/M.1510153365.A.88E.html
推
11/08 23:07,
7年前
, 1F
11/08 23:07, 1F
→
11/08 23:49,
7年前
, 2F
11/08 23:49, 2F
推
11/08 23:53,
7年前
, 3F
11/08 23:53, 3F
推
11/08 23:53,
7年前
, 4F
11/08 23:53, 4F
推
11/09 01:02,
7年前
, 5F
11/09 01:02, 5F
推
11/09 01:22,
7年前
, 6F
11/09 01:22, 6F
推
11/09 03:49,
7年前
, 7F
11/09 03:49, 7F
推
11/09 04:04,
7年前
, 8F
11/09 04:04, 8F
推
11/09 05:56,
7年前
, 9F
11/09 05:56, 9F
推
11/09 06:29,
7年前
, 10F
11/09 06:29, 10F
推
11/09 07:21,
7年前
, 11F
11/09 07:21, 11F
推
11/09 07:43,
7年前
, 12F
11/09 07:43, 12F
推
11/09 08:33,
7年前
, 13F
11/09 08:33, 13F
推
11/09 08:37,
7年前
, 14F
11/09 08:37, 14F
→
11/09 08:37,
7年前
, 15F
11/09 08:37, 15F
推
11/09 08:40,
7年前
, 16F
11/09 08:40, 16F
推
11/09 08:45,
7年前
, 17F
11/09 08:45, 17F
推
11/09 09:15,
7年前
, 18F
11/09 09:15, 18F
我凌晨想到一個方法,改了一個版本可以判別交易日,待會我有空更新一下
※ 編輯: kslman (118.163.68.55), 11/09/2017 09:38:33
喔不,興櫃最新行情表的資料開盤時是實時更新的,所以不能用他的時間來判斷...
你如果要先正常手動抓資料的話,可以先把TW和TWO的A8改成你想抓的日期。
我再想一下有沒有別的方法可以判斷交易日。
※ 編輯: kslman (118.163.68.55), 11/09/2017 09:48:13
暫時先找了一個土炮的方法
※ 編輯: kslman (118.163.68.55), 11/09/2017 15:54:18
→
11/09 17:52,
7年前
, 19F
11/09 17:52, 19F
推
11/09 20:41,
7年前
, 20F
11/09 20:41, 20F
推
11/09 22:03,
7年前
, 21F
11/09 22:03, 21F
討論串 (同標題文章)
完整討論串 (本文為第 7 之 7 篇):
Stock 近期熱門文章
11
31
PTT職涯區 即時熱門文章