[心得] VBA如何设置循环将多余资料删除

楼主: moodyblue   2019-04-14 19:52:09
VBA如何设置循环将多余资料删除
网志图文版:
https://www.b88104069.com/archives/4376
综合本书到目前为止的内容,可知利用Excel取得网页资料并不难,麻烦的是整批量下载
的内容,于工作表上会有很多不必要的东西,例如重复的标题行和与核心资料无关的讯息
,所幸于整理资料表这方面,Excel刚好是专家,再搭配VBA可以达到很高效率的作业。这
一节便以历史汇率为范例,介绍如何适当地删除多余的资料。
一、结合第三节利用“QueryTables.Add”取得网页汇率的程式码、和上一节利用“
Application.InputBox”输入年份币别的方法,编写VBA程式码如图所示。
二、执行程式,选择2016年的港币(HKD)。为了方便截图,直接取得的资料在格式上已经
先调整了栏寛,并且把日期隐藏起来,但是有两个问题,一个是图片绿色部份,标题字段
的格式跑掉了,另一个是图片黄色部份,在不同月份之间会有空行存在。
三、编写删除空白行的程式码,意思是找出A栏中,储存格特殊状态为空白的对象物件,
然后执行删除整行的方法。这一行程式码为惯常用法,看起来有点复杂,但一经拆解,其
实在架构上仍然是“物件.方法”的标准VBA语法。
四、执行“DeleteRows”宏程式,结果如图所示,原本黄色部份的空行、包括一部份绿
色A栏为空格,整行都被删除了,不过仍然有多余的标题栏存在。
五、不同版本的Excel最大行数也不同,以作者2013年的Office而言,在任一工作表,按
住“Ctrl”键再按方向键“下”,直接跳到最后一行,如图所示为“1048576”,这便是
目前Excel最大行数。如果想要针对整张工作表作整理,例如删除含某特定内容储存格所
在的行,首先必须先知道最大行数。
六、编写程式如图所示,设置以i为变量的循环,从“1048576”到“2”,“Step -1”表
示为递减顺序,保留第一行,是因为第一行应当为标题栏。在循环里设计储存格内容的判
断式,满足条件时删除第i行(Rows(i).Delete)。
七、执行结果如同预期,成功将其他多余的资料都删除了,只保留汇率的部份,截图是每
个月显示三天,其余隐藏,另外也手工修改了标题栏。
这一节介绍两种方法删除资料,其一是删除空行,其二是删除特定内容的整行。依照范例
程式码,必须两个方法的宏都执行过,才能预期的效果。其实如果理解了删除特定内容
的程式码精髓,在程式设上可以很灵活,设计出一次到位的程序,扩大而言,视不同网页
的结构状况,以类似程式设计,都可以在下载资料的同时,把多余不必要的内容删除掉。
在本书后面的章节,会再针对其他网页分享如何整理所取得的资料。
延伸阅读:
VBA如何依照所选择年份币别设定网址
https://www.b88104069.com/archives/4371
VBA如何批次取得网页资料
https://www.b88104069.com/archives/4366
VBA如何取得网页资料时自动整理格式
https://www.b88104069.com/archives/4362

Links booklink

Contact Us: admin [ a t ] ucptt.com