简明Excel VBA
本文集同步于GitHub仓库:# bluetata/concise-excel-vba
5.1 Excel 基础操作
- Range相关
Range 属性的一些 A1 样式引用
Range("A1") ' 单元格 A1
Range("A1:B5") ' 从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16") ' 多块选定区域
Range("A:A") ' A 列
Range("1:1") ' 第一行
Range("A:C") ' 从 A 列到 C 列的区域
Range("1:5") ' 从第一行到第五行的区域
Range("1:1, 3:3, 8:8") ' 第 1、3 和 8 行
Range("A:A, C:C, F:F") ' A 、C 和 F 列
- 行列相关
行和列的引用
Rows(1) ' 第一行
Rows ' 工作表上所有的行
Columns(1) ' 第一列
Columns("A") ' 第一列
Columns ' 工作表上所有的列
Union(Rows(1), Rows(3), Rows(5)) ' 引用第1, 3, 5行
- 循环Selction区域的每一个单元格Cell
For Each rngDataCell In RngDataSelection
If Not rngDataCell.HasFormula And Not (Trim(rngDataCell.Value) = "") Then
...
End If
Next rngDataCell
- 选择当前工作表中的单元格
ActiveSheet.Cells(5, 4).Select
或:ActiveSheet.Range("D5").Select
- 选择同一工作簿中其它工作表上的单元格
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
' 也可以先激活该工作表,然后再选择:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
- 选择与当前单元格相关的单元格/偏离当前单元格(Offset)</br>
语法:Offset(D, R) 以当前为基础原点,向下D,且向右D移动,如果负数即为向反方向移动
即向上和向左移动。</br>
例如,要选择距当前单元格下面5行左侧4列的单元格
ActiveCell.Offset(5, -4).Select
- 选择一个指定的区域并扩展区域的大小
' 要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select
- 选择一个指定的区域,再偏离,然后扩展区域的大小
' 选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, Selection.Columns.Count + 1).Select
- 同时选择两个或多个指定区域</br>
注意:所选区域必须在同一工作表(sheet)中。
Set rngUnionSelection = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
- 选择两个或多个指定区域的交叉区域
注意:所选区域必须在同一工作表(sheet)中。
' 要选择名为“Test1”和“Test2”的两个区域的交叉区域
Application.Intersect(Range("Test1"), Range("Test2")).Select
- 利用End函数的相关操作
End(xldown):从被选中的单元格向下寻找,如果被选中单元格为空,则一直向下走到
第一个非空单元格;如果被选中单元格为非空,则向下走到最后一个非空单元格。</br>
End
函数的4个方向参数:xlUp, xlDown, xlToLeft, xlToRight。
' 选择连续数据列中的最后一个单元格
ActiveSheet.Range("a1").End(xlDown).Select
' 选择连续数据列底部的空单元格
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
' 获取连续数据最后一行的行号
Selection.end(xldown).Row
' 想选择连续数据最后面的空白行
Rows(Selection.End(xldown).Row + 1).Select
' 选择某列中连续数据单元格区域
ActiveSheet.Range("A1", ActiveSheet.Range("a1").End(xlDown)).Select
ActiveSheet.Range("A1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select
' 选择某列中非连续数据单元格区域
ActiveSheet.Range("A1", ActiveSheet.Range("a65536").End(xlUp)).Select
ActiveSheet.Range("A1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select
补充: 对于上述代码中非连续数据,也可以利用UsedRange.Rows.Count获取所有数据的条/行数。
Dim lngCountData As Long
lngCountData = ActiveSheet.UsedRange.Rows.Count