跳轉至內容

Microsoft Excel 中的財務建模/測試

來自 Wikibooks,開放世界中的開放書籍

最重要的是要記住,你是最後一道防線。你不僅僅是在尋找錯別字,你遺漏的任何東西都可能造成鉅額資金損失或尷尬,所以要小心謹慎,不要匆忙。

在接下來的註釋中,我們假設我們正在檢查一個重要的模型,需要花費一兩天的時間進行檢查,並且我們絕對希望沒有錯誤。我們還將考慮可以採取哪些措施使模型更容易檢查。

我們將在下面大量使用“檢查”、“測試”和“審查”這些詞。它們的目標都是一樣的——確保模型是正確的,或者足夠接近正確。

開始之前

[編輯 | 編輯原始碼]

在開始檢查本身之前,我們將先提出一些基本問題。

1. 你是檢查模型的合適人選嗎?

  • 你是否瞭解模型背後的業務問題?這一點很重要,因為你需要確保沒有遺漏任何內容,例如稅務考慮因素。如果你對業務瞭解不多,那麼你可能不應該檢查模型。
  • 你是否足夠了解模型的技術細節以對其進行檢查?如果它是用 VBA 編寫的,而你無法閱讀它,那麼這將非常困難。
  • 你是否自己構建過模型?你是否有經驗瞭解可能出現的問題?

2. 你是否擁有模型的所有文件?

這應該包括所有相關的信件或檔案,以及任何有助於你瞭解正在建模的業務的內容。

3. 你是否有足夠的時間和預算來正確完成這項工作?

準備工作

[編輯 | 編輯原始碼]

複製電子表格,將其重新命名,並新增一個名為“審查”的表格,其中將包含你所有的評論。不要在原始電子表格上進行操作。

“審查”表格應包含如下一些列

在實踐中,大多數企業中的檢查人員都使用原始電子表格工作,進行更正或更改,然後將其返還給構建者進行檢查。

對於大多數小型電子表格來說,這都可以,但它確實混淆了構建者和檢查者的角色,對於重要或複雜的模型,你應該避免這樣做。如果你使用“審查”表格,則不應對原始表格進行任何更改——構建者應在檢視你的評論後進行此操作,然後將模型返還給你重新檢查。你的工作是檢查,而不是構建。

檢查功能

[編輯 | 編輯原始碼]

當然,首先要檢查的是模型是否按預期執行。你需要找出誰需要它以及他們想要什麼,以及模型是否足夠。

在我們年金模型的示例中,規範非常清楚地說明了需要什麼,因此應該很容易看出它是否似乎提供了所有所需的內容。

檢查邏輯

[編輯 | 編輯原始碼]

這是一個至關重要的步驟,因為研究表明,邏輯錯誤和遺漏很難發現。這意味著你需要格外小心。

然後,你需要檢查模型中的業務邏輯,然後再深入到表格和單元格的細節。希望模型構建者已經清楚地記錄了邏輯,以便於檢查。這意味著不僅要闡明邏輯本身,還要提供指向原始文件的連結或摘錄,以顯示其來源。如果不是這種情況,你應該請求這樣做。

下面的摘錄來自一個實際的電子表格,該電子表格使用之前的報告計算盈利能力公式,該報告的摘錄包含在右側。這使得檢查者可以輕鬆地審查邏輯。

你可以看到,這比模型構建者簡單地開始使用一個神秘的公式(例如 =1-1/(G6+(1-G6)/0.85),且無任何解釋)要好得多。

儘可能地,你應該在檢視模型之前寫下你自己的邏輯,因為很容易受到你所看到內容的影響,並認為“這看起來沒問題”,而如果你自己先做一遍,你可能會發現一些遺漏的地方。

識別風險因素

[編輯 | 編輯原始碼]

現在你已經瞭解了模型應該做什麼,並且已經確定了業務邏輯,你應該考慮什麼地方可能出錯,以及這可能有多嚴重。

例如,

  • 某些輸入可能很危險,因為使用者可能會因錯誤或無知而輸入不正確的值
  • 輸入的組合可能需要不同的處理方式
  • 某些假設(例如稅率)可能會對結果產生重大影響
  • 哪些輸入或計算對結果的影響最大?
  • 公式可能沒有正確地複製到行或列中

在此階段,你還應該考慮如何檢查模型的合理性。

檢查輸入

[編輯 | 編輯原始碼]

你的輸入通常將包含以下內容的一部分或全部

資料:例如員工記錄或交易記錄。你需要檢查資料的來源,以及它是否正確,以及它是否被修改過。理想情況下,它應該與模型的其餘部分完全分開(例如,在單獨的工作表或資料檔案中),以避免汙染。

與其他所有內容一樣,資料需要清晰。例如,如果標題令人困惑或神秘,則應添加註釋對其進行解釋。

假設:這些是模型的基礎假設,由構建者設定,而不是由使用者設定。例如,模型可能包含一組當前的所得稅稅率,這些稅率顯然不需要使用者輸入,因為它們對每個人都相同。

應在一個地方清楚地列出假設,並進行清晰的標記和解釋,如果它們對日期敏感(例如每年更改的稅收限額),則應顯示生效日期。包含值的單元格應使用顏色編碼以將其挑選出來。

