Excel 股市資料抓取服務

提供Excel 股市資料抓取服務
可透過下列方式聯絡我
Email: iamaraymond@yahoo.com.tw
(FB請先加我好友再私訊,不然會跑到陌生訊息)

課程:
Excel VBA 金融資料抓取 | 打造股票研究系統 (學生數: 602,學員評價5顆星)
無痛起步-Excel VBA超入門實戰(學生數: 413,學員評價5顆星)


2018年6月15日 星期五

使用dictionary做條件篩選

今天想做一個在M3儲存格輸入產業別
就會自動到A到J欄找到該產業的個股
並且從M6開始往下列


如下圖

最直觀的想法就是用迴圈全部找一遍
並且新增一個變數 j,當作列數
若條件符合,就放入cells(j,"M")



程式碼如下

Sub test1()
Dim t: t = Timer
LR = Cells(Rows.Count, "A").End(xlUp).Row
j = 6
For i = 1 To LR
    If Cells(i, "G") = Range("M3") Then
        Cells(j, "M") = Cells(i, "C")
        Cells(j, "N") = Cells(i, "D")
        j = j + 1
    End If
 
Next
Debug.Print Format(Timer - t, "0.0000秒") & "--方法1"
End Sub

測出來時間:0.0313秒

但最近學了一個使用dictionary物件
於是就來試試看

程式碼如下

Sub test2()
Dim t: t = Timer
Set dic = CreateObject("scripting.dictionary")

LR = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To LR
    If Cells(i, "G") = Range("M3") Then
        dic(Cells(i, "C").Value) = Cells(i, "D").Value
    End If
 
Next
keyarr = dic.keys
itemarr = dic.items
Range("M6").Resize(dic.Count, 1).Value = Application.Transpose(keyarr)
Range("N6").Resize(dic.Count, 1).Value = Application.Transpose(itemarr)
Debug.Print Format(Timer - t, "0.0000秒") & "--方法2"

End Sub

測出來時間:0.0156秒
比上一個程式碼快了一倍

而這還是用個股比較少的水泥產業測試的
如果使用個股較多的電子零組件產業呢?

測試如下
方法1:0.3906秒
方法2:0.0313秒
速度竟差了十倍以上!

學習dictionary的網站:
http://club.excelhome.net/forum.php?mod=viewthread&tid=1068483&extra=page%3D1

沒有留言:

張貼留言