VBA Range的遍历
统一的遍历方式Cells
无论Range属于哪种类型,都可以通过Cells属性获取所有单元格集合,其每个元素是一个单元格。
Sub sub8_0()
Dim ws As Worksheet
Set ws = Workbooks.Item("小步教程1.xlsx").Worksheets.Item("Sheet1")
Dim r As Range
'获取 C3:E5区域
Set r = ws.Range("C3:E5")
For Each cellItem In r.Cells
Debug.Print "address:" & cellItem.Address & ",values:" & cellItem.Value
Next
End Sub
输出结果:
address:$C$3,values:202361033001
address:$D$3,values:男
address:$E$3,values:82
address:$C$4,values:202361033002
address:$D$4,values:女
address:$E$4,values:89
address:$C$5,values:202361033003
address:$D$5,values:男
address:$E$5,values:82
当Range类型不同时,还可以有其它的遍历方式。
Range类型列表
区域的类型 | Cell写法 | 说明 |
---|---|---|
一个单元格 | Range("B2") | 获取 B2单元格 |
基本区域 | Range("C3:D5") | 获取 C3:D5区域 |
多列 | Range("A:C") | 获取 A:C 三列 |
多行 | Range("3:5") | 获取3:5 三行 |
区域的集合 | Range("B3,C3:D5,8:9") | 各区域用逗号隔开。 获取 B3单元格 + C3:D5 +8:9行 |
第1种类型:一个单元格
直接通过Value属性访问值,无需遍历。
第2种类型:基本区域
矩形的多个单元格区域。
Sub sub8_1()
Dim ws As Worksheet
Set ws = Workbooks.Item("小步教程1.xlsx").Worksheets.Item("Sheet1")
Dim r As Range
'获取 C3:E5区域
Set r = ws.Range("C3:E5")
For i = 1 To r.Rows.Count
For j = 1 To r.Columns.Count
Debug.Print r.Cells(i, j).Value
Next
Next
End Sub
输出结果:
依次打印C3:E5各个单元格的数据。
第3种类型:区域的集合
区域集合型Range含有Areas属性,每一个元素还是Range类型,表示基础区域。
通过Areas属性可以进一步完成遍历。
Sub sub8_2()
Dim ws As Worksheet
Set ws = Workbooks.Item("小步教程1.xlsx").Worksheets.Item("Sheet1")
Dim r As Range
Dim areaItem As Range
'获取 B3单元格 + C3:D5 +8:9行
Set r = ws.Range("B3,C3:D5,8:9")
For Each areaItem In r.Areas
Debug.Print areaItem.Address '打印Area的地址
Next
End Sub
输出结果:
$B$3
$C$3:$D$5
$8:$9