Microsoft Excel 中的財務建模/設計模式
設計模式用於相同的需求一再出現的地方。它們是設計模型的標準且經過良好測試的方法,您可以構建一個模式庫,以便更容易地設計專業解決方案。
請注意,下面模式的名稱不是正式名稱,因為 Excel 沒有普遍接受的模式,但它們是為本書的目的而建立的。您可能不會在其他地方找到這些名稱的使用。
以下表格模式是所有電子表格使用者都熟悉的一種。
這是構建模型最簡單、最明顯的方法,它用於大多數商業電子表格。
它有兩個主要問題
1. 公式必須在每一列中正確複製 - 這是常見的錯誤
2. 當公式塞進連續的列中時,很難檢查它們。幾乎沒有解釋的空間,使用者一次只能看到一個公式(除非他們開啟公式檢視,然後你無法看到值),並且使用者一次只能看到幾列。這意味著,隨著模型變得更加複雜,這種模式可能變得非常難以理解,甚至無法使用。
在更復雜的模型中,使用上面的表格模式可能很難將所有內容都放在一張紙上。
模型可以分為幾部分,如稅收、折舊、收入現金流等,每部分都可以放在一個單獨的“塊”中,通常放在單獨的紙上。然後在彙總紙上合併結果。
這是一種在大型金融模型中常用的模式,例如收費公路、發電站等,其中大量現金流會隨著時間的推移而預測,並且模型可以分解成邏輯塊。模型可能變得非常大,例如 15 兆位元組,有 3,000-4,000 個獨特的公式。
優點是每張紙都可以獨立檢查,並且每張紙都有一個特定主題。當問題很複雜時,如果您能夠一次檢查一小部分問題,這將很有幫助。
關於專案融資的更多資訊
雖然這種方法有助於將複雜問題分解成小塊,但重要的是要檢查各個塊之間的連線,並確保它們正確地連線起來,因為大型模型可能會變得非常混亂。您還需要非常仔細地設計模型,因為它以後將很難重新排列。
以下方法是表格模式的強大替代方法。它適用於您必須對許多行資料進行一系列計算的情況。
您首先基於單個數據記錄構建一個計算紙張,
- 在紙張頂部顯示該資料,
- 列出您需要的任何假設(邊做邊解釋),然後
- 在紙張上向下設定計算,儘可能分散。
結果是,給定任何一個資料記錄(即行),您可以在單個行中清楚準確地生成正確的結果。
這顯然有利於使計算比將它們塞進單行中的列更容易檢查。當然,沒有免費的午餐,缺點是您一次只能做一行,這很笨拙。
下一步是使用幾十行 VBA 程式碼依次將每個資料記錄載入到此紙張中,計算,並將每個記錄的結果匯出到輸出紙張上的單獨行中。最終得到一張輸出紙張,其中包含每個資料記錄的一行結果。
這樣做有幾個優點
- 您對所有記錄使用一組工作表計算 - 無需將它們複製到每個記錄的所有行中
- 計算比表格模式更容易檢查,因為您可以將它們分散到整個紙張上,並且可以拉入任何資料記錄以詳細檢視它
- 所有業務邏輯都在工作表中,而不是在 VBA 中,VBA 只是自動執行了該過程
- 資料和結果紙張與計算紙張完全分開,並且它們沒有可能弄亂的公式 - 這種分離是一個非常重要的設計原則
- 如果您想列印每個記錄的單獨結果(例如,您想向每個人傳送信件),VBA 可以為每個記錄列印一個格式特殊的輸出紙張,因為它迴圈遍歷所有記錄
這種方法比表格方法需要更多的技能才能構建,但程式碼可以通用化,因此不需要任何更改,無需程式設計技能。
VBA 可用於讀取資料和假設,執行所有計算,然後將結果放回紙張中。
當有大量資料,或者工作表速度很慢時,這是一種非常強大的方法,因為
- VBA 可以非常快速地處理資料,並且
- 它可以從資料檔案、資料庫和網站讀取和寫入資料,
- 並且它非常緊湊,因為它所有的計算都在記憶體中完成,並且一旦結果被放回紙張中就會被丟棄
這種強大的功能需要付出相當大的代價,因為
- VBA 需要紮實的程式設計技能
- 如果需要更改,以後可能很難適應
- 它可能非常難以檢查,雖然一種解決方案是使用選定的輸出生成測試工作表,以更容易地瞭解發生了什麼
通常,VBA 應該用於涉及大量資料的複雜模型,如模擬或非常大的資料檔案。