Excel迴圈用法可以針對報表每個項目依序執行,本文介紹如何模擬分析Vlookup公式執行流程,設計VBA程式,利用UsedRange取得資料範圍,一次匯總不同公司3張損益表。
目錄
Toggle上一節介紹如何一次取得多家公司的損益表,作法是分別放在不同的工作表。實務上財務報表分析時,將不同公司不同期間放在同一張工作表,格式上適當整理,才方便作有意義的比較。雖然上一節所取得的資料,可以Excel手工彙總到一張工作表,但既然是編寫VBA,總希望一步到位,在設計程式時把所有需求考慮在內,例如自動將三家公司財報匯總在一起,方便直接分析,這個當然也可以設計VBA程式達成,以下具體分享:
一、三家公司損益表
想取得三家公司損益表,年度期間從2014年到2016年。

二、VBA網路爬蟲程式
編寫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欄。黃色部門是大類的損益項目,從圖片可以看出來,不同公司損益表結構不一樣,同樣的「營業利益(損失)」在不同公司不同行,其實以先前第二節「多期損益報表」的範例而言,同一家不同年度因為狀況不同,也有可能損益表結構不盡相同。

四、簡單財報損益表
通常財務報表的比較不用到很細,如圖所示只需到大項目即可。

五、VBA資料整理程式
編寫程式碼如下:

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迴圈事件及Excel函數
這一節範例是三家公司三個年度的損益表,只要迴圈設定再修改一下,便可以取得更多家公司、更多年度的報表,這是VBA迴圈方便的地方。另外這一節也介紹如何利用迴圈實現Vlookup函數功能,這樣做可以把熟悉的Excel函數內化成VBA程式碼的一部份,重點是將函數作用以VBA形式編寫,其實不限於Vlookup函數,其他熟悉的Excel函數皆能如法泡製,待有適當範例再作介紹。
贊贊小屋VBA教學中心:
Excel巨集錄製教學、Excel巨集程式、VBA編輯器、VBA自學入門、VBA基礎語法、VBA基本應用、VBA UserForm、VBA VLOOKUP。
取得範例程式請前往VBA社團,訂閱請加入VBA Line社群。
VBA課程推薦:零基礎入門進階的20小時完整內容