這篇文章主要分享如何用 VBA 分析及篩選海量資料,並透過資料結構優化大幅提升效率。
最近在跑分析流程時,常常需要用到約 5 萬筆資料來做模擬。這些資料是額外產生的,無法直接從歷史
SQL 查詢,所以每次都要重新計算,資料範圍從 104 年到 114 年,簡稱「A 資料」。
熟悉 VBA 的朋友都知道,Excel VBA 內建像是 AUTOFILTER
等工具,的確能輕鬆篩選數據,但量一旦逼近幾萬筆,效能就明顯下降。舉個例子,如果每次用 Excel 篩選 5 萬筆資料要花 30 秒,分析 10 年的單一條件就得花
10 × 30 = 300 秒,也就是 5 分鐘。假如有多個條件,更是用 N × 300 秒計算,真是讓人耗不起。
或許硬體升級是個解,但預算不是人人都有,小編認為這也是很適合拿來談「怎麼處理海量資料」的題材。實際上
VBA 本身分析功能不弱,只是網路上很多 YT 評論說 VBA 限制多、容易撞記憶體、資料多容易閃退。其實你懂得用好現有資源,小工具還是能發揮大作用,不要輕易放棄已經花錢買的軟體,也要珍惜自己的資金!
小編的篩選條件主要分成兩大類:
·
概念股股票:共約
200 種組合
·
財報特定指標:約
20 個條件
如果全部都用 A 資料來跑,200 × 20 × 5 萬,真的對不起自己的時間。解決方法就是,先把海量的
A 資料,轉成「只要用的範圍」,簡稱「B 資料」。例如 PCB 概念股大約 20 檔,則 A 資料只挑出這 20 檔股票 10 年的數據,變成 B 資料,資料量就降到
20 × 10 = 200 筆。
再加上 20 個指標條件,總共只要分析 200 × 20 = 4000 筆,效率提升到「秒殺」級。A
資料轉 B 資料前置處理約 30 秒,後續 10 年 × 20 個條件幾乎都在 1 秒內完成:
·
前置處理:30 秒
·
單條件分析:1 秒
× 20 = 20 秒
·
總共:約 50 秒
原本 20 × 300 = 6000 秒,分群後只花 40 秒,效率差異 40 / 6000
與原始做法相比,假設 20 個條件都用原法,總共要 6,000 秒(20 ×
300 秒),經由分群,只需 50 秒,效率提升超過百倍,僅耗時 0.83%。
![]()
重點就是:資料很重要,但「要處理的」資料更重要!只要分群精準,把不用的資料先篩掉,大大節省運算和等待的時間。這是分析海量資料的致勝絕招,也值得大家在日常工作實際應用。這樣你可以更充分解釋背景流程、讓篩選公式跟單位更清楚,也讓效率提升的呈現更具衝擊力!
沒有留言:
張貼留言