文章目录
一、单元格对象二、获取单元格对象和选中单元格2.1. 选中单个单元格2.2. 选中连续的单元格2.3. 选中多个不连续的单元格2.4. 选中行2.5. 选中列2.6. 选中已使用单元格间的连续区域2.7. 单元格附近的连续区域2.8. 多个单元格间的交集区域2.9. 定位单元格2.10. 指定列中最后一个有内容的单元格一、单元格对象
单元格对象(Range)用来操作和控制工作表中的单元格,使用单元格对象可以设置单元格的格式、单元格的信
息,单元格的内容,选取单元格等,本文列举些常见的用法,最好动手试验一下,要记住灵活运用
二、获取单元格对象和选中单元格
2.1. 选中单个单元格
第一种方式,通过Range(列名 + 行号).Select
选中单元格:
Public Sub main()Dim rng As RangeSet rng = Range("A1")rng.SelectEnd Sub
第二种方式,通过Cells(行号, 列名).Select
选中单元格:
Public Sub main()Dim rng As RangeSet rng = Cells(1, "A")rng.SelectEnd Sub
2.2. 选中连续的单元格
1. 定位左上角和右下角,选中之间所有单元格
第一种方式,Range(左上角列名 + 左上角行号 : 右下角列名 + 右下角行号)
:
Public Sub main()Dim rng As Range'选中从A1到C10的所有单元格Set rng = Range("A1:C10")rng.SelectEnd Sub
第二种方式,Range(Cells(左上角行号,左上角列号), Cells(右下角行号,右下角列号))
:
Public Sub main()Dim rng As Range'选中从第一行第一列到第五行第六列的所有单元格Set rng = Range(Cells(1, 1), Cells(5, 6))rng.SelectEnd Sub
2. 以基准单元格位置为基础偏移选中
先找到一个用来做基准的单元格,再利用基准单元格对象的Offset(偏移行数, 偏移列数)
函数来进行位置偏移
Public Sub main()Dim rng As RangeSet rng = Range("A1:B10")'最终会选中D3到E12的所有单元格rng.Offset(2, 3).SelectEnd Sub
3. 以基准单元格位置为基础指定选中的行数和列数
先找到一个用来做基准的单元格,再使用单元格对象的Resize(选中行数, 选中列数)
Public Sub main()Dim rng As RangeSet rng = Range("A1")'以A1单元格为基础,向右选中五行三列,最终会选中A1到C5的所有单元格rng.Resize(5, 3).SelectEnd Sub
2.3. 选中多个不连续的单元格
第一种方式:
Public Sub main()Dim rng As RangeSet rng = Range("A1,C1:F4,A7")rng.SelectEnd Sub
第二种方式:
Public Sub main()Dim rng As RangeSet rng = Union(Range("A1"), Range("C1:F5"), Range("A7"))rng.SelectEnd Sub
2.4. 选中行
1. 选中单行
选中单行:通过Rows(行号)
来选中指定行
Public Sub main()Dim rng As RangeSet rng = Rows(1)rng.SelectEnd Sub
2. 选中连续行
Public Sub main()Dim rng As RangeSet rng = Rows("1:10")rng.SelectEnd Sub
3. 选中多个不连续的行
Public Sub main()Dim rng As RangeSet rng = Range("1:3,5:7")rng.SelectEnd Sub
4. 选中单元格所在的行
Public Sub main()Dim rng As RangeSet rng = Range("C4:C5").EntireRowrng.SelectEnd Sub
2.5. 选中列
1. 选中单列
Public Sub main()Dim rng As RangeSet rng = Columns(1)rng.SelectEnd Sub
2. 选中连续列
Public Sub main()Dim rng As RangeSet rng = Columns("A:D")rng.SelectEnd Sub
3. 选中多个不连续的列
Public Sub main()Dim rng As RangeSet rng = Range("A:B,D:E")rng.SelectEnd Sub
4. 选中单元格所在的列
Public Sub main()Dim rng As RangeSet rng = Range("B1:C6").EntireColumnrng.SelectEnd Sub
2.6. 选中已使用单元格间的连续区域
Public Sub main()Dim rng As RangeSet rng = Sheets(1).UsedRangerng.SelectEnd Sub
2.7. 单元格附近的连续区域
以基准单元格为中心点,在其上下、左右、左上、左下、右上、右下被使用的单元格都会被选中,然后以被选中的
单元格为基准,继续寻找每个选中单元格的上下、左右、左上、左下、右上、右下被使用的单元格,反复循环,直到
找不到被使用的单元格,最后以所选单元格的左上角和右下角为端点,将这一片区域全部选中
如上图,基准单元格为 C7,它附近被使用的单元格有 C6、C8、B7、D7,所以这四个单元格会被选中,又因为 B6
与 B7 相邻,D8 与 D7 相邻,所以 B6 和 D8 也会被选中,最后以 B6 和 D8 为端点,选中所有区域
上图的代码为:
Public Sub main()Dim rng As RangeSet rng = Range("C7").CurrentRegionrng.SelectEnd Sub
2.8. 多个单元格间的交集区域
Public Sub main()Dim rng As RangeSet rng = Application.Intersect(Columns("b:c"), Rows("3:5"))rng.SelectEnd Sub
2.9. 定位单元格
在工作表中,我们可以用Ctrl + G
调出定位窗口,然后设置定位条件来查找并选中单元格,如下图:
在 vba 中也提供了同样的功能来查找单元格,并获取单元格对象,语法为:单元格对象.SpecialCells(Type, Value)
SpecialCells
函数的参数其实就是为了对应上图中的选项,列举常用参数如下:
SpecialCells
函数找不到匹配的单元格时会直接报错,如下图,所以实际使用时有必要考虑是否要使用On Error Resume Next
来跳过错误,On Error Resume Next
在其他系列文章里有介绍:
示例代码,定位 A1 到 A3 之间,设置了单元格格式为数字的单元格:
Public Sub main()On Error Resume NextDim rng As RangeSet rng = Range("A1:A3").SpecialCells(xlCellTypeFormulas, xlNumbers)rng.SelectOn Error GoTo 0End Sub
2.10. 指定列中最后一个有内容的单元格
Public Sub main()Dim rng As Range'找到E列最后一行有内容的单元格Set rng = Range("E65536").End(xlUp)rng.SelectEnd Sub