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