Получить последнюю строку указанного диапазона в Excel - PullRequest
0 голосов
/ 03 января 2019

Как получить последнюю строку диапазона, которая уже была указана и определена и, как известно, содержит данные, которые я хочу? Мне кажется, это должно быть какое-то свойство типа Range.Row, но Range.Row дает первый номер строки в диапазоне, и я хочу последний номер строки.

Теперь проблема в том, что мой диапазон не начинается в строке 1 исходного листа - он фактически начинается в строке 3 и проходит через строку 756. Ниже указан адрес моего диапазона, который просматривается отладчиком, и он определен правильно , Но так как он начинается в строке 3, использование Rows.Count не будет работать, так как это приведет к 754 вместо 756.

Rows.Count является ссылкой на диапазон, который является подмножеством исходного листа. Мне нужен номер строки последней строки из исходной электронной таблицы, точно такой же, как и в указанном ниже адресе. Другими словами, есть ли какое-то свойство на Адрес, которое даст мне 756?

transData = transactionsDataRange.Address

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

Адрес, указанный в отладчике, правильный. Все, что я хочу, это извлечь значение строки в нижней правой ячейке в указанном диапазоне, который будет 756. Я могу проанализировать значение адреса и сделаю это при необходимости, но мне интересно, если Excel VBA имеет более простой способ достижения этого?

Ответы [ 4 ]

0 голосов
/ 03 января 2019

Указывает последнюю ячейку в диапазоне.

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
0 голосов
/ 03 января 2019

Альтернативный подход

Sub x()

Dim transactionsDataRange As Range

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

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

End Sub
0 голосов
/ 03 января 2019
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-строчные функции, это может быть нормально:

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

Function LastRowOfRange(myRange) As Long
    LastRowOfRange = myRange.Rows.Count + myRange.Row - 1
End Function
0 голосов
/ 03 января 2019

Использование

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...