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

Excel 为什么For-Each-over-Range.Columns(1)不在单元格上迭代?,excel,vba,Excel,Vba,如果地址指定了范围,我可以遍历一系列单元格,对每个单元格分别进行操作: Dim cell as Range For Each cell In Range("A1:A10") debug.print cell.Address Next cell 生成预期输出: $A$1 $A$2 ... etc 但当我从范围的Columns集合中指定一列时,迭代只对整个列运行一次: For Each cell In UsedRange.Columns(1) Debug.Print cell.Add

如果地址指定了范围,我可以遍历一系列单元格,对每个单元格分别进行操作:

Dim cell as Range
For Each cell In Range("A1:A10")
  debug.print cell.Address
Next cell
生成预期输出:

$A$1
$A$2
... etc
但当我从范围的
Columns
集合中指定一列时,迭代只对整个列运行一次:

For Each cell In UsedRange.Columns(1)
    Debug.Print cell.Address
Next cell
$A$1:$A$20
仅生成一个输出,包含整个列:

For Each cell In UsedRange.Columns(1)
    Debug.Print cell.Address
Next cell
$A$1:$A$20
UsedRange.Columns(1)
不是
范围
对象吗?如果不是,是什么


我已经读过了,但是我仍然能够计算出如何迭代
UsedRange.Columns(1)

中的每个单元格,这是因为
列本身就是一个不同的对象。如果在列上循环,则每次循环一列。要在列中的单元格上循环,请执行以下操作:

Dim cell as Range
For Each cell In UsedRange.Columns(1).Cells
  debug.print cell.Address
Next cell

为ActiveSheet.Columns(1)中的每个单元格循环整个列,所以我想这是UsedRange工作方式的错误。我必须对此进行更多的研究。@ChristoferWeber在
ActiveSheet.Columns(1)
上迭代时遇到了与我描述的完全相同的问题。您得到一个地址为“$A:$A”的迭代,而不是为列中的每个单元格进行多次迭代。这与
UsedRange
无关。奇怪的是,我在循环中使用了
cell.Value=1
,它用1填充了整个列。但是当尝试使用UsedRange.Columns(1)单元格时,我只得到
A1
UsedRange.Columns(1)不是范围对象吗?如果不是,是什么??-它是一个范围对象,但却是一个特殊的对象
For Each
迭代集合的所有元素。如果您检查正常
Count
属性的
A$1:$A$20
-它是20,但是如果您使用列(i)创建相同的
范围
,则
计数
是1。我不知道任何其他属性来区分正常范围和行/列范围。这是一个很好的答案,但请注意,我不是在
列上迭代,而是在
列(1)
上迭代。我想说,这还需要进一步解释。这与以下事实有关:
Columns(1)
并不像我认为的那样做。@LondonRob实际上你是在列上迭代,但迭代只在一列上进行。。。。。。。。。。。。。。。。。。。。。。。。。。这很令人困惑…………几年前我自己也问过同样的问题。。。。。。。。。。。。。。。。。。。。。。。。。