Использование .Cells(.Rows.Count, "A").End(xlUp).Row
вернет последнюю использованную строку в определенном столбце , необязательно последнюю строку с какой-либо использованной ячейкой.
Другой способ - использовать Sheet.UsedRange
, однако вы должны знать о некоторых ограничениях.
.UsedRange
возвращает прямоугольную область, ограничивающую все используемые ячейки, поэтому она не может быть привязана к ячейке A1
. Чтобы получить номер строки нижней части диапазона, используйте
.UsedRange.Row + .UsedRange.Rows.Count - 1
При удалении строк (или столбцов) .UsedRange
может не обновляться, поэтому вы можете получить диапазон больше, чем истинно используемый диапазон.
Вы можете принудительно обновить: если вы счастливы использовать ActiveSheet
, тогда поставьте строку
Application.ActiveSheet.UsedRange
в вашем коде вызывает обновление.
Если вы не хотите использовать ActiveSheet
(например, в подпрограмме, передавшей лист в качестве параметра), тогда используйте:
i = Sh.UsedRange.Row
Не полагайтесь на значение i
на данный момент. Следующая ссылка на .UsedRange
будет истинным используемым диапазоном.