首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Excel range.Rows属性的真正用途是什么?

Excel range.Rows属性的真正用途是什么?
EN

Stack Overflow用户
提问于 2009-06-24 13:54:25
回答 8查看 155.6K关注 0票数 60

好了,我正在完成一个遗留的Excel-VBA应用程序的附加项目,我又一次遇到了神秘的range.Rows (?)和worksheet.Rows属性。

有没有人知道这些属性到底是做什么的,它们应该提供给我什么?(注意:所有这些可能也适用于相应的*.Columns属性)。

我真正希望能够使用它的是返回一系列行,如下所示:

代码语言:javascript
复制
   SET rng = wks.Rows(iStartRow, iEndRow)

但我从来没能让它做到这一点,即使Intellisense显示了两个参数。相反,我必须使用另外两到三种(非常笨拙)技术中的一种。

该帮助非常无用(对于Office VBA通常如此),而且无论我添加多少其他术语,搜索“行”也没有多大用处。

我能用它做的唯一事情是: 1)返回单行作为一个范围( rng.Rows(i) );2)返回一个范围( rng.Rows.Count )中的行数。是这样吗?它真的没有其他的好处吗?

Clarification:我知道它返回一个范围,还有其他方法可以获得行的范围。我要问的是,我们从.Rows()得到了什么,而我们还没有从.Cells().Range()得到什么?我所知道的两件事是: 1)一种更简单的返回单行范围的方法;2)一种计算范围内行数的方法。

还有别的事吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-06-24 16:20:54

Range.RowsRange.Columns返回的范围基本上相同,只是新的范围有一个标志,该标志表示行或列。这对于Range.Count和Range.Hidden等Excel属性以及Range.AutoFit()等方法是必需的

  • Range.Rows.Count返回Range.
  • Range.Columns.Count中的行数返回Range.
  • Range.Rows.AutoFit()中的列数自适应Range.
  • Range.Columns.AutoFit()中的行自适应范围内的列。

您可能会发现Range.EntireRowRange.EntireColumn很有用,尽管它们仍然不是您想要的。对于表示的范围,它们返回EntireRow的所有可能列和EntireColumn的所有可能行。

我之所以知道这一点,是因为SpreadsheetGear for .NET附带了与.NET API非常相似的Excel。Excel附带了几个对IRange索引器的强类型重载,其中包括您可能希望SpreadsheetGear具有的一个:

  • IRange this[int row1, int column1, int row2, int column2];

免责声明:我拥有SpreadsheetGear有限公司

票数 53
EN

Stack Overflow用户

发布于 2009-06-24 14:06:22

您的两个示例是我使用过的唯一RowsColumns属性,但从理论上讲,您可以用它们做任何可以用Range对象做的事情。

这些属性的返回类型本身就是一个Range,因此您可以执行以下操作:

代码语言:javascript
复制
Dim myRange as Range
Set myRange = Sheet1.Range(Cells(2,2),Cells(8,8))
myRange.Rows(3).Select

它将选择myRange中的第三行(Sheet1中的单元格B4:H4 )。

更新:要做你想做的事情,你可以使用:

代码语言:javascript
复制
Dim interestingRows as Range
Set interestingRows = Sheet1.Range(startRow & ":" & endRow)

update #2:或者,从另一个范围中获取行的子集:

代码语言:javascript
复制
Dim someRange As Range
Dim interestingRows As Range

Set myRange = Sheet1.Range(Cells(2, 2), Cells(8, 8))

startRow = 3
endRow = 6

Set interestingRows = Range(myRange.Rows(startRow), myRange.Rows(endRow))
票数 7
EN

Stack Overflow用户

发布于 2014-03-07 05:45:33

由于.Rows结果被标记为由行组成,因此您可以"For Each“单独处理每一行,如下所示:

代码语言:javascript
复制
Function Attendance(rng As Range) As Long
Attendance = 0
For Each rRow In rng.Rows
    If WorksheetFunction.Sum(rRow) > 0 Then
        Attendance = Attendance + 1
    End If
Next
End Function

我使用它来检查人员列表(不同行)的几个类别(不同列)中的任何一个类别的出席情况。

(当然,您可以使用.Columns对范围中的列执行"For Each“。)

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

https://stackoverflow.com/questions/1038534

复制
相关文章

相似问题

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