1 单元格区域.
EntireRow返回该区域所在的整行对象单元格区域.
EntireColumn返回该区域所在的整列
'返回单元格所在的整行与整列,返回单元格对象
'EntireRow 与EntireColumn
Sub 整行与整列()
' Range("a1").EntireColumn = 0
Range("a1").EntireRow.Select
End Sub
2 单元格区域.Select方法,选中某区域。多见于演示
3 动态定位单元格对象区域(一)
单元格.End :
End属性返回单元格区域的边界单元格,从起始单元格出发可以分别向上下左右四个方向进行边界定位。
推荐使用End(xlup)向上,End(xldown)向下,End(xltoleft)向左,End(xltoright)向右这些参数而不要用1,2,3,4这些数字。
使用End定位边界时,往往倒着找的道理。
'单元格的边界定位属性
'End 属性的四个方向,从某一位置单元格出发,向四个方向寻找边界, 返回的是一个边界单元格对象
'从A1 出发向下寻找最后的边界单元格
'End 面临的问题 有空记录定位错误的问题
'倒着找,从最后一行向上倒着找,找到第一个有数据的单元格,一定是包含数据的最后一个边界单元格
Sub End演示1()
Debug.Print Range("a1").End(xlDown).Row
End Sub
Sub End演示2()
Debug.Print Range("a" & Rows.Count).End(xlUp).Row
End Sub
'End 一些不良用法:
'Range(“a65536”).end(3).row '有两点不好的传承
'65536 是Excel2003 或以前的行数限制,一旦你的数据超过65536行,边界定位代码就是错误的
'1048576 和65536 犯了同样的错误,如果你的代码移植到2003 或以前的Excel 上就会出问题
'Rows.Count 动态获取最后的行
'xlup 通俗易懂,非要写成3 造成程序的可读性下降。
'xltoleft,xltoright,xlup,xldown
4 动态定位单元格区域(二)
返回单元格所在的连续单元格区域:CurrentRegion属性
·相当于Excel中选定某单元格按ctrl+a的效果,返回一片连续的单元格区域对象·该区域的所有行数单元格.
CurrentRegion.rows.count ---- 这个是经常用到的
'CurrentRegion 属性返回单元格所在的连续区域的对象
'是我们在实际应用中,使用最多的动态定位单元格对象的属性
Sub test()
Dim area As Range
Set area = Range("a1").CurrentRegion
Debug.Print area.Address(0, 0)
Debug.Print area.Rows.Count
Debug.Print area.Columns.Count
End Sub
Sub test1()
Dim i As Long
For i = 2 To Range("a2").CurrentRegion.Rows.Count
[k2] = [k2] + Cells(i, "h")
Next
End Sub
CurrentRegion是我们最常用的动态取单元格区域的方式
·可以简易取到连续单元格区域而不用去考虑某列的空缺,边界单元格获取列等等
·是转换为二维数组来大幅提高程序运行效率的最佳方式
·如果数据表中有空行或者空列,CurrentRegion则无法取到完整的数据区域
5 动态定位单元格区域(三)
UsedRange属性:
·这个属性不是单元格的属性,是工作表的属性。返回工作表中所有数据的区域,如果这些区域不是连续的,这个属性得到的是包含空白的区域将各个数据区域连接起来的结果区域。
如果表格中只有一块数据连续区域存在则与使用urrentregion返回的区域相同。
·并不常用,也并不好用。因为大量空白连接的连续区域并不适合处理,但是有些特殊情况也有用武之地。
·可以通过单元格直接引用(小技巧):单元.parent.UsedRange
Parent 属性返回当前对象从属的对象。Parents是父母的意思,我们也可以理解这个单元格的父母是工作表。虽然不符合面向对象的继承的概念,不过反正VBA也不支持继承。
Sub UsedRange属性()
Dim area As Range
' Set area = Sheet1.UsedRange '是Sheet1 这个工作表的属性
' parent 一个单元格的parent 属性返回该单元格所在的工作表
Set area = Range("a1").Parent.UsedRange
Debug.Print area.Address(0, 0)
area.Select
End Sub