获取Excel中指定范围的最后一行

获取Excel中指定范围的最后一行,excel,vba,Excel,Vba,如何获取已指定和定义且已知包含所需数据的范围的最后一行?在我看来,这应该是一个类似于Range.Row的属性,但给出了范围中的第一个行号,我想要最后一个行号 现在的问题是,我的范围不是从源工作表的第1行开始的,而是从第3行开始,一直到第756行。下面是调试器查看的my range的地址,该地址定义正确。但是,由于它从第3行开始,使用Rows.Count将不起作用,因为它的结果是754而不是756 Rows.Count是对作为原始工作表子集的范围的引用。我想要原始电子表格中最后一行的行号,与下面的

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

现在的问题是,我的范围不是从源工作表的第1行开始的,而是从第3行开始,一直到第756行。下面是调试器查看的my range的地址,该地址定义正确。但是,由于它从第3行开始,使用
Rows.Count
将不起作用,因为它的结果是754而不是756

Rows.Count
是对作为原始工作表子集的范围的引用。我想要原始电子表格中最后一行的行号,与下面的地址完全相同。换句话说,地址上是否有提供756的属性

transData = transactionsDataRange.Address

: transData : "$A$3:$AP$756" : Variant/String
调试器中显示的地址正确。我只想提取指定范围内右下角单元格的行值,该范围为756。我可以解析地址值,并在必要时进行解析,但我想知道Excel VBA是否有更简单的方法来实现这一点?

使用

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

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

另一种方法

Sub x()

Dim transactionsDataRange As Range

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

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

End Sub

另一种方法

Sub x()

Dim transactionsDataRange As Range

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

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

End Sub
打印15张
myRange.Rows.Count
为6,
myRange.Row
为10。或者,如果您喜欢单线函数,也可以:

Sub TestMe()
    Debug.Print LastRowOfRange(Range("D15:E199"))
End Sub

Function LastRowOfRange(myRange) As Long
    LastRowOfRange = myRange.Rows.Count + myRange.Row - 1
End Function
打印15张
myRange.Rows.Count
为6,
myRange.Row
为10。或者,如果您喜欢单线函数,也可以:

Sub TestMe()
    Debug.Print LastRowOfRange(Range("D15:E199"))
End Sub

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

指定区域中的最后一个单元格

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

指定区域中的最后一个单元格

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行开始时,此选项才起作用。范围是工作表的子集,可以从任何地方开始。我的工作表有756行,其中只有754行是相关的。但我想提及原始工作表中的最后一行,可能是Count+或-未知数量。@Nelda.techspires:为什么不试试?@Nelda.techspires不,它将适用于它所在的任何一行。在您的示例中,
TransactionDataRange.Row
将返回
3
TransactionDataRange.Rows.Count
将返回
754
或范围内的行数,因此数学为
3+754-1
,即
756
@Nelda.techspires您是否尝试过我给出的精确公式。它将返回756,因为它将范围的起始行添加到行计数中,然后减去
1
,无论范围从何处开始,它都将工作。@Nelda.techspiress我对您选择其他答案没有问题,只是想确保您看到了这一点。我也会选择另一个。只有当我的指定范围从工作表的第1行开始时,这才有效。范围是工作表的子集,可以从任何地方开始。我的工作表有756行,其中只有754行是相关的。但我想提及原始工作表中的最后一行,可能是Count+或-未知数量。@Nelda.techspires:为什么不试试?@Nelda.techspires不,它将适用于它所在的任何一行。在您的示例中,
TransactionDataRange.Row
将返回
3
TransactionDataRange.Rows.Count
将返回
754
或范围内的行数,因此数学为
3+754-1
,即
756
@Nelda.techspires您是否尝试过我给出的精确公式。它将返回756,因为它将范围的起始行添加到行计数中,然后减去
1
,无论范围从何处开始,它都将工作。@Nelda.techspiress我对您选择其他答案没有问题,只是想确保您看到了这一点。我也会选择另一个。谢谢你接受答案,但斯科特的答案有效。谢谢你接受答案,但斯科特的答案有效。