Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 10023|回复: 4

[已解决]遍历区域内所有单元格

[复制链接]
发表于 2017-2-14 22:10 | 显示全部楼层 |阅读模式
为什么当rng = Range("A1:C12")时,使用For Each cel In rng.Columns(1)后cel的地址是$A$1:$A$12,不能遍历第一列所有单元格,而当rng = Range("A1:A12")时,使用For Each cel In rng却可以遍历所有单元格

最佳答案
2017-2-17 09:48
不二周助 发表于 2017-2-16 21:13
看了您的回复自己想了一下想明白了,遍历第一列的所有单元格可以用For Each cel In rng.Columns(1).Cells, ...

Sub test1()
    Dim rng As Range
    Set rng = Range("A1:C5")
    Call test2(rng.Rows)
    Call test2(rng.Columns)
    Call test2(rng.Columns(1))
    Call test2(rng.Columns(1).Cells)
End Sub

Sub test2(temp As Range)
    Dim cel As Range
    Debug.Print "-------------------"
    For Each cel In temp
        Debug.Print cel.Address(0, 0)
    Next
End Sub


最右是什么对象的集合,循环变量就是什么对象。

发表于 2017-2-15 09:20 | 显示全部楼层
Sub test()
    Dim rng As Range, cel As Range
    Set rng = Range("A1:C12")

    '情况1
    Debug.Print "集合是rng里的所有列,遍历每1列"
    For Each cel In rng.Columns
        Debug.Print cel.Address(0, 0)
    Next

    '情况2
    Debug.Print "集合是rng里的所有行,遍历每1行"
    For Each cel In rng.Rows
        Debug.Print cel.Address(0, 0)
    Next

    '情况3
    Debug.Print "集合是rng里的第1列,遍历每1列"
    For Each cel In rng.Rows.Columns(1)
        Debug.Print cel.Address(0, 0)
    Next
End Sub

回复

使用道具 举报

发表于 2017-2-15 09:27 | 显示全部楼层
集合是rng里的所有列,遍历每1列
A1:A12
B1:B12
C1:C12
集合是rng里的所有行,遍历每1行
A1:C1
A2:C2
A3:C3
A4:C4
A5:C5
A6:C6
A7:C7
A8:C8
A9:C9
A10:C10
A11:C11
A12:C12
集合是rng里的第1列,遍历每1列
A1:A12






for each 循环变量 in 集合
  循环体
next  循环变量
对于情况3,集合也是列的集合,并且该集合中只有1列(即第1列)。
在情况3的集合中进行循环,只会执行1次循环。


回复

使用道具 举报

 楼主| 发表于 2017-2-16 21:13 | 显示全部楼层
看了您的回复自己想了一下想明白了,遍历第一列的所有单元格可以用For Each cel In rng.Columns(1).Cells,谢谢~
回复

使用道具 举报

发表于 2017-2-17 09:48 | 显示全部楼层    本楼为最佳答案   
不二周助 发表于 2017-2-16 21:13
看了您的回复自己想了一下想明白了,遍历第一列的所有单元格可以用For Each cel In rng.Columns(1).Cells, ...

Sub test1()
    Dim rng As Range
    Set rng = Range("A1:C5")
    Call test2(rng.Rows)
    Call test2(rng.Columns)
    Call test2(rng.Columns(1))
    Call test2(rng.Columns(1).Cells)
End Sub

Sub test2(temp As Range)
    Dim cel As Range
    Debug.Print "-------------------"
    For Each cel In temp
        Debug.Print cel.Address(0, 0)
    Next
End Sub


最右是什么对象的集合,循环变量就是什么对象。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 12:56 , Processed in 0.237757 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表