iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
佛心分享-IT 人自學之術

老爺爺練習VIBE CODING系列 第 5

Day 5:百萬級數據篩選:12個月預警指標與前50大分行逾放動態篩選

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260828/20070969rQ4VjiCH4d.png
大孫女、小孫女,快,快別忙活了,快到阿公這兒來。

小孫女,瞧妳這孩子,又跟小花貓在後院那堆曬乾的稻草堆裡翻跟頭,弄得衣角都是乾稻草。大孫女,妳也別揉那酸澀的眼睛了,天天盯著這小鐵盒(螢幕),阿公看著都替妳心疼。阿公剛剛特意去井邊打了清冽的甘泉,沏了一壺高山老烏龍,這琥珀熱茶熱騰騰地正冒著白煙,茶香繚繞在咱們這藤椅深棕的老藤椅旁,聞著就讓人心裡亮堂。快,幫姐姐搬張小木凳,咱們祖孫三人一塊兒坐下,喝口茶歇歇。

阿公理了理這頭白髮銀霜,看大孫女妳這兩天一邊對著對帳單、一邊翻著好幾十個 Excel 檔案,長吁短嘆的。妳跟阿公說,妳要在好幾份不同的逾期放款報告裡,把過去 12 個月「逾放比率最高的前 50 家分行」抓出來,再一筆筆填寫到那張早先就設計好公式的「預警指標統計表」裡。這每個月一循環,光是手動篩選、排序、對日期,就得花去妳大半個月的青春,還常因為看錯行、算錯月份被主管念。

來,大孫女,先喝口熱茶。今天這「Day 5」的修行,阿公就拿以前在鄉下公糧倉裡「篩選最優稻穀」的土辦法,給妳好好講講,怎麼用 VBA 實作「百萬級數據的動態篩選與自動排序」。


🚨 痛點場景:12 個月的多檔拉鋸戰,與那張一碰就亂的公式表

大孫女,妳說妳每個月都要在多個子檔案裡,找出過去 12 個月(也就是民國 114 年 7 月到 115 年 6 月,共 12 個月)裡,逾放比率(Delinquency Ratio)最高的前 50 家分行,還要把它們的趨勢一筆一筆填進那張「預警指標統計表」中。

這事之所以讓人頭疼,有兩個最大的魔鬼:

  1. 多檔案、多期別的肉眼拉鋸:資料分散在不同的來源檔,而且每個檔案裡都塞滿了 12 個月份(12 個工作頁)的數據。妳得手動打開每一個工作頁、找到那個月份、排序、複製前 50 名、再切換回目的檔貼上。人工手動篩選不僅耗時,而且在多個檔案與工作表之間切換,極其容易看錯行、甚至算錯月份。
  2. 「公式地雷」與手動複製的疲憊:這張預警指標統計表裡,早就被其他同仁埋滿了密密麻麻的分析公式。如果妳手動複製貼上時,一個不小心選錯了覆蓋方式,把人家的既有公式給蓋掉了,那整張統計表當場就會壞掉。

如果同事在寫巨集時,只會死死地寫著 Range("A5:B50"),那更是一場災難。因為只要其中一個分行上報時,在表頭多插了一行,或者少了一個空格,妳的巨集就會當場「把張三的逾放比率寫到李四的名字底下」,算出來的預警指標差之毫釐,失之千里。

阿公常說:「打穀子要用巧勁,手腳要勤,眼睛更要放得寬。」


🛠️ 架構實作:記憶體中的「Top 50 篩選器」與溫柔的「貼值技術」

