[心得] VBA取得财务报表

楼主: moodyblue   2019-03-30 16:40:23
VBA取得财务报表
网志图文版:
https://www.b88104069.com/archives/4374
第二篇到目前为止,都是以单一公司进行财务分析,需要取得公司股东会年报和财务报告
,实务上大多会是多家公司同时进行分析,如果是一家一家取得财务资料PDF档案,显然
不容易进行。上一节有介绍过用Excel取得财务报表,虽然成功将财报资料下载到Excel工
作表,很方便进一步处理,但每下载一份报表,便需要操作一次,在想要同时分析多家公
司或是多个期间的场合,不是那么有效率,这一节进一步介绍如何运用VBA程式,达到较
为自动化地取得财务报表。
一、接下来会频繁用到Excel的VBA功能,已经是Excel程式设计师了,所以第一步是将开
发人员的面板打开。在上方功能区点选最右上角的“档案”,在跳出来的视窗选择最左下
角的“选项”,最后在“Excel选项”视窗中,移到“自订功能区”页签,将右边自订功
能区的“开发人员”勾选。在这里,还以点选最右边的上下按纽、调整众多指令在上方功
能区的顺序。
二、回到Excel上方功能区,多出了一个“开发人员页签,选点“程式码”中的Visual
Basic,当鼠标光标停留在这个指令的时候,会弹出辅助说明:开启Visual Basic编辑器
,并且还会提示“Alt+F11”为快速组合键。
三、如果读者是使用本书附带的Excel档案,开启VBA后,会看到如下的画面︳这便是
Excel编写VBA程式码的界面,在程式模组中的“Module 1”,已经写好了一个“
BalanceSheet”的宏程式。
四、回到Excel操作界面,在上方功能区移到“开发人员”页签,于“程式码”群组中选
择“宏”,一样会弹出辅助说明:“查看可使用宏的清单,一样有提示“Alt+F8”为
快速组合键。
五、点开“检视宏”后,跳出“宏”视窗,初看有很多宏程式可供选择。
将下面有个“宏存放在”的选单下拉,发现其实还有一个“PERSONAL.XLSB”,这个是
Excel内置的一个隐藏工作表,只要开启任何一个Excel档案,就会连带隐藏开启这个档案
,可想见例如将A宏放在此个人活页簿,效果等同于在所有Excel档案都能执行这个A巨
集。
在此用不到“PERSONAL.XLSB”,直接下拉改选为“现用活页簿”即可,表示只需要列出
目前活页簿所具有的宏清单。另外,读者如果没有在使用“PERSONAL.XLSB”,开启书
本范例档案应该也只看到“BalanceSheet”,这里因为刚好笔者有这些东西,顺便作个分
享。
改为“现用活页簿”之后,清爽了许多,按右上角的“执行”,让Excel开始跑第三步骤
所看到的那些程式。
六、刷刷刷,稍加等待,Excel果然一口气了五个年度的资产负债表,很多资料,这里碍
于篇幅仅能截图其中一部份。年度从左到右是2013年到2017年,不过把坐标往右边拉,会
看到有个2012年1月1日,通常财报是两个比较年度,2013年较为特别有三个年度,我的程
式设定每个年度财报占三栏:会计字段、本年度金额、上年度金额,每次VBA取得资料会
以插入方式新增字段,所以第一次资料中的2012年,于是被挤到最后面去,由于不致于影
响财务比率分析,不另外作程式调整。
七、将这一节的VBA程式码列示如下,依照列号作说明。
10:开始一个取名为“BalanceSheet”的宏程序程式。
30:定义Year为整数变量,定义WebAddress, DesCell为文字变量。
50:先将工作表所有储存格清除。
70:以变量Year设置2013到2017的循环事件,这个省略“Step 1”,因为循环默认是正一
的等差级数,亦即整数的流水号。
80-90:依照公开资讯观测站的年度财务报书网址,设定WebAddress的值,其中的“Year
”依照循环进行的话,刚好会是股票代码2409的2013到2017五个年度的第四季财务报告书

