標題:
[發問]
[請教]個股成交資訊以VBA擷取之問題...
[打印本頁]
作者:
cudui
時間:
2012-4-7 20:57
標題:
[請教]個股成交資訊以VBA擷取之問題...
各位大大請教一下:
我想從證交所的個股日成交資訊擷取資料,
希望是能夠由EXCEL表格內輸入"股票代碼"&"年"&"月",來更新data,
以下巨集是參考別人的寫法進行修改,
但是一直沒辦法將資料抓進來,
請問各位大大是巨集有哪裡寫錯了嗎?
還是可以有更好的寫法???
謝謝!!
Sub 個股日成交資訊()
'
Dim ptxt As String
Dim STK_NO, myear, mmon
myear = InputBox("輸入查詢民國年", "個股日成交資訊")
If myear = "" Then Exit Sub
mmon = InputBox("輸入查詢月", "個股日成交資訊")
If mmon = "" Then Exit Sub
STK_NO = InputBox("輸入個股代碼", "個股日成交資訊")
If STK_NO = "" Then Exit Sub
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/STOCK_DAYMAIN.php" _
, Destination:=Range("A1"))
.PostText = "ajax=true&myear=" & myear & "&mmon=" & mmon & "&STK_NO=" & STK_NO
.PreserveFormatting = False
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "8"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
複製代碼
作者:
chen_cook
時間:
2012-4-8 08:16
回復
1#
cudui
Sub 個股日成交資訊()
'
'
Dim ptxt As String
'Dim STK_NO, mmon As String
myear = InputBox("輸入查詢民國年", "個股日成交資訊")
If myear = "" Then
Exit Sub
Else
myear = myear + 1911
End If
mmon = InputBox("輸入查詢月,1-9月需補0如02月", "個股日成交資訊")
If mmon = "" Then Exit Sub
STK_NO = InputBox("輸入個股代碼", "個股日成交資訊")
If STK_NO = "" Then Exit Sub
mym = myear & mmon
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report" & mym & "/" & mym & "_F3_1_8_" & STK_NO & ".php?STK_NO=" & STK_NO & "&myear=" & myear & "&mmon=" & mmon _
, Destination:=Range("A1"))
'
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingAll
.WebTables = "8"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
試試看吧!!
作者:
cudui
時間:
2012-4-8 10:47
回復
2#
chen_cook
謝謝大大, 我有試過可行了!!
另外請問...
以下這二種寫法的意義有不同嗎?
為啥第一種就得不出data呢?是不是少寫什麼??
(第二種比較看得懂,因為寫IQY時也是以連到相同的URL去抓data)
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/STOCK_DAYMAIN.php" _
, Destination:=Range("A1"))
.PostText = "ajax=true&myear=" & myear & "&mmon=" & mmon & "&STK_NO=" & STK_NO
複製代碼
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report" & mym & "/" & mym & "_F3_1_8_" & STK_NO & ".php?STK_NO=" & STK_NO & "&myear=" & myear & "&mmon=" & mmon _
, Destination:=Range("A1"))
'
複製代碼
作者:
cudui
時間:
2012-4-8 14:38
各位大大再請教一下,
如果要設定成資料是縱向插入 (執行巨集後,插入新資料,而原資料向下移)
該怎麼設定呢???
TKS!
作者:
chen_cook
時間:
2012-4-8 15:19
回復
3#
cudui
你原始的HTTP:段不是產生資料後的網頁,當然抓不到啊!!!
作者:
chen_cook
時間:
2012-4-8 15:25
回復
4#
cudui
這資料是會變動的(如果不是個整月),所以應該當資料來源,在另一個sheet套入(或其它欄位套用資料)...
請上傳你的檔案吧!!版大會協助的!!!
作者:
cudui
時間:
2012-4-8 16:34
回復
6#
chen_cook
謝謝大大~
我還是小學生,所以只能看不能收也不能傳~~>_<
我的想法是來源資料每次執行巨集都在同一個sheet新增,&排序&刪除相同列,
再到別的sheet去進行運用,
這樣比較不會開太多sheet...
又或執行一次巨集,就能一次撈到個股近4~5個月的成交行情,
只是"跨年"的寫法對小學生來說就有點難了...(ex 101.3月/2月/1月 , 100年12月/11月)
作者:
cudui
時間:
2012-4-8 18:06
回復
7#
cudui
試了ActiveCell.Offset的指令,
這樣就可以解決資料向下延伸,
只剩如何寫出 連續抓幾個月(含自動判別"跨年")的問題了!!
lastdata = Range("A65536").End(xlUp).Select
mym = myear & mmon
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report" & mym & "/" & mym & "_F3_1_8_" & STK_NO & ".php?STK_NO=" & STK_NO & "&myear=" & myear & "&mmon=" & mmon _
,Destination:=ActiveCell.Offset(3, 0))
複製代碼
作者:
chen_cook
時間:
2012-4-9 05:20
回復
8#
cudui
For .. next 迴圈配合你的 Offest,,可以達成你要的結果??如何做先自己想吧!!!
不懂你的連續5個月的意思 .. 如果是本次抓取為起始的話 mmon + 1 推進,同是判斷是否大於12進位年 myear + 1..
應該在決定這個vba的用途時,就將想法設定好...版大只會依你的問題提出可行的作法,當然還有更好的寫法(我也只是懂一點,剛好你的問題我看的懂).....
目前你只抓上市,若是上櫃呢??它就不是那麼容易,要去爬文找答案.....
股票代號若錯誤是抓不到database??這部份你想到了嗎??
作者:
cudui
時間:
2012-4-9 22:02
回復
9#
chen_cook
謝謝cook提醒..
上市上櫃的行情,我都有找到iqy的寫法,
所以只剩下翻譯成vba的語法,有了可參考的寫法,後面的延伸就容易多了...
由於data來自證交所和櫃買,就不用擔心個股代號正確與否的問題~~
之所以data要能往前推5個月(以個股日成交行情為例),是為了要能夠算出平均線、乖離率等參數...
因為別人的寫法都要每天更新才行,一中斷就很麻煩,
所以才想要找方法補足...
小學生的程度差得太多,
只好每前進一點,就爬爬文、想想寫法...
現在都是找不到人問的,才會貼上來問問版大~~
作者:
GBKEE
時間:
2012-4-10 12:14
回復
10#
cudui
Yahoo Finance網站
http://finance.yahoo.com/
1 輸入代號 搜尋
2 按下 搜尋到的股票
3 按下 Historical Prices
作者:
cji3cj6xu6
時間:
2013-3-12 13:04
不曉得cudui 大後來有想到如何抓到跨年的資料嗎?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)