第一章 入门篇
1.10 END语句通常用法
上一节我们讲了END语句的基本用法,但在日常写VBA程序时,我们通常不那么写,为什么呢?
平时应用END语句定义边界时,由于表内可能存在空格,如果用xlDown、xlToRight来定义数据区域的下边界和右边界,系统定义到空格时就停止了,造成定义不准确。
科目 | 语文 | 数学 | 美术 | 体育 | |
A同学 | 86 | 50 | 58 | 46 | |
B同学 | 50 | 100 | 65 | 57 | 48 |
C同学 | 99 | 30 | 50 | 72 | 34 |
44 | 47 | 91 | 88 | ||
E同学 | 94 | 55 | 33 | 38 | 67 |
F同学 | 28 | 76 | 32 | 73 | 66 |
比如上图,以“a1”单元格为基准单元格,用xlDown定义下边界,系统判断到“C同学”单元格就停止了,所以Range('a1').End(xlDown).Row返回的是4;用xlToRight定义右边界,系统判断到“数学”单元格就停止了,所以Range('a1').End(xlToRight).Column返回的是3。这样执行程序就会有错误的结果。
那我们应该怎么写来定义数据的边界呢?别着急,先让我们来看看row和rows的区别。
row返回单元格所在行的行号,如果是区域,就返回这个区域的首行的行号。
例如Range('c5').Row 返回'c5'单元格所在行的行号5
rows代表行的集合,返回range对象。
Rows.Select 选择所有行
Rows('1:10').Select 选择1-10行
写VBA程序时,我们通常会用到rows.count与columns.count:
rows.count 获取最大行号
columns.count 获取最大列号
一般应用时,定义下边界,会用rows.count,先到表格的最下边界,也就是表格能容许的最大行号,再用xlUp向上找到数据区域的最下面一行,以此来定义数据区域的下边界;定义右边界,会用columns.count,先到表格的最右边界,也就是表格能容许的最大列数,再用xlToLeft向左找到数据区域的最右面一列,以此来定义数据区域的右边界。
上节的END语句程序可以修改成这样:
Sub END语句2()
h = Cells(Rows.Count, 1).End(xlUp).Row
l = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To h
For n = 2 To l
If Cells(i, n) < 60 Then
Cells(i, n).Interior.ColorIndex = 3
End If
Next
Next
End Sub
这样修改以后,程序执行出错的机率就小多了。当然,如果你能确保要处理的表格里没有空格,直接用上节那个简单的程序就足够了。
联系客服