Поиск последней строки до того места, где столбец 1 содержит только число - PullRequest
0 голосов
/ 07 ноября 2019

Я использую этот код, который я нашел из решения «Найти последнюю строку в листе»: Ошибка при поиске последней использованной ячейки в Excel с VBA . Как мне настроить его, чтобы ответить на мой вопрос? Извините, не могу исправить ошибку, чтобы разместить код здесь. Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2019

Представьте себе следующие данные в столбце A:A:

enter image description here

Теперь, чтобы зациклить ваш столбец, вы можете использовать:

Sub Test()

With Sheet.Range("A:A") 'Change to your own sheets CodeName
    For Each cl In .SpecialCells(xlCellTypeConstants, 1)
        Debug.Print cl.Address
    Next cl
End With

End Sub

Поскольку вы говорите, что имеете числовые значения, мы можем перебрать столбец A:A с SpecialCells. Используйте xlCellTypeConstants, чтобы включить только ячейки с константами в них, и добавьте перечисление XlSpecialCellsValue (xlNumbers или просто 1 для числовых констант), которое затем можно зациклить.

Он будет перебирать только ячейки, содержащие числовые значения. Поэтому вам не нужно пытаться найти последнюю строку, а также не нужно зацикливать все ячейки и проверять, является ли значение числовым. Этот метод также позволяет использовать другие значения текстовых типов данных в диапазоне, из которого вы работаете.

enter image description here


Если необходимо получить последнюю строкуудерживая числовое значение, мы можем немного изменить код, чтобы посмотреть на последний Area в коллекции Areas (поскольку у нас может быть несмежный объект Range). Теперь последняя строка может выглядеть следующим образом:

Sub Test()

Dim rng As Range
Dim lr As Long

With Sheet1.Range("A:A") 'Change to your own sheets CodeName
    Set rng = .SpecialCells(xlCellTypeConstants, 1)
    lr = rng.Areas(rng.Areas.Count).Cells(rng.Areas(rng.Areas.Count).Count, 1).Row
End With

End Sub

Для удобства чтения вам может быть проще следующее:

Sub Test()

Dim rng As Range
Dim lr As Long

With Sheet1.Range("A:A") 'Change to your own sheets CodeName
    Set rng = .SpecialCells(xlCellTypeConstants, 1)
    Set rng = rng.Areas(rng.Areas.Count)
    lr = rng.Cells(rng.Cells.Count).Row
End With

End Sub

Это избавит от необходимости использовать формулу / функцию массивачтобы получить последнюю строку, содержащую числовое значение.

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