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