100:设定DesCell变量为所取得财报资料要开始贴上的储存格坐标位址,其中的“*3”形
成公差为3的等差级数,用意便是上个步骤所说的每个年度财报占三个字段,依序往右边
接续。
110:VBA取得网络资料的固定程式,其“Connection”为网址参数,“Destination”为
目的储存格位址参数。
120:设定取得网页资料的特定表格。
130:设定取得网页上的第2个表格。
140:设定不在背景执行,也是要等到完整资料后再执行下一行程式,因为Excel并非专门
取得网页资料的应用软件,而且网页太多的话Excel可能会不稳定,所以都会把这个设定
为False。
150:结束With,这一行和110行形成一个VBA的With…End With事件,作用是方便针对同
一物件设置许多参数,毋须在每一行程式再一次重申所关联的对象物件。
160:这一行和70行成一个VBA的循环事件。一开始70行的Year是2013,执行到160行再跳
回到70行,Year变成是下一个2014,往下再一次执行程式到160行,直到Year是2017将整
个等差循环执行完了,才会从160行往下跳到170行。
180:取得所有资料后,将工作表所有栏寛都设定为15,方便阅读。
200:结束此宏程式。
笔者上一本书为《人人做得到的网络资料整理术》,全书以八章四十个小节,介绍Excel
VBA如何取得网络资料,作为范例的网站类型有艺文展览、天气预报、借阅排行、银行汇
率等,其中有个类型便是公开资讯观测站的财务报表,这一节的VBA程式码便是引用自上
一本书。
当时那本书《人人做得到的网络资料整理术》侧重于Excel VBA的技术基础,这本书主题
是财报分析,仅仅利用Excel VBA作为工具取得原始财报,所以在接下来章节有用到VBA的
地方,还是会稍加说明,但在技术层面不会像上一本书那么详尽,读者有需要可以使用本
书附带的Excel档案,直接执行宏程式即可。
不过如同这一节提到的2013年较为特殊有三个年度,网页资料难免结构可能有变动,甚至
网址规则都有可能更改。建议读者真的很需要常常取得财务报表进行分析,建议可阅读《
人人做得到的网络资料整理术》,完整学习如何编写VBA程式取得网络资料。
延伸阅读:
偿债能力分析:流动比率
https://www.b88104069.com/archives/4372
Excel如何取得XBRL网页资料
https://www.b88104069.com/archives/4368
Excel如何取得财报
https://www.b88104069.com/archives/4365
作者: jeff79723 (KITTY)   2019-03-30 17:00:00
推,感谢分享
作者: nfsong (圖書館我來了)   2019-03-30 17:09:00
作者: meRscliche (如此而已)   2019-03-30 17:25:00
作者: SweetLee (人生如戲)   2019-03-30 17:34:00
作者: evens (evens)   2019-03-30 18:52:00
作者: idletime (idle)   2019-03-30 19:50:00
推~
作者: chorngbin   2019-03-30 20:14:00
作者: meulen (pao)   2019-03-30 20:32:00
感谢分享
作者: bear753951 (bear号:)   2019-03-30 20:34:00
作者: oasis822 (sisao)   2019-03-30 21:00:00
作者: ImFroggen (Froggen)   2019-03-30 22:01:00
谢谢
作者: michael33 (苍蝇宝宝)   2019-03-30 22:16:00
感谢分享
作者: shine409 (Fighting)   2019-03-30 22:53:00
谢谢分享
作者: taco20147 (小章鱼)   2019-03-30 23:00:00
Thank you!!
作者: hi77191988   2019-03-30 23:55:00
感谢分享
作者: jerkass (Jesus Christ)   2019-03-31 01:53:00
谢分享
作者: timuwtpirt (提姆化工学渣)   2019-03-31 03:20:00
作者: TaiTrend (§台 ㊣ 潮 §)   2019-03-31 09:16:00
推啊
作者: jai166 (荣耀 尊绝 不凡 台科)   2019-03-31 09:19:00
作者: twinkle38 (UgoU)   2019-03-31 09:51:00
google sheet 能套VBA吗?
楼主: moodyblue   2019-03-31 09:59:00
Google Sheet没接触过,以后可能会研究看看,谢谢!
作者: nickoil (呱)   2019-03-31 11:16:00
感谢分享
作者: globekiller (世界越快 心则慢)   2019-03-31 13:37:00
路过帮推
作者: OJC1106 (OLC(欧文喇叭克里斯))   2019-03-31 16:53:00

Links booklink

Contact Us: admin [ a t ] ucptt.com