关于vba:在Excel中获取指定范围的最后一行

Get last row of specified range in Excel

如何获得已经指定和定义的范围的最后一行,并且已知包含所需的数据?在我看来,这应该是Range.Row之类的属性,但是Range.Row给出了范围内的第一个行号,而我想要最后一个行号。

现在的问题是我的范围不在源工作表的第1行中开始-实际上是从第3行开始并经过了756行。下面是调试器查看的我的范围地址,并且它的定义正确。但是由于它从第3行开始使用Rows.Count将不起作用,因为它得到的是754而不是756。

Rows.Count是对范围的引用,该范围是原始图纸的子集。我想要原始电子表格中最后一行的行号,与下面的地址完全相同。换句话说,"地址"上是否有某些属性可以给我756?

1
2
3
transData = transactionsDataRange.Address

: transData :"$A$3:$AP$756" : Variant/String

调试器中显示的地址正确。我想要的只是在指定范围内提取右下单元格的行值,即756。我可以解析地址值,并在必要时执行该操作,但是我想知道Excel VBA是否具有更简单的方法实现这一目标?


另一种方法

1
2
3
4
5
6
7
8
9
Sub x()

Dim transactionsDataRange As Range

Set transactionsDataRange = Range("$A$3:$AP$756")

MsgBox transactionsDataRange.Rows(transactionsDataRange.Rows.Count).Row

End Sub


1
2
Dim LstRow as Long
LstRow = transactionsDataRange.Row + transactionsDataRange.Rows.Count - 1

enter image description here


指定范围中的最后一个单元格。

1
2
3
4
5
6
7
8
9
10
Sub test()
    Dim transactionsDataRange As Range
    Dim rngT As Range

    Set transactionsDataRange = Range("$A$3:$AP$756")
    With transactionsDataRange
        Set rngT = .Cells(.Rows.Count, .Columns.Count)
    End With
    MsgBox rngT.Row
End Sub

1
2
3
4
5
Sub TestMe()        
    Dim myRange As Range
    Set myRange = Worksheets(1).Range("D10:D15")
    Debug.Print myRange.Rows.Count + myRange.Row - 1        
End Sub

它输出15。myRange.Rows.Count是6,myRange.Row是10。或者,如果您喜欢1行功能,则可以:

1
2
3
4
5
6
7
Sub TestMe()
    Debug.Print LastRowOfRange(Range("D15:E199"))
End Sub

Function LastRowOfRange(myRange) As Long
    LastRowOfRange = myRange.Rows.Count + myRange.Row - 1
End Function