解析如何處理 ABC123 庫存報表
利用自動化腳本與 VBA 高效彙整統計
AUM (Assets Under Management),即「資產管理規模」,是衡量金融機構或理財部門業務體量的重要指標。
1. 基金資產規模
2. 信託本金統計
核心系統產出的 ABC123 庫存報表格式,通常面臨以下困境:
動輒數十 MB 的 `.txt` 檔案,包含數十萬筆客戶庫存明細,難以直接閱讀。
非 CSV 或 Excel 格式,而是為點陣印表機設計的排版,充滿表頭、表尾與分頁符號。
若依賴人工匯入 Excel 進行資料剖析與樞紐分析,每天需耗費大量時間且易出錯。
| 比較項目 | 傳統人工匯入 Excel | VBA 文字流解析 |
|---|---|---|
| 記憶體消耗 | 極大 (常導致當機) | 極小 (逐行讀取) |
| 處理時間 | 10 - 20 分鐘 | 3 - 5 秒 |
| 人為介入 | 多步驟操作 | 一鍵執行 |
產生原始報表
批次檔自動下載
高效過濾與運算
產出 AUM 總表
透過執行 run.bat,完全免除人工登入系統下載檔案的繁瑣步驟,實現排程或一鍵取檔。
@ECHO OFF
ECHO =========================================
ECHO 開始下載 ABC123 庫存報表...
ECHO =========================================
:: 使用 FTP 或內部 API 指令自動擷取
ftp -s:ftp_script.txt
ECHO 檔案下載完成:ABC123.txt
ECHO 準備啟動 Excel VBA 處理程序...
實務上會搭配排程工作,在每日營業日結束後自動執行。
大型列印報表通常具有特定的規律,我們需要跳過無用資訊,只抓取「明細行」。
Open ... For Input 語法。Line Input 逐行讀取文字。
Dim textLine As String
Dim fileNum As Integer
fileNum = FreeFile
Open "C:\ABC123.txt" For Input As fileNum
Do Until EOF(fileNum)
Line Input #fileNum, textLine
' 針對每一行 textLine 進行判斷與切割
Loop
Close fileNum
由於是固定寬度的報表,我們依賴字串函數來判斷該行是否為有效資料,並精準切割欄位:
IsNumeric(Left(textLine, 10)) 判斷是否為帳號開頭。Mid(textLine, start, length) 擷取特定欄位。Trim() 去除空白,Replace(val, ",", "") 去除千分位符號以利運算。管理階層需要知道「每一檔基金」目前的總規模。
使用 VBA 的 Dictionary (字典) 物件。
以「基金代碼」為 Key,將擷取到的「資產規模」數值累加到對應的 Item 中。
' fundDict 為 Dictionary 物件
fundCode = Trim(Mid(textLine, 12, 4))
aumVal = CDbl(Replace(Mid(textLine, 50, 15), ",", ""))
If fundDict.Exists(fundCode) Then
' 已存在則累加
fundDict(fundCode) = fundDict(fundCode) + aumVal
Else
' 不存在則新增
fundDict.Add fundCode, aumVal
End If
除了市價(規模),同時也需要掌握客戶投入的原始「信託本金」總額,甚至計算帳戶數。
' 擷取本金數值
principalVal = CDbl(Replace(Mid(textLine, 20, 15), ",", ""))
' 計算總計
totalPrincipal = totalPrincipal + principalVal
totalAccounts = totalAccounts + 1
' 亦可依分行代號(帳號前幾碼)進行 Dictionary 分組統計
branchCode = Left(textLine, 3)
透過比對「信託本金」與「資產規模」,可快速推算出整體客戶庫存的未實現損益率,提供給業務單位重要決策參考。
在處理百萬筆資料寫回 Excel 儲存格時,必須加上以下設定,速度可提升 100 倍以上:
' --- 處理開始前關閉耗能功能 ---
Application.ScreenUpdating = False ' 關閉螢幕刷新
Application.Calculation = xlCalculationManual ' 改為手動計算
Application.EnableEvents = False ' 關閉事件觸發
' ... 執行讀檔、Dictionary 計算、陣列寫入儲存格 ...
' --- 處理結束後恢復設定 ---
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
執行完畢後,原本雜亂的文字檔,瞬間轉換為乾淨、可直接作為報告的 Excel 彙整表:
| 基金代碼 | 總帳戶數 | 信託本金總額 | 資產規模總計 |
|---|---|---|---|
| 1001 | 1,245 | 125,000,000 | 138,500,200 |
| 2005 | 890 | 85,600,000 | 81,200,000 |
| 3012 | 3,102 | 450,200,000 | 510,800,500 |
| 總計 | 5,237 | 660,800,000 | 730,500,700 |
從檔案下載到報表產出,作業時間由數十分鐘縮減至 幾秒鐘。
消除人工複製貼上、公式拖曳錯誤的風險,確保資料 100% 準確。
將同仁從無聊的庶務中解放,專注於 數據分析與業務推廣。
感謝聆聽!
有關於文字報表解析或自動化腳本的疑問嗎?