##title##

2017年11月7日

Excal:VBA,插入股票公開資料

google試算表跑資料很慢,而且抓不到上櫃和興櫃資料。

而且如果要跟我原本電腦裡的資料連結還要下載下來。

因為有用Excel做紀錄的習慣,所以還是直接匯在Excel的檔案裏面比較方便。


研究了幾天,把之前yahoo那個VBA,改成抓證交所、櫃買中心、政府資料開放平臺的方案,供大家參考:
https://drive.google.com/open?id=1Ekn1MIGolNi3bqoH-xfv16mD9Z_D0OoF


這是舊的,請改看新版:Excal:VBA,插入股票公開資料v1.3

(政府開放平台的興櫃資料我是查到這個: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




2017年11月2日

Excel:樞紐分析表,資料分組

用樞紐分析表快速把資料分組的方式。

例如把1~5000,5001~10000,10001~15000....每個區間的人數,快速統計出來。

方式如下:
 





2017年8月30日

Excel:VBA,將函數回傳值改為變數

Sub addlog()
'
' addlog 巨集
' 自動貼即時
'
' 快速鍵: Ctrl+Shift+A
'
    Rows("3:3").Select
    Selection.Copy
    Dim x As Long
    x = Evaluate("=counta(A:A)")
'用Evaluate回傳=counta(A:A)的結果,並將值定義為變數x,在此處為3
    y = x + 2
    Rows(y & ":" & y).Select
'選擇第5行(3+2=5)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
研究半天,人生第一個自己寫成功的VBA。

2017年8月14日

Excel:巢狀函數將字串強制回傳為數值

搜尋值的資料型態必須與表格資料型態相同才能正確比對。

像是LEFT、MID等函數得到的是字串型態,所以加上--強制轉成數值,才能與表格中的資料型態一致。


例如原本這樣的函數公式會回傳錯誤值「#N/A」:

=VLOOKUP(MID(A1,SEARCH("(",A1)+1,4),C:D,2,0)



但如果加上「--」就可以正確回傳:

=VLOOKUP(--MID(A1,SEARCH("(",A1)+1,4),C:D,2,0)

2017年3月22日

Exce:不等於<>,以整頁及格式化設定

=(A1<>"")



則代表:如果A1不等於空字串,則為TURE


=OR(($I2<6)*($I2<>""),($I2="X"))




則代表:如果I2小於6且不等於空字串,或I2為X,則為TURE

另外在格式化條件裡面這樣設定,就可以不用一條一條設定了:






2016年11月17日

Excel:INDIRECT,固定公式

之前在一個共用的excel裡,(實際是用google試算表)常發現就算是某些被鎖定的區域,公式的位置有時候還是會跑掉,原本以為是甚麼bug,困擾了很久。

前一陣子才想到可能是excel本身的功能,就是如果移動目標儲存格,原本有用到該儲存格的公式中對應的儲存格位置也會修改。本來這是一個很方便的功能,但在這種協同編輯的表格裡面就變成一種惡夢。

所以找到這個方法後以後公式應該不會再出錯了吧。


然後這個公式可以不用參照,例如:
=INDIRECT("A1")

這樣就是直接指向A1,而非A1的參照。


語法

INDIRECT(ref_text, [a1])

INDIRECT 函數語法具有下列引數:

    Ref_text    必要。單一儲存格的參照,其中包含 A1 樣式參照、R1C1 樣式參照、定義為參照的名稱,或定義為文字字串的儲存格參照。如果 ref_text 不是有效的儲存格參照,INDIRECT 會傳回 #REF! 錯誤值。

        如果 ref_text 參照另一個活頁簿 (外部參照),則必須開啟另一個活頁簿。如果來源活頁簿未開啟,INDIRECT 會傳回 #REF! 錯誤值。

        附註    Excel Web App 不支援外部參照。

        如果 ref_text 參照的儲存格範圍超出 1,048,576 的列限制或 16,384 (XFD) 的欄限制,INDIRECT 會傳回 #REF! 錯誤。

        附註    在 Microsoft Office Excel 2007 之前的舊版 Excel 中,此行為是不同的,會忽略超出的限制並傳回值。

    A1    選用。指定 ref_text 儲存格中所包含參照類型的邏輯值。

        如果 a1 為 TRUE 或省略,則 ref_text 會被解釋成 A1 樣式參照。

        如果 a1 為 FALSE,則 ref_text 會被解譯成 R1C1 樣式參照。



https://support.office.com/zh-tw/article/INDIRECT-%E5%87%BD%E6%95%B8-474b3a3a-8a26-4f44-b491-92b6306fa261

2016年8月21日

外公的西瓜

外公是個純樸的農夫,曾聽他說,牛會流淚,是有感情的動物。而他回應的感情,是一輩子不吃牛肉,因為那是他的伙伴。外公不會要求子孫跟他一樣,他不論對子孫或伙伴都很好。

每次看見外公,他總是很慈祥的微笑。過年的時候總不願意收我們這些孫子的紅包,即使這絲毫不會造成我們的負擔,他依舊要用他的方式來照顧我們每一個人。

以往夏天,能吃到他種的西瓜是最幸福的消暑方式。拿鐵湯匙,挖進切一半的紅色冰涼西瓜。總是很甜,那是外公汗水換來的甜。

這個夏天後,再也嘗不到這樣的西瓜了。

謝謝您教我善良,謝謝您教我樸實,路上好走。


--
2016/8/20 22:25,外公沒有病痛了。

2016年5月5日

Alienware Area 51-R2

之前為了工作順便圓阿宅夢,買過一台 Alienware M14x R2 Laptop 整新機。

用了以後覺得 Alienware 實在相當中二,非常適合想回去當屁孩的大叔我,於是開始走向中二之路。

後來陸續又買中二滑鼠 Tt eSPORTS Level 10 M一個放公司一個放家裡。

然後當我看到 Alienware Area 51-R2 的中二機殼後,整個覺得實在是太狂。

一直很想找一個能這麼中二造型的機殼,但都找不太到,原本想說先買個中二RGB機械鍵盤壓壓驚。

結果清明節連假被同樣喜歡 Alienware 的前同事通知,Dell Outlet Alienware 竟然有七折優惠碼活動!

心理內心OS:實~在~太~狂~啊~啊~啊~!㊣乂↖煞氣a七折↘乂㊣

然後又看到一台規格感覺還蠻便宜的...於是乎,經歷了將近一個月的等待...(海關卡好久)

今天出門就不小心踢到這個箱子...

簡單開箱:

外觀&內部:



其實對我來說中二機殼才是主體,其他都是附加的。附加的東西如下:
CPU:Intel i7-5820K(附水冷散熱器)Haswell E 6C12T 3.3~3.60 GHz(22 nm,PCI Express 3.0,線道數量上限 28,最大記憶體通道數量4,最大記憶體大小64 GB)
MB:X99晶片組(OEM)
Video Card:Dual NVIDIA GeForce GTX 980 SLI(980大概只能吃PCIe3.0 x 8
RAM:16GB Quad Channel DDR4 at 2133MHz(4 x 4G走四通道)
SSD:128GB 2.5 inch
HD:2TB SATA Hard Drive 7200 RPM
PSU:Alienware 850W(OEM)
OS:Windows 8.1 (Free Upgrade to Windows 10 Home) 64BIT(英語)

Others:
機殼底座
8X DVD +/- RW Drive(吸入式)
Intel 7260AC Dual-Band 2x2 802.11 ac WiFi + Bluetooth 4.0
Alienware 鍵盤(英語)
滑鼠
Xbox 360 控制器
Office 2013 序號
CyberLink Media Suite
Office 365 - 1 Month 序號
Wave Systems Software
AL Area 51 R2 : 1 Year Premium Support
(Dell Outlet電腦規格和配件都不盡相同,有興趣想買的記得要看仔細)

不過Xbox 360 控制器和Office 2013 序號沒找到,正在詢問客服中。


Area 51-R2的可擴充性較低,不過反正就像我說的,機殼才是主體,I dont care。

原價美金$2,749,70%折扣後$1,924.3,運費與手續費$109,總計$2,033.3。(NTD $66,745)
代寄是使用 spearnet。服務費美金$30,運費$310,俄勒岡州轉運費$71,合計$411。(NTD $13,316)
通關及稅金 NTD $5,405
故所有費用合計是 66,745+13,316+5,405 = NTD $85,466
相關購買時間歷程如下:
Alienware Area 51-R2 i7-5820K、980 SLI、16GB、128GB SSD、2TB HD(原價美金 $2,749,70%折扣後$1,924.3,運費與手續費$109,總計$2,033.3)
高度:569.25 公釐 (22.411 吋)、深度:638.96 公釐 (25.156 吋)、寬度:272.71 公釐 (10.736 吋),長寬高合計148cm
Dell表示起始重量:28 kg(61.73 磅)
但spearnet秤重:31.8 kg(70.6 磅)(oversize 195cm, overweight)
4/2 購買,扣款失敗
4/4 扣款成功,NT $65,759,國外交易服務費NT $ 986
4/5 發貨(fedex)(應該是美東時間)
4/6 到spearnet俄勒岡州倉庫,spearnet顯示等待轉往加州倉庫(應該是美西時間)
4/8 顯示包裹運回加州倉庫中(應該是美西時間)
4/13 顯示包裹抵達加州倉庫,請求送為台灣
4/14 收到通知付費(服務費+運費+俄勒岡州轉運費)
4/15 通知已寄出( 黑貓宅急便)
4/18 通知到台灣但需要被查關,提供委任書,通關服務費NT $500元
4/19 通知委任書修改,且因為是電腦,且內建wifi或藍芽,故需要補NCC-自用切結書
4/20 通知回報檢驗代辦費NT 1,575元
4/22 通知NCC比對沒通過,去電處理的人員不在
4/25 再次去電處理的人員後,回覆說需要提供網頁檔。提供後代辦人員說他們也是提供這個,但沒過,叫我要請dell提供工作頻率2.4Ghz及輸出功率20.0dBm出示證明
4/26 寄從網路上抓的Intel Dual Band Wireless-AC 7260資料試看看
4/28 代辦跟我說又不能改品項名稱,不然又要付100塊修改費用。我跟他說雖然那台電腦型號是Alienware Area 51-R2,但網卡是Intel Dual Band Wireless-AC 7260,因為他說我講得太複雜了,還要補上一份說明函
4/29 代辦告訴我文件太多了,他自己又傳了一份型錄,但型錄上其實也沒有工作頻率及輸出功率,但結果很神奇的,就過了!稅NT $ 3,130,商檢規費NT $ 200
5/3 到貨

合計花費:
項目USD
NT
Alienware Area51 R2
$2,03365,759
國外交易服務費 986
服務費、運費、俄勒岡州轉運費合計$41113,316
通關服務費 500
檢驗代辦費 1,575
商檢規費 200
 3,130
合計 85,466
 

PS:俄勒岡州是免稅區,寄俄勒岡州轉運1磅要美金$1,在俄勒岡州倉庫物品大約會被放1週時間。

如果消費稅算起來比俄勒岡州倉庫轉運費便宜的話,也可以選擇不轉俄勒岡州,這樣還會快一點到。


Alienware windows 改裝 Note:
win7 iso製作為開機隨身碟

sp 廣穎隨身碟無法寫入問題

oem 登入圖

解決以USB安裝Windows 7時出現「找不到任何裝置驅動程式」、「遺失必要的CD/DVD裝置驅動程式」

Windows 7 USB3.0問題