
大孫女、小孫女,快過來,別忙了,先歇口氣。
小孫女呀,別再跟院子裡那隻小花貓搶那團毛線了,過來阿公這邊。大孫女,妳也別死盯著那閃爍的螢幕,阿公剛沏好了一壺老普洱,湯色溫潤、澄澈如琥珀熱茶,正冒著白煙呢。來,幫姐姐搬張竹凳子,陪阿公坐在這藤椅深棕的老藤椅上,咱們一塊兒吹吹晚風。
妳看,天邊那一抹晚霞暮紫正緩緩散開,多安靜、多舒心啊。
阿公摸了摸這頭白髮銀霜,看妳今天一邊敲鍵盤、一邊抓腦袋,嘆氣嘆得比昨天的風聲還大。阿公聽妳碎碎念,說什麼「分行又亂傳檔案」、「欄位順序又變了」,聽得阿公心疼。阿公以前在鄉下合作社整理老帳本時,各地鋪子送來的單子也是這般雜亂無章。
來,喝口熱茶,阿公今天再給妳講一課。咱們這「Day 2」的修行,就來聊聊怎麼靠「模式識別」和「正則表達式」,去收服那幾百個不聽話的報表。
大孫女,妳昨天跟阿公抱怨,說每個月初,妳都要彙整從幾百個分行陸續報上來的 Excel 檔案。
這事情最折磨人的地方在於,寫報表的人心思各異。有些分行交上來的是「月份統計彙總表」(也就是月報),有些交上來的卻是「跨期明細表」。更糟糕的是,這兩類報表的格式完全不同!欄位順序、表頭位置天天在變。有時候這個月「分行名稱」在 B 欄,下個月又跑到了 C 欄;有時候「日期」寫在最上面,有時候又夾在表格中間。
妳以前的作法,是傻傻地在程式裡寫死儲存格位置,像是 Range("B2")、Range("A1")。結果人家只要稍微動一個空格,妳的程式就當場「罷工」,跳出錯誤訊息,逼得妳得逐個檔案打開、用肉眼去比對,再手動複製貼上。幾百個檔案下來,大孫女,妳這眼睛哪受得了?這簡直是拿新竹犁地那頭老鐵牛的力氣,在做繡花針的細活,太折騰了。
阿公常說:「看水看源頭,看樹看樹根。」我們做事情,不能只看外表,要找出它藏在裡面的規矩。
既然我們不能強求幾百個分行都乖乖聽話、把格子放得一模一樣,那我們就得讓程式「變聰明」 。這在妳們年輕人的行話裡,叫做智慧型模式識別(Pattern Recognition)。
阿公教妳,我們用 VBA 寫這個識別器,核心邏輯千萬 不要依賴固定的儲存格定位 ,而是要像阿公挑選茶葉一樣,用動態掃描的方式:
Worksheet.Copy)的技巧,不破壞原始格式,直接把它們整理成依時間或主題分門別類的乾淨活頁簿。大孫女妳想想,這樣一來,不管對方怎麼挪動格子,只要關鍵字還在,妳的程式就像長了眼睛一樣,能自動把千奇百怪的報表,收拾得妥妥貼貼。
不過,這裡面最容易踩空的泥坑,就是那個「日期解析」。
今天阿公看了一下日曆,今天是中華民國 115 年 8 月 27 日,也就是西元 2026 年 8 月 27 日。妳想想,光是這一天,幾百個分行的寫法就可能奇形怪狀:
115/08/27」115.08」(只寫到月份)2026/08/27」115年8月」如果妳直接把這些亂七八糟的字串丟進去比對或做後續的趨勢分析,那電腦肯定會發瘋,算出來的數字牛頭不對馬嘴。
所以,大孫女,妳在架構上一定要設計一個叫 正則表達式(Regex) 的解析器。這東西就像是阿公在稻埕上篩米用的鐵篩子,不管妳丟進來的是碎石子、粃穀還是飽滿的稻穗,只要過了這個篩子,它就會自動:
YYYY-MM-DD)或是標準西元格式。有了這個標準的日期格式,後面不論是做時間排序,還是要做趨勢比對,都不會再出半分差錯。
聽阿公囉嗦了這麼多,大孫女,有沒有覺得這幾百個分行的報表,其實也沒那麼可怕了?
這寫程式的道理,跟阿公以前在村裡分發大家的公糧、登記各戶的水道費是一模一樣的。對方格式再變,人心和資料的核心本質是不會變的。只要妳的「筛子」(Regex)夠細,「眼睛」(模式識別)夠亮,這幾百個檔案,不過是妳點一下按鈕、喝口老普洱的功夫,就自動歸位了。
來,茶溫剛剛好,大孫女快喝一口暖暖胃,小孫女也吃一塊阿公特地給妳們留的綠豆糕。