范围()对单元格()对范围单元格()

我知道Range()Cells()属性是访问工作表上单元格的等效方法。但是,在这种组合中何时使用Range.Cells()是明智的

我遇到了一个例子,他们使用了Range(“A1”).Resize(2,3).cells.value
这是否等同于范围(“A1”)。调整大小(2,3)。值

如果没有,前者的优势是什么

从技术上讲,RangeRange.Cells是不等价的。有一个很小但很重要的区别

但是在您的特定情况下,您

  1. 范围(“某物”)构建范围,并
  2. 只对该范围的.Value感兴趣

这根本没什么区别


VB中有一个方便的子句,For Each,它枚举集合中的所有元素。在Excel对象模型中,有一些方便的属性,如单元格,它们返回各自单元格跨距的集合:列集合、行集合或单元格集合

从语言的流动方式来看,您自然会期望为某个范围内的每个c。Columns将枚举列,一次一列,而为某个范围内的每个r。Rows将枚举行,一次一行。事实上,他们正是这样做的。
但是您可以注意到,属性返回一个范围,而属性也返回一个范围。然而,前者的Range会告诉For Each它是一个“列的集合”,而后者的Range会自我介绍为一个“行的集合”

这是因为显然在Range类的每个实例中都有一个隐藏标志,它决定了Range的这个实例在中对于每个的行为

查询单元格关闭范围可确保获得范围的一个实例,该实例将每个枚举模式的设置为“单元格”。如果您不打算对每个开始的范围进行,那么这种差异对您没有影响

即使您确实关心每个模式的,在您的特定情况下,范围(“A1”).Resize(2,3)范围(“A1”).Resize(2,3)。单元格也是一样的,因为默认情况下范围是用“单元格”的枚举模式构建的,而调整大小不会更改其调整大小范围的枚举模式


所以我能想到的唯一一种情况是,从一个已经存在的范围中查询单元格会产生不同,就是当你有一个函数接受一个范围作为参数时,你不知道该范围是如何构造的,你想枚举该范围内的单个单元格,您要确保每个的单元格都将枚举,而不是行或列:

功能剂量测量(byval r作为范围)
调光范围
对于r中的每个c,我们不知道要列举什么
对于r.cells中的每个c,确保我们枚举的是单元格,而不是行或列(有时是单元格)
...
下一个
端函数

发表评论