作者moodyblue ()
看板Stock
标题[心得] VBA取得财务报表
时间Sat Mar 30 16:40:23 2019
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
--
周末,我们继续Excel:=>21.心得=>5.其他=>3.office
会计人的Excel小教室:
https://www.facebook.com/acctexcel
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.22.232.166
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Stock/M.1553935237.A.BFB.html
1F:推 jeff79723: 推,感谢分享 03/30 17:00
2F:推 nfsong: 推 03/30 17:09
3F:推 meRscliche: 推 03/30 17:25
4F:推 SweetLee: 推 03/30 17:34
5F:推 evens: 赞 03/30 18:52
6F:推 idletime: 推~ 03/30 19:50
7F:推 chorngbin: 推 03/30 20:14
8F:推 meulen: 感谢分享 03/30 20:32
9F:推 bear753951: 推 03/30 20:34
10F:推 oasis822: 推 03/30 21:00
11F:推 ImFroggen: 谢谢 03/30 22:01
12F:推 michael33: 感谢分享 03/30 22:16
13F:推 shine409: 谢谢分享 03/30 22:53
14F:推 taco20147: Thank you!! 03/30 23:00
15F:推 hi77191988: 感谢分享 03/30 23:55
16F:推 jerkass: 谢分享 03/31 01:53
17F:推 timuwtpirt: 推 03/31 03:20
18F:推 TaiTrend: 推啊 03/31 09:16
19F:推 jai166: 推 03/31 09:19
20F:推 twinkle38: google sheet 能套VBA吗? 03/31 09:51
21F:→ moodyblue: Google Sheet没接触过,以後可能会研究看看,谢谢! 03/31 09:59
22F:推 nickoil: 感谢分享 03/31 11:16
23F:推 globekiller: 路过帮推 03/31 13:37
24F:推 OJC1106: 推 03/31 16:53