Excel如何取得多期损益报表
网志图文版:
http://www.b88104069.com/archives/4313
上一节利用“按一下以选取这个表格”的功能,取得网页某一个特定的表格资料,这一
节先介绍如何以VBA方式完成相同任务。同时也运用上一章循环设计的概念,进一步批次
取得多个年度的财务报表,因为如此取得的内容,会有重复资料的问题,所以最后再利用
复制贴上的程式码,自动将资料整理成符合需要的格式。
一、首先要知道所需的表格在整个网页的次序。有三个方法,第一是直接看网页,但有时
不太确定哪些是表格属性;第二是上一节在取得网页资料时,透过Excel仔细数看看所选
取表格属于第几个;第三是最正式的,直接在Chrome浏览器鼠标右键“检查网页原始码”
,再用Find指令将表格找出来,如图所示。
二、编写VBA程式码如下,“QueryTables”的方法前面章节介绍很多,于此不赘述。这里
较为特别的属性是“.WebSelectionType = xlSpecifiedTables”,表示选取特定的表格
,“.WebTables = "3"”指选取整个网页中的第三个表格。
三、执行结果如图所示,只下载损益表的部份。(同样以2002中钢为例)
四、设置循环,以Year作为循环变量,因为2013年上市柜公司开始采用IFRS,2012以前并
无资料,变量值设定为从2013到2016。然后和本书其他章节范例相同,引用WebAddress、
DesCell作网址变量及储存格参照变量,最后将工作表的栏寛统一为15:“
Columns().ColumnWidth
= 15”。
五、执行宏“IncomeStatements”,成功一次下载三个年度的损益表,然而损益表项目
栏和前一年度资料会有重复。
六、为解决重复问题,另外编写整理格式的程式码。
Cells.UnMerge
为方便复制,首先将工作表所有储存格取消合并。
Cells(1,1).EntireColumn.Copy Sheets("七").Cells(1,1).EntireColumn
第一栏为损益表项目栏,只会复制一次,单独处理,这里程式码用意是将目前工作表第一
栏,整栏复制到工作表“七”的第一栏。
For i = 1 To 4
Cells(1, 2 + 3 *(i - 1)).EntireColumn.Copy Sheets("七").Cells(1,2 + (i -
1)).EntireColumn
Sheets("七").Cells(1, i + 1).Value = 2012 + i
Next i
设置循环,以i=1为例,将原工作表第二栏,复制到工作表“七”的第二栏,接着于工作
表“七”储存格(1,B)输入2013(2012+1),读者有兴趣可自行预想当i=2、3、4时,程式
会如何执行,便能理解这里程式设计的用意。
Sheets("七").Select
Columns().ColumnWidth= 12: Columns("A").ColumnWidth = 18
设置工作表“七”的格式,先将所有栏寛定为12,再单独将A栏的栏寛定为18,Select类
似于鼠标右键的动作,表示以工作表“七”作为目前工作表,“:”并无程式意义,只是
单纯将两行程式码合并于一行。
七、执行结果,非常完美!
这一节等于是将前四章所累积的程式功力,一次展现在取得公开财报的实务案例上。从这
个范例可以看出,单单“QueryTables”这一招就很好用了,但不同网站的结构不同,在
属性设置必须跟着变化,另外“QueryTables”也有个先天性的限制,它在取得网页比较
没有针对性,筛选机制是表格,这个范例刚好可以利用表格选取所需要的内容,但即便如
此,下载的资料仍然再经过一番删减复制,所幸Excel在这方面原本就非常强大,即便不
写VBA程式,如果资料量不大,纯Excel手工整理也不会太麻烦。
本文内容取自《人人做得到的网络资料整理术》,博客来书店网址:
http://www.books.com.tw/products/0010775391。
延伸阅读:
Excel如何取得公开发行公司财务报表
http://www.b88104069.com/archives/4312
Excel如何阅读网站新闻财经头条
http://www.b88104069.com/archives/4139
TibaMe | 会计人的Excel小教室:高效率工作心法!
https://www.tibame.com/offline/excel_accountant