首頁ExcelVBA

VBA如何批次删除空白列




稍具规模的公司,应该都已经导入ERP系统,会计人例行工作所需要的数据,全都由系统捞报表出来。系统报表会有个问题,预设格式是准备打印使用的,可能有许多空行,但往往,我们所需要的只是明细数据,那些空行非但达不到打印美观的效果,反而是造成处理上的不方便。因此实务上,每下一次系统报表,必须得再删一次空行,每次这样「再来一次」也是挺烦的,在此介绍如何以VBA批次删除空行:

一、系统跑出来的应付帐款明细,有小计加总的空行、也有翻页保留的空行,这样的报表并不方便操作Excel。

系统跑出来的应付帐款明细

二、组合键「Alt+F11」快速进入VBA,输入如下程序,白话翻译每句代码:选取「系统报表」工作表的使用范围,对于所选取范围的单元格格式,背景填满黄色。

组合键「Alt+F11」快速进入VBA

三、组合键「Alt+F8」快速叫出宏,「执行」、「使用范围标黄色」。

组合键「Alt+F8」快速叫出宏

四、结果如图所示,这样应该很容易理解「UsedRange」的意思。

这样应该很容易理解「UsedRange」的意思

五、输入第二段程序,白话翻译每句代码:定义一个整数值的变量「r」,计算出目前工作表使用范围的总列数,把这个等同于「r」,然后在单元格「I1」呈现出「r」值。

定义一个整数值的变量「r」

六、再度组合键「Alt+F8」快速叫出宏,「执行」刚才的新增程序「使用范围列数」。

再度组合键「Alt+F8」快速叫出宏

七、果真于「I1」出现了「16」,有兴趣可以数看看标黄色是否真的是16列,或者因为数据第一列开始,直接看最左边的列数栏即可。

有兴趣可以数看看标黄色是否真的是16列

八、输入第三段程序,白话翻译每句代码:变量「i」以降序方式从16列到1列,如果第「1」栏第「i」是空白(””),那么删除此「i」列,结束「If」,回去跑下一个「i」循环,结束程序。

变量「i」以降序方式从16列到1列

九、再度呼叫宏:「开发人员」、「宏」,可以看到目前有三组程序宏了,「执行」刚才的新增程序「删除空白列」。

「开发人员」、「宏」

十、结果很漂亮,一点也不马虎!

已删除空白列

关于这篇文章的程序代码,有些需要补充的。第一段的「Worksheets(”系统报表”)」,是指定某个确定的工作表语法,也就是直接将工作表页签写上,但是到了第二段,写法是:「ActiveSheet」,表示是目前操作中的工作表,两种语法都正确,但是用法不同,以会计实务来说,显然「ActiveSheet」是比较方便的。第二段还有个「Dim r As Integer」,这是指定变量的类型,和正负几位小数相比,整数所占空间当然小了许多,所以虽然这里不指定也不会造成错误,但还是应该要养成定义适当变量类型的习惯。第三段之所以选择降序方式,有删除一整行的读者,应该都知道Exel会往上递补,个中玄机便在于此。

摸熟了这篇文章,应能体会如果只是要删除空行,毋须这么复杂,这里特地写了三段程序,是想利用此范例顺带介绍VBA程序代码的优质写法,留待下节分享。


有系統、全面性的學習Excel職場應用,:會計人的Excel小教室PressPlay頻道


當前文章分類:
VBA