
大孫女、小孫女,快,都別敲鍵盤了,快到阿公這兒來坐著。
小孫女,瞧妳這丫頭,在院子裡跟那隻小花貓追著落葉跑,弄得衣角都沾了泥沙。快過來,阿公給妳拍拍乾淨。大孫女,妳也別再揉那酸澀的眼睛了,天天盯著這小鐵盒(螢幕),阿公看著都替妳心疼。
阿公剛剛去灶頭燒了熱水,沏了一壺溫潤清香的杭菊茶,這琥珀熱茶正冒著嫋嫋白煙呢。來,小孫女幫姐姐搬張竹凳子,陪阿公坐在這藤椅深棕的老藤椅上,咱們一塊兒吹吹秋涼的晚風,看天邊那抹好看的晚霞。
阿公摸了摸這頭白髮銀霜,瞧妳今天一邊對著那份「放款類作業一覽表(也就是妳們常說的綠卡)」,一邊氣得直跺腳,說什麼「Excel 又自作聰明,把 0001 變成 1,系統對照全失敗了」。
來,喝口熱茶。今天這「Day 6」的修行,阿公就拿以前在鄉下農會整理老字號帳本、校對各類代碼的經歷,給妳們好好講講,怎麼 「防範前導零遺失」,給這些放款代碼對照表做一場乾淨的 「字元格式正規化」。
大孫女,妳跟阿公抱怨,說那些重要的放款代碼、擔保品代碼(像是 0001、0025),只要一倒進 Excel 裡,Excel 就會自作聰明地以為這是一般的數字,自作主張把前面的零全部抹掉,變成了數值 1 或者 25。
這事情在系統匯入對照時,簡直就是一場災難。
阿公給妳們講個老故事。以前鄉下各家各戶交公糧,每戶都有一個專門編號,比如「陳家是 0005 號」,「李家是 0012 號」。如果阿公在記帳時,貪圖省事或者以為它就是純數字,隨手記成「5 號」和「12 號」。等到去倉庫提糧時,守門的長工拿著鐵印章去對照「5 號」,結果印章對不上(因為印章上刻的是 0005),這糧食不就提不出來了嗎?
在妳們的放款代碼對照表裡也是這個道理。這份官方放款類作業一覽表是全行連線系統的代碼基準。代碼少了一個零,後端系統就認不得它,最後整批放款對照、系統匯入通通失敗,害得妳和同事大半夜還要手動一個個補零,這誰受得住?
既然 Excel 喜歡自作聰明,那我們在寫巨集程式時,就得像阿公對待不聽話的小毛驢一樣,給牠套上嚴格的韁繩。
大孫女,妳要把那套主控巨集 BuildAllPropertyLists 拿出來。在寫入性質別、對象別、擔保品別等對照表時,我們要執行最徹底的字元正規化:
Option Explicit。強迫自己宣告所有變數,不讓變數類型有任何模糊的空間,這是寫好 VBA 的基本功。@。這樣一來,Excel 就會知道這排格子裝的是「字」而不是「數」,絕不隨便吃掉前導零。')。這樣,即使 Excel 再怎麼自作聰明,一看到單引號,它也只能乖乖把這串字當成純字串讀進去,絕對能保留住最珍貴的前導零。(),有的寫全形 (),有的還寫小型括號 ﹙﹚。阿公建議妳用 NormalizeBrackets 輔助函式,把這些變體統一正規化為標準的全形 (),資料才不會看起來雜亂無章。大孫女,阿公在鄉下編竹筐,知道收尾和剔除雜質最是要緊。這基準檔是官方文件,裡面不僅有乾淨的代碼,還夾雜了許多用來排版和說明的「髒資料」。
所以,妳的巨集絕對不能只做簡單的格式化,妳必須在處理時加入極其嚴密的資料排除規則:
0、無實質擔保品』這種含頓號『、』的區塊標題,或者是代碼長度大於 4(性質別主表)或 5(擔保品表)的說明性長字串。這些如果誤寫入對照主檔,後台系統一匯入就會直接崩潰。因此,我們要加上『代碼長度限制』來過濾它們。只有把這些雜草般的髒資料徹底排除在外,妳的對照主檔才能像阿公挑出來的稻穗一樣,顆顆飽滿、乾乾淨淨。
聽阿公唸了這麼多,大孫女、小孫女,有沒有覺得這 Excel 的前導零遺失,其實只要套上「文字格式」的籠頭,也就服服貼貼了?
寫程式啊,就跟我們鄉下人過日子一樣,凡事要細心,想在前面(Option Explicit、排除規則),後面就不會出亂子了。這六天上下來,妳已經把版控、分類、安全隔離、動態映射、數據排序跟代碼正規化的功夫都學到手了。阿公看著妳,心裡真替妳高興。
來,茶溫剛剛好,大孫女快喝一口。小孫女,這塊剛出爐的烤地瓜,拿去跟姐姐分著吃,甜甜嘴。