Range.Item和Range.Cells之间的区别是什么?

时间:2014-09-16 22:50:19

标签: excel excel-vba vba

例如,在下面的代码中,ItemCells可以互换使用:

Dim rRange As Range
Set rRange = ThisWorkbook.ActiveSheet.Range("A1")

With rRange
    Debug.Print .Item(1, 1).Value   ' Outputs value of "A1"
    Debug.Print .Cells(1, 1).Value  ' Outputs value of "A1"

    Debug.Print .Item(2, 1).Value   ' Outputs value of "A2"
    Debug.Print .Cells(2, 1).Value  ' Outputs value of "A2"
End With

在开发人员参考中,它们被定义为:

Range.Item Property (Excel)

  

返回一个Range对象,该对象表示偏移量的范围   指定范围。

Range.Cells Property (Excel)

  

返回一个Range对象,该对象表示指定范围内的单元格。

     

说明

     

因为Item属性是Range对象的默认属性,所以可以在Cells关键字之后立即指定行和列索引。

从那句话来看,这是否意味着Cells(1, 1)实际上是Cells.Item(1, 1)的缩写?因此Cells(1, 1)实际上相当于Item(1, 1)?我错过了什么?

2 个答案:

答案 0 :(得分:6)

理解这一点的最佳方法是通过以下示例

对于范围使用.Item.Cells时,是,它们是相同的。例如

Sub Sample()
    Dim rRange As Range
    Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10")

    With rRange
        Debug.Print .Item(1, 3).Address '<~~ $D$1
        Debug.Print .Cells(1, 3).Address '<~~ $D$1
    End With
End Sub

在上文中,它们都描述了Range

中单元格的地址

Cells()独立于范围使用时,它们是不同的。

Sub Sample()
    Dim rRange As Range
    Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10")

    With rRange
        Debug.Print .Item(1, 3).Address  '<~~ $D$1
        '~~> DOT before Cells missing
        Debug.Print Cells(1, 3).Address  '<~~ $C$1
    End With
End Sub

上面的.Item描述了Range中单元格的地址,其中Cells描述了ActiveSheet

中单元格的地址

答案 1 :(得分:-1)

除了用于引用工作表中的所有单元格之外,我看不到使用Cells属性。 我会这样说,(基于我的实验和研究):

Cells属性返回一个Range对象,其中包含应用它的Object的所有单元格。 对于工作表的情况,它显然是有用的,以便能够在整个工作表上使用范围对象的所有属性。 对于Range对象的情况,我不确定它是否有任何用处。例如,在没有首先将单元格属性应用于该范围对象的情况下,我找不到任何我无法从范围对象的属性中获取的额外属性

我想知道多年来它在代码中的一些用法是否只是“ crept in ”。例如,我相信这种类型的代码行是使用Range Object Item属性引用工作表中第二个单元格的Range对象的一种可能的显式方法 Ws.Range(“A1”)。Areas.Item(1).Item(1,2) 根据所说的感觉,我可以依赖于Item的第一个Area和Default Property隐含的隐含来重写该代码行: Ws.Range(“A1”)(1,2)

如果我放入细胞属性,我没有伤害 Ws.Range(“A1”)。单元格(1,2)

但我会建议: _(i)在这里使用细胞是完全多余的 _(ii)我仍然在这里使用Range Item Property。 _(iii)没有单元格项属性 _(iv)像这样的单元格(1,2)具有“ crept in ”作为所谓的“ Cells属性,它将接受一个或两个参数.. ......“......和/或......”单元格有一个Item属性.. 。“......等...... ,.我认为这些陈述可能不正确。  我认为Cells属性没有争论。 (我不太确定Cell是否有项目属性。我不是计算专业人员,但是专家告诉我提供它的intellisense,或Microsoft帮助表明它不能保证它存在。我希望没有Cell Item属性)

在所有情况下,像这样的代码部分,单元格(1,2),解释如下:  单元格返回一个Range对象。该Range对象具有默认属性,应用了Range Object Item属性。除非我独立使用Cell到Range,否则我应该省略它。 我建议这样做,在这种情况下,我不是明确的。相反,我正在贡献一个可能是错误的想法,我可以通过_引用一个范围对象。 _ ..“ Cells(_argument / s_)类型”属性,......可能不存在。

艾伦