为什么 For Each over Range.Columns(1) 不迭代单元格?

Lon*_*Rob 3 excel vba

如果范围是由地址指定的,我可以迭代一系列单元格以分别对每个单元格进行操作:

Dim cell as Range
For Each cell In Range("A1:A10")
  debug.print cell.Address
Next cell
Run Code Online (Sandbox Code Playgroud)

产生预期的输出:

$A$1
$A$2
... etc
Run Code Online (Sandbox Code Playgroud)

但是,当我从范围集合中指定一列时Columns,迭代仅对整个列运行一次:

For Each cell In UsedRange.Columns(1)
    Debug.Print cell.Address
Next cell
Run Code Online (Sandbox Code Playgroud)

仅产生一个输出,包含整列:

$A$1:$A$20
Run Code Online (Sandbox Code Playgroud)

不是UsedRange.Columns(1)一个Range物体吗?如果不是的话,那是什么??

我已经阅读了关于行/列作为范围的讨论以及Range vs Range.Cells 的讨论,但我仍然可以弄清楚如何迭代UsedRange.Columns(1).

Gar*_*ent 5

这是因为 aColumn本身就是一个不同的对象。如果循环遍历列,则一次循环一列。循环遍历列中的单元格:

Dim cell as Range
For Each cell In UsedRange.Columns(1).Cells
  debug.print cell.Address
Next cell
Run Code Online (Sandbox Code Playgroud)

  • @LondonRob实际上你**正在**迭代列,但迭代仅在一列上!…………这很令人困惑……我也问过同样的问题几年前问自己........................................ (3认同)