-->

什么是Excel的range.Rows属性真的?(What does the Excel range

2019-07-29 05:16发布

OK,我整理了一个传统的Excel的VBA应用程序的附加项目,我再一次跑起来对抗神秘的难题range.Rows (?)和worksheet.Rows性能。

有谁知道这些属性确实和他们是什么应该提供给我吗? (注:所有这一切都可能适用于相应的*.Columns性能也)。

我真的很希望能够使用它是返回行的范围,就像这样:

   SET rng = wks.Rows(iStartRow, iEndRow)

但我从来没有能够得到它做的是,虽然智能感知显示这两个参数。 相反,我必须使用两个或三个其他(很缺憾)技术之一。

帮助是非常无益的(通常所以办公室VBA),和google搜索“行”是不是非常有用的,无论有多少其他方面,我添加到它。

我已经能够使用它是1的唯一的东西)返回一个单列为一个范围( rng.Rows(i)和2)的范围(返回行数rng.Rows.Count )。 是不是这样? 难道真的没有别的,它的好处是什么?

澄清:我知道,它返回一个范围,并且还有其他方法来获得一定范围的行。 我所要求的具体是什么我们从得到.Rows()我们还没有从获得.Cells().Range() 两件事情,我知道是:1)返回一个范围内的单排的更简单的方法,和2)的方法来计算一个范围内的行数。

还有别的事吗?

Answer 1:

Range.RowsRange.Columns基本返回相同的范围除了一个事实,即新系列这表明它代表行或列的标志。 这是必要的Excel的一些性能如Range.Count和Range.Hidden并且对于一些方法,如Range.AutoFit()

  • Range.Rows.Count返回范围的行数。
  • Range.Columns.Count返回范围的列数。
  • Range.Rows.AutoFit() autofits范围中的行。
  • Range.Columns.AutoFit() autofits在范围列。

你可能会发现, Range.EntireRowRange.EntireColumn是有用的,但他们仍然是你正在寻找不完全的东西。 他们返回了所有可能的列EntireRow和所有可能的行为EntireColumn为代表的范围。

我知道这是因为的SpreadsheetGear的.NET附带了一个非常类似Excel的API的.NET的API。 该API的SpreadsheetGear带有几个强类型重载到IRange索引包括你可能希望Excel中有一项:

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

免责声明:我自己的SpreadsheetGear LLC



Answer 2:

Range.Rows,Range.Columns和Range.Cells是Excel.Range目的,根据所述VBA类型()函数:

  ?类型名(Selection.rows)  范围 
然而,这并不是故事的全部:那些返回对象扩展继承从Excel ::范围内的所有属性和方法的类型 - 但.Columns和.Rows有一个特殊的For ...每个迭代器,以及AREN特殊.count属性。 “T 不太一样父范围对象的迭代器和计数。

所以.Cells迭代和算作单细胞范围的集合,就像父范围的默认迭代器。

但.Columns被重复并计为垂直子范围,它们中的每一个单一的柱宽的集合;

......而.Rows迭代和算作水平子范围的集合,它们中的每一个单排高。

要了解这一点的最简单方法是通过一步这段代码,看有什么选择:

  公用分类测试() 
昏暗子范围为靶场 昏暗ParentRange由于范围
设置ParentRange = ActiveSheet.Range( “B2:E5”)

对于每个子范围在ParentRange.Cells SubRange.Select 下一个
对于每个子范围在ParentRange.Rows SubRange.Select 下一个
对于每个子范围在ParentRange.Columns SubRange.Select 下一个
对于每个子范围在ParentRange SubRange.Select 下一个
结束小组
请享用。 并在有一对夫妇的合并单元格的尝试,只是为了看看合并范围如何能。



Answer 3:

你的两个例子是我曾经使用过的唯一的东西RowsColumns的属性,但在理论上,你可以跟他们任何可以用做Range对象。

这些属性的返回类型本身是一个Range ,所以你可以做这样的事情:

Dim myRange as Range
Set myRange = Sheet1.Range(Cells(2,2),Cells(8,8))
myRange.Rows(3).Select

这将选择第三排myRange (单元格B4:在Sheet1 H4)。

更新:做你想要做什么,你可以使用:

Dim interestingRows as Range
Set interestingRows = Sheet1.Range(startRow & ":" & endRow)

更新2:或者,从另一个范围内获得行的子集:

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))


Answer 4:

由于.Rows结果被标记为包括行的,你可以“对于每个”它来处理每一行独立,就像这样:

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做一个“对每个”在该范围内的列。)



Answer 5:

我不知道,但我想第二个参数是一个红色的鲱鱼。

无论.Rows和.Columns采取两个可选参数:rowIndex位置和ColumnIndex。 尝试使用ColumnIndex,例如Rows(ColumnIndex:=2)对于.Rows和.Columns生成错误。

我感觉它继承从某种意义上Cells(RowIndex,ColumnIndex)物业,但只有第一个参数是适当的。



Answer 6:

我自己用range.Rows其在复制方法的效果发现。 它复制从出发地到目的地,这是我想要的行为行的高度。

rngLastRecord.Rows.Copy Destination:=Sheets("Availability").Range("a" & insertRow)

如果我用了rngLastRecord.Copy代替rngLastRecord.Rows.Copy,行高会无论在那里复制前。



Answer 7:

这也许有点杂牌的,但下面的代码做你似乎什么想做的事情:

Set rng = wks.Range(wks.Rows(iStartRow), wks.Rows(iEndRow)).Rows


Answer 8:

我发现这工作:

Rows(CStr(iVar1) & ":" & CStr(iVar2)).Select


Answer 9:

还有另外一种方法,以此为例子

Dim sr As String    
sr = "6:10"
Rows(sr).Select

所有你需要做的是你的变量转换iStartRowiEndRow为字符串。



文章来源: What does the Excel range.Rows property really do?