在VBA中,可以使用for循环,也可以使用For Each进行循环。
循环在VBA中,可以方便的获取EXCEL中的行列数据,甚至是指定的行列数据。
但是,很多人只知道或常用FOR自增的循环,却未知FOR循环中的递减循环,却是如此的玄妙。
今天,本人遇到一个使用VBA删除动态行的问题,老是解决不了,忽然灵光一现,想起了使用FOR递减循环的方式删除,终于得以将问题解决。
下面,俺就将for循环中的递减循环是如何动态删除行代码,拿出来与大家分享。
下面我们先看for递减循环的语句:
for i=Max to Min step -Boot
'这里是你的代码
next
上述是for递减循环的语法。其中Max表示大值;Min表示小值。也就是说,for循环中的变量,是从大值Max逐渐变到小值Min的。在变化的过程中,每变一次,i变量的值减小多少,这个是由Boot步长来决定的。可以设置为1,也可以是2,也可以是3…一切由我们来决定。
①示例代码一
for i=8 to 0 step -2
MsgBox i
next
以上的i值,从8变到0,每变一次,i减少2。这就相当于:
第一步:i=8
第二步:i=6
第三步:i=4
第四步:i=2
第五步:i=0
以上的递减循环,其实只执行了五次,即五步。
②使用for递减循环删除行
比如,您的Excel表中,1到9行的是固定的,不允许你删除;而表格的最后两行,也是固定的,不能删除的。现在的问题是从10行到倒数第三行,这个范围,行数是变化的,不知道啥时候有多少行,现在,叫你删除这些动态行,你该如何删除呢?
如上问题的for递减循环删除动态行代码如下:
For m = Sheet1.UsedRange.Rows.Count-2 To 10 Step -1 '删除多余数据
Sheet1.Rows(m).Delete
Next m
上述可能太抽象了点,下面,本人给出一个更简单的。比如,叫你使用VBA删除4到8行,这样,就相当于让你使用VBA删除第4、第5、第6、第7、第8行。如何删除呢?代码如下:
For k = 8 To 4 Step -1 '删除多余数据
Sheet1.Rows(k).Delete
Next k