需要記錄和證明假設,因為它們會對結果產生如此大的影響。如果你不認為自己能夠向另一位精算師解釋假設的原因,那麼你做得還不夠。

如果尚未完成,請確定假設的限制,例如,工資增長可能顯示為 4%,但你可能會認為它在一年內可能在 0% 到 8% 之間變化。這對於檢查模型是否能夠處理極端輸入以及檢查任何敏感性測試都很重要。

使用者輸入:這通常僅適用於存在除模型構建者以外的其他使用者的情況。使用者輸入可能非常危險,因為使用者在輸入內容方面可能非常有創意。例如,如果要求輸入利率,他們可能會輸入 0.7、7% 或 7。模型必須處理這種情況。

因此,應透過將使用者輸入限制在有效輸入範圍內來對其進行“控制”。Excel 的資料驗證是執行此操作的最有效方法,因為它可以防止使用者輸入不屬於你指定範圍的輸入,或鍵入不在你指定列表中的文字等。

另一種方法是使用 Excel 提供的“控制元件”,例如下拉列表和複選框。

作為檢查者,你應該檢視輸入的建模方式,並考慮使用者可能採取哪些措施來破壞模型。當然,你需要嚴格的程度因模型而異。

你還應該檢查使用者輸入是否已得到充分解釋,以便普通使用者能夠理解。

檢查計算

[編輯 | 編輯原始碼]

計算是輸入與業務邏輯相遇的地方。在這裡,最重要的是要清晰詳細地列出計算過程,以便於檢查。

最明顯的方法是遵循計算的佈局,並檢查資料、假設、輸入和邏輯如何組合產生最終結果。

最常見的情況是,資料位於行中,公式位於列中。

公式應從左到右、從上到下排列,因為這是我們的閱讀方式,而且Excel也是按照此順序進行計算的。輸入應位於左上角,或位於單獨的工作表中。

需要查詢的內容

  • 公式在表格中間意外地發生變化 - 如果將字型更改為等寬字型(例如Courier),然後單擊工具欄中的“顯示公式”按鈕,即可輕鬆發現此問題,從而顯示工作表上的所有公式
  • 公式中硬編碼的數字(例如稅率) - 即使這些數字不太可能發生變化,也應將其取出並與假設一起包含
  • 迴圈引用 - 應儘可能避免

執行測試

[編輯 | 編輯原始碼]

下一步是對輸入進行一些測試。一個簡單的技巧是將所有輸入設定為0或1(或其他任何值),以便結果非常簡單,並且任何異常都會立即顯現出來。例如,如果將投資率和指數化設定為零,財務預測應該只會生成一系列未調整的現金流,從而更容易檢視它們是否正確。另一種技巧是使用“角點”輸入,即輸入輸入的最高值和最低值,並檢視模型是否正常工作。

您應該考慮一下,如果您進行了所有測試並發現了錯誤,然後在錯誤修復後又必須重新進行所有測試會發生什麼。這可能會變得有點乏味!根據所涉及的工作量,您可以設定一組自動化的測試。

如果模型用於內部使用,您應該嘗試將測試包含在模型本身中,以便任何使用模型的人都可以準確地看到測試的內容,甚至可以重新測試它。

如果您能夠編寫程式碼,最好設定一組輸入並使用VBA自動執行它們。這可以大大加快測試速度。

如果業務邏輯是用VBA編寫的(即VBA完成了大部分繁重工作),則可能難以測試。您可以將部分結果轉儲到工作表中進行測試。

合理性測試

[編輯 | 編輯原始碼]

您應該尋找方法來測試模型的合理性。例如,可能有一年前完成的數字應該與模型的結果相似,或者可能存在其他模型可用於至少部分當前模型生成測試結果。

您還可以要求構建者包含交叉檢查(例如,列和行的總計應匹配),這有助於測試模型。

靈敏度測試,即更改其中一個輸入並檢視會發生什麼,是另一種測試合理性的方法,尤其是在您對預期結果有所瞭解的情況下。

靈敏度測試的擴充套件是找出模型需要達到多準確,然後估計設定假設和輸入時可能出現的錯誤(例如,7%的投資假設可能會有2%的誤差),並測試對結果的影響。這可以大致瞭解結果可能偏離多遠(因為使用者不可能完全正確地獲得所有假設),以及總體誤差是否可接受。

分塊測試

[編輯 | 編輯原始碼]

如果可能,請分塊測試模型,以便您可以一次批准一部分。這使得檢查更易於管理,並且應該使查詢錯誤更容易。

電子表格測試工具

[編輯 | 編輯原始碼]

有幾個電子表格測試工具可以幫助檢查複雜的電子表格。它們查詢諸如不一致的公式和孤立(未使用)的計算單元格之類的內容。

它是否可用?

[編輯 | 編輯原始碼]

設身處地為使用者著想,或者更好的是,找其他人嘗試使用它。它是否清晰,或者是否令人困惑?

使用者是否可以意外更改公式或輸入荒謬的數字?

請記住,使用者通常不會閱讀說明,並且會在沒有思考的情況下使用模型。使用者越不熟練,就需要投入更多精力來保護模型 - 特別是輸入 - 免受不正確的使用。

華夏公益教科書