首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Range.Cells.Count vs Range.Count

Range.Cells.Count vs Range.Count
EN

Stack Overflow用户
提问于 2018-05-22 12:42:17
回答 3查看 13.3K关注 0票数 3

我已经改写了我原来的问题。

代码语言:javascript
运行
复制
Sub s()
  Dim r As Range
  Set r = ActiveSheet.Range("B2:D5")
  Debug.Print r.Rows.Count    'returns 4
  Debug.Print r.Columns.Count 'returns 3
  Debug.Print r.Cells.Count   'returns 12
  Debug.Print r.Count 'also returns 12
End Sub

在这个特定的场景中,r.Cells.Count和r.Count是相同的。我在很多出版物中都遇到过这种情况,如果没有指定,Cells就是缺省项。

我想知道是否有人读过微软的文档来说明这一点--到目前为止我还没有。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-22 15:51:11

你实际上并不知道你自以为知道的事情。:)

根据分配区域的方式,Range.Count可能返回行数或列数,而不是单元格的数量;Cells.Count将始终返回单元格的数量。要进行演示,请尝试执行以下操作:

代码语言:javascript
运行
复制
Sub foo()
    Dim rg As Range
    Set rg = ActiveSheet.Columns(1)
    MsgBox "Cells count is: " & rg.Cells.Count & vbLf & "Count is: " & rg.Count
End Sub
票数 6
EN

Stack Overflow用户

发布于 2018-05-22 16:05:03

在任何情况下,你都需要问自己--我需要什么?单元格数量?行的数量?列的数量?回答时,请使用适当的操作:

1)行:rng.Rows.Count

2)列:rng.Columns.Count

3)单元格:rng.Cells.Count

作为提示,对于Rows属性有一些注意事项。如果您想遍历各行并处理它们的各个单元格,那么您必须使用Cells属性。比方说,A1单元格包含值123,您想要检索它。

代码语言:javascript
运行
复制
Sub G()

    Dim rng As Range
    Dim firstRow As Range
    Dim firstCell As Range

    Set rng = [A1:F10]
    Set firstRow = rng.Rows(1)

    Set firstCell = firstRow(1)
    '// DOES NOT WORK: Type mismatch
    MsgBox firstCell.Value

    Set firstCell = firstRow.Cells(1)
    '// WORKS OK! Shows: 123
    MsgBox firstCell.Value

End Sub

更新

此外,在处理范围时(特别是在自动过滤的情况下):范围可以包含不连续的范围。不同的连续范围位于Areas属性中,因此您必须首先迭代区域,然后处理您的范围。

代码语言:javascript
运行
复制
Sub G2
    Dim rng As Range, rngArea As Range, cell As Range
    For Each rngArea In rng.Areas
        For Each cell in rngArea.Cells '//or just "rngArea"
            '// Process further
        Next
    Next
End Sub
票数 2
EN

Stack Overflow用户

发布于 2018-05-22 13:47:17

试试下面的代码,看看他们到底喜欢什么:

代码语言:javascript
运行
复制
Option Explicit
Sub s()
    Dim rng As Range, rng2 As Range, rng3 As Range

    Set rng = Range("B2:D5")
    Set rng2 = rng.cells
    Set rng3 = rng2.cells 'rng.cells.cells

    rng3.cells(1, 1).Select
    'rng2.cells(1, 1).Select
    'rng.cells(1, 1).Select

End Sub

底线是,rngrng.Cells都是引用同一组单元格的Range对象。现在,由于RangeCount方法,所以它们都有,显然它们返回的结果是完全相同的。不同之处在于,使用Range.Cells.Count可以访问Range对象的属性。

其他资源:

Range.Cells Property

Range.Count Property

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50459919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档