Excel如何一次匯總比較三家公司財務報表
網誌圖文版:
http://www.b88104069.com/archives/4321
上一節介紹如何一次取得多家公司的損益表,作法是分別放在不同的工作表。實務上財務
報表分析時,將不同公司不同期間放在同一張工作表,格式上適當整理,才方便作有意義
的比較。雖然上一節所取得的資料,可以Excel手工彙總到一張工作表,但既然是編寫VBA
,總希望一步到位,在設計程式時把所有需求考慮在內,例如自動將三家公司財報匯總在
一起,方便直接分析,這個當然也可以設計VBA程式達成,以下具體分享:
一、想取得三家公司損益表,年度期間從2014年到2016年。
二、編寫VBA程式碼如下:
10:建立一個巨集程序「Stock_Year_IS」,「Public」的意思是該程序是被其他模組呼
叫,例如像「Call」引用;
30~40:新增工作表「Income Statement」;
60:宣告變數;
80~90:計算清單共有多少行;
100~110:將開始年度設定為「Year1」、截止年度設定為「Year2」;
130~150:設置三家公司的迴圈「i」,將公司代碼設定為「Stock1」、公司名稱設定為「
Stock2」;
170:設置三個年度的迴圈「j」;
190:將年度「j」從數值轉換成文字「Year」;
200:此為程式編寫的習慣用法,「n=n+1」等於是一個計數器,每循環一次迴圈就加一;
210~240: 先設定取得網頁資料的參數,以「Stock1」作為公司代碼、「Year」作為年度
,同時以計數器「n」適當決定每次下載的儲存格位置「DesCell」、並且以第一行作為公
司名稱「Stock2」的標題行;
260~300:本書一直使用的「QueryTables.Add」方法;
320~360:執行下一個循環,最後結束程序「Stock_Year_IS」。
三、執行結果如圖所示,一家公司一個年度是三欄資料,有三家公司三個年度,所以從A
欄到AA欄總共27欄。黃色部門是大類的損益項目,從圖片可以看出來,不同公司損益表結
構不一樣,同樣的「營業利益(損失)」在不同公司不同行,其實以先前第二節「多期損
益報表」的範例而言,同一家不同年度因為狀況不同,也有可能損益表結構不盡相同。
四、通常財務報表的比較不用到很細,如圖所示只需到大項目即可。
五、編寫程式碼如下:
30~50:先利用「UsedRange.Columns.Count」方法計算出有多少行及多少欄,如同步驟三
所述,共有27欄。因為每次報表有三欄,「Column = Column / 3」得到總共有多少組報
表。
70~110:有「i」組報表、設計迴圈「i」,先將每組報表的公司代碼及公司名稱複製到工
作表「六」。
130~230:設計「j」「k」三個迴圈,「j」代表想要擷取的損益項目、「k」代表損益表
總共有多少行,配合迴圈「i」,效果等同於Excel的Vlookup查找函數,只要順著三個迴
圈的設定試著跑一兩次,應該能理解「i」、「j」、「k」如同Vlookup公式中的三個參數
,這裡是用VBA程式碼把Vlookup實際執行過程編寫出來。
六、執行結果,成功彙總出簡易損益表,每家公司各個年度一覽無遺。(為了圖片清晰起
見,部份欄位作了寛窄的調整)
七、每家公司規模不同,各個損益項目直接比較,並不具有分析意義。實務作法是計算財
務比率,例如毛利率、營業利益率、淨利率,這些在上一步驟的基礎上,很容易整理出來
。(同樣為了圖片清晰起見,部份欄位作了寛窄的調整)
這一節範例是三家公司三個年度的損益表,只要迴圈設定再修改一下,便可以取得更多家
公司、更多年度的報表,這是VBA迴圈方便的地方。另外這一節也介紹如何利用迴圈實現
Vlookup函數功能,這樣做可以把熟悉的Excel函數內化成VBA程式碼的一部份,重點是將
函數作用以VBA形式編寫,其實不限於Vlookup函數,其他熟悉的Excel函數皆能如法泡製
,待有適當範例再作介紹。
本文內容取自《人人做得到的網路資料整理術》,博客來書店網址:
http://www.books.com.tw/products/0010775391。
延伸閱讀:
Excel如何取得多家公司財務報表
http://www.b88104069.com/archives/4317
Excel如何取得股票代碼清單
http://www.b88104069.com/archives/4315
Excel如何取得多期損益報表
http://www.b88104069.com/archives/4313