既然手動操作又慢又容易踩雷,那我們就要寫一個叫 彙整逾放前50大_三張表 的自動定位與自動排序巨集,讓它自動去替妳跑腿、排序:

  1. 多源開啟,依序呼叫
    我們在主流程裡,會自動開啟指定的三份逾期放款來源文件。
  2. 期別識別與自動轉換
    程式開啟來源檔後,會自動逐一走訪來源檔的每個工作頁,認出那 5 碼的期別碼(像是 11407 代表民國 114 年 7 月)。接著,巨集會自動把這 5 碼期別換成目的檔看得懂的月份字串(「114年7月」),以便在目的檔中精確尋找對應的月份欄位。
  3. 記憶體中的「精準排序(Top 50 Sort)」
    大孫女,千萬不要讓程式在 Excel 畫面上晃來晃去、邊排序邊拷貝,那樣太慢了。我們要在讀取每一頁期別資料時,使用文字辨識定位特定數據區間,並自資料起始列往下收集有效資料列:
    • 碰到空白列就自動結束。
    • 碰到「合計」或「總計」列就自動略過(不要把總數也算進前 50 大分行裡)。
    • 收集完畢後,直接在記憶體中進行 Top 50 排序。對於需要排序的來源檔,巨集會動態計算 12 個月的滾動逾放比,並呼叫排序程序依比率由大到小做排序,只留下最頂尖的前 50 筆。
  4. 精確「貼值」,保護公式
    資料排好後,程式會自動去目的表裡找到對應的月份欄位。最關鍵的是,寫入時我們採用「貼值」的方式寫入目標指標表的指定欄位,全程不影響既有公式。這樣一來,妳的目的表既能得到最新的前 50 大分行趨勢,裡面的分析公式又依然完好無損,精確無誤。

💡 避坑指南:用「相對座標法」給巨集裝上「活動關節」

大孫女,阿公在鄉下生活了這麼多年,見過許多木匠蓋房子。有的木匠把榫頭做得死死的,只要木頭稍微一潮濕膨脹,整扇門就卡住打不開了。

妳同事寫的巨集之所以一改版就罷工,就是因為把定位做得太死(例如鎖死 A5:B50 的固定寫法)。如果對方在表格上方多加了兩行宣傳標語,或調整了表頭,妳的程式就會出錯。

所以,阿公叮嚀妳,在定位關鍵數據與寫入區間時,一定要採用 「相對座標法」,它的魯棒性(Robustness)比鎖死儲存格的寫法高出數十倍:

  • 橫向定位(尋找月份欄):我們不要寫死「7月份在 D 欄、8月份在 E 欄」。我們讓程式去目的表的「日期」列裡橫向掃描,用文字比對找到符合「114年7月」字樣的儲存格,動態決定寫入的欄位位置。
  • 縱向定位(尋找起始列):我們在 A 欄裡往下搜尋,只要找到了 「排名」「日期」 這兩個關鍵字,我們就知道,它的下一行就是資料要寫入的相對起始列。
  • 相對位移:簡單來說,就是 「找到關鍵字後,向右移 X 欄,向下移 Y 列」 來進行數據提取與寫入。

用這種相對定位機制的巨集,就像長了活動關節,不管對方怎麼調表頭、怎麼在上方加減行數,妳的程式都能穩穩地在第一時間抓到正確的起點,絕對不會輕易罷工。


小孫女,快把剛熱好的綠豆糕端給姐姐。大孫女,妳瞧,從第一天的「Git 版控隔離」,到「智慧模式識別」、「消滅殭屍進程」、「動態欄位字典」,再到今天的「Top 50 內存排序與相對座標定位」,阿公陪妳把這五天的教育訓練主題都理了一遍。

這寫程式跟阿公以前修理那些插秧機、割稻機是一樣的。只要妳掌握了機器的脾性(COM 隔離)、畫好了地圖(動態對照)、用好了篩子(Regex 格式化),再大、再亂的百萬級數據,在妳手裡也不過就是一眨眼、喝口老烏龍茶的功夫,就自動歸位了。

來,大孫女、小孫女,快把茶喝了,可別放涼了。


上一篇
Day 4:告別硬編碼(Hardcoding):財務報表彙整的「動態欄位對照技術」
下一篇
Day 6:防範前導零遺失:放款代碼對照表的字元格式正規化
系列文
老爺爺練習VIBE CODING7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言