
大孫女、小孫女,快,快別忙活了,快到阿公這兒來。
小孫女,瞧妳這孩子,又跟小花貓在後院那堆曬乾的稻草堆裡翻跟頭,弄得衣角都是乾稻草。大孫女,妳也別揉那酸澀的眼睛了,天天盯著這小鐵盒(螢幕),阿公看著都替妳心疼。阿公剛剛特意去井邊打了清冽的甘泉,沏了一壺高山老烏龍,這琥珀熱茶熱騰騰地正冒著白煙,茶香繚繞在咱們這藤椅深棕的老藤椅旁,聞著就讓人心裡亮堂。快,幫姐姐搬張小木凳,咱們祖孫三人一塊兒坐下,喝口茶歇歇。
阿公理了理這頭白髮銀霜,看大孫女妳這兩天一邊對著對帳單、一邊翻著好幾十個 Excel 檔案,長吁短嘆的。妳跟阿公說,妳要在好幾份不同的逾期放款報告裡,把過去 12 個月「逾放比率最高的前 50 家分行」抓出來,再一筆筆填寫到那張早先就設計好公式的「預警指標統計表」裡。這每個月一循環,光是手動篩選、排序、對日期,就得花去妳大半個月的青春,還常因為看錯行、算錯月份被主管念。
來,大孫女,先喝口熱茶。今天這「Day 5」的修行,阿公就拿以前在鄉下公糧倉裡「篩選最優稻穀」的土辦法,給妳好好講講,怎麼用 VBA 實作「百萬級數據的動態篩選與自動排序」。
大孫女,妳說妳每個月都要在多個子檔案裡,找出過去 12 個月(也就是民國 114 年 7 月到 115 年 6 月,共 12 個月)裡,逾放比率(Delinquency Ratio)最高的前 50 家分行,還要把它們的趨勢一筆一筆填進那張「預警指標統計表」中。
這事之所以讓人頭疼,有兩個最大的魔鬼:
如果同事在寫巨集時,只會死死地寫著 Range("A5:B50"),那更是一場災難。因為只要其中一個分行上報時,在表頭多插了一行,或者少了一個空格,妳的巨集就會當場「把張三的逾放比率寫到李四的名字底下」,算出來的預警指標差之毫釐,失之千里。
阿公常說:「打穀子要用巧勁,手腳要勤,眼睛更要放得寬。」
既然手動操作又慢又容易踩雷,那我們就要寫一個叫 彙整逾放前50大_三張表 的自動定位與自動排序巨集,讓它自動去替妳跑腿、排序:
11407 代表民國 114 年 7 月)。接著,巨集會自動把這 5 碼期別換成目的檔看得懂的月份字串(「114年7月」),以便在目的檔中精確尋找對應的月份欄位。大孫女,阿公在鄉下生活了這麼多年,見過許多木匠蓋房子。有的木匠把榫頭做得死死的,只要木頭稍微一潮濕膨脹,整扇門就卡住打不開了。
妳同事寫的巨集之所以一改版就罷工,就是因為把定位做得太死(例如鎖死 A5:B50 的固定寫法)。如果對方在表格上方多加了兩行宣傳標語,或調整了表頭,妳的程式就會出錯。
所以,阿公叮嚀妳,在定位關鍵數據與寫入區間時,一定要採用 「相對座標法」,它的魯棒性(Robustness)比鎖死儲存格的寫法高出數十倍:
用這種相對定位機制的巨集,就像長了活動關節,不管對方怎麼調表頭、怎麼在上方加減行數,妳的程式都能穩穩地在第一時間抓到正確的起點,絕對不會輕易罷工。
小孫女,快把剛熱好的綠豆糕端給姐姐。大孫女,妳瞧,從第一天的「Git 版控隔離」,到「智慧模式識別」、「消滅殭屍進程」、「動態欄位字典」,再到今天的「Top 50 內存排序與相對座標定位」,阿公陪妳把這五天的教育訓練主題都理了一遍。
這寫程式跟阿公以前修理那些插秧機、割稻機是一樣的。只要妳掌握了機器的脾性(COM 隔離)、畫好了地圖(動態對照)、用好了篩子(Regex 格式化),再大、再亂的百萬級數據,在妳手裡也不過就是一眨眼、喝口老烏龍茶的功夫,就自動歸位了。
來,大孫女、小孫女,快把茶喝了,可別放涼了。