Excel VBA Rows.Count和Rows(x)行为

问题描述 投票:0回答:1

我试图了解如何在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

数据集的屏幕截图:

enter image description here

子程序的实际输出屏幕截图:enter image description here

子程序的预期输出:

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单元格值不匹配。为什么是这样?

excel vba count range rows
1个回答
0
投票
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的范围。如果ginrngA2,则

ginrng.Range("B" & ginrng.Row)

相当于

Range("A2").Range("B2")

返回$B$3,而不是$B$2

换句话说,删除开头的ginrng.

© www.soinside.com 2019 - 2024. All rights reserved.