我试图了解如何在Range对象上使用Rows.Count属性和Rows(x)方法:
我有以下范围对象:
Dim rng As Range
Set rng = Range("B66:B78")
rng.Rows.Count ---> returns 13
因此,我期望rng.Rows(15)
不返回任何内容,因为如果我理解这一权利,则行索引应等于行数,因此不应大于13(?)。但是rng.Rows(15)
确实返回了Range
对象。为什么会这样?
编辑:
这是我的子程序:
Sub Button2_Click()
Dim a As Range
Set a = Range("A1:C10")
Dim ginrng As Range
Set ginrng = a.Find("gin")
Debug.Print "Row " & ginrng.Row & ", B cell value = " & ginrng.Range("B" & ginrng.Row).Value
Dim b As String
b = ginrng.Address
Do
Dim ginrngnxt As Range
Set ginrng = a.FindNext(ginrng)
Debug.Print "Row " & ginrng.Row & ", B cell value = " & ginrng.Range("B" & ginrng.Row).Value
Loop While b <> ginrng.Address
End Sub
数据集的屏幕截图:
子程序的预期输出:
Row 2, B cell value = wafer
Row 3, B cell value = start
Row 4, B cell value = gin
Row 5, B cell value = may
Row 6, B cell value = go
Row 7, B cell value = gin
Row 9, B cell value = water
Row 10, B cell value = tonic
Row 2, B cell value = wafer
实际输出中的B单元格值与数据集中的B单元格值不匹配。为什么是这样?
Range.Range
Range.Rows
Range.Columns
可以考虑返回范围相对于起点。
例如:
With Range("A2")
Debug.Print .Range("B2").Address '<~ returns $B$3
Debug.Print .Rows(2).Address '<~ returns $A$3
Debug.Print .Columns(2).Address '~ returns $B$2
End With
根据您的具体情况,
ginrng.Range("B" & ginrng.Row).Value
为您提供相对于ginrng
的范围。如果ginrng
为A2
,则
ginrng.Range("B" & ginrng.Row)
相当于
Range("A2").Range("B2")
返回$B$3
,而不是$B$2
。
换句话说,删除开头的ginrng.
。