Страницы: 1
RSS
Вопрос по определению последней строки vba, ActiveSheet.UsedRange.Rows.Count - 1 зачем вычитать единицу?
 
Всем добрый вечер!
Ребята, скажу сразу, только начинаю программировать на vba.
Возник вопрос: для чего в выражении ActiveSheet.UsedRange.Rows.Count - 1 вычитать единицу.
ActiveSheet - активный лист
UsedRange - рабочий диапазон
Rows.Count - количество строк
-1?
Объясните пожалуйста.
Заранее спасибо за ответ.
В интернете нашел: https://www.excel-vba.ru/chto-umeet-excel/kak-opredelit-poslednyuyu-yachejku-na-liste-cherez-vba/
Но что-то не совсем понял объяснение.
Получается -1 нужно для перехода на строку выше.
Всем большое спасибо!
 
Вы 9 мая идете в отпуск на 3 дня. Какой день будет последним днем отпуска?
Владимир
 
11 мая. То есть первая строка плюс 2 вместе с первой строкой минус один, так как первая строка тоже считается?
Выходит, что если не считать первую строку, то получится, для примера 12 мая, а если с первой строкой, то 11 мая, верно?

То есть здесь  ActiveSheet.UsedRange.Rows.Count = 12 мая
а  ActiveSheet.UsedRange.Rows.Count-1 = 11 мая
Верно?
 
Скорее, такой пример. Первая строка диапазона - 9 (.Row), число строк диапазона - 3 (.Rows.Count), последняя строка диапазона 11 (9+3-1).
Владимир
 
Цитата
artemkau88 написал:
Возник вопрос: для чего в выражении
Возник встречный вопрос - для чего выражение?
В Вашем случае - количество занятых ячеек минус один.
На самом деле такое вычитание используется, когда необходимо получить последнюю строку занятого диапазона, и выражение выглядит как:
Код
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
То есть первая строка плюс количество строк минус один. Если не вычитать - получится первая незанятая строка.
Цитата
artemkau88 написал:
То есть здесь  
ActiveSheet.UsedRange.Rows.Count = 12 мая
а  ActiveSheet.UsedRange.Rows.Count-1 = 11 мая
Верно?
Не совсем. В предложенном примере
Код
ActiveSheet.UsedRange.Rows.Count = 3 дня - длительность отпуска
ActiveSheet.UsedRange.Row = 9 мая - начало отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count = 9 + 3 = 12 - день выхода из отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 = 9 + 3 - 1 = 11 - последний день отпуска
 
Здравствуйте artemkau88. Так вы ведь не все написали.
Код
lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
И объяснение там есть:
  • ActiveSheet.UsedRange.Row - этой строкой мы определяем первую ячейку, с которой начинаются данные на листе. Важно понимать для чего это - если у вас первые строк 5 не заполнены ничем, то данная строка вернет 6(т.е. номер первой строки с данными). Если же все строки заполнены - то вернет 1.
  • ActiveSheet.UsedRange.Rows.Count - определяем кол-во строк, входящих в весь диапазон данных на листе.
    Т.е. получается: первая строка данных + кол-во строк с данными - 1.  Зачем вычитать единицу? Попробуем посчитать вместе: первая строка: 3. Всего строк: 3.  3 + 3 = 6. Вроде все верно, чего тут непонятного? А теперь выделите на  листе три ячейки, начиная с 3-ей. Все верно. Ведь у нас в 3-ей строке  уже есть данные. Думаю, остальное уже понятно и без моих пояснений.
  • То же самое и с ActiveSheet.UsedRange.Column, только уже не для строк, а для столбцов.
 
Получается единицу вычитаем для определения последней строки с данными в рабочем диапазоне.

Всем спасибо за объяснения. С праздником!
 
Единицу вычитаем потому, что количество строк рабочего диапазона суммируем не с нулём, а с единицей, если начало области будет с первой строки.
Страницы: 1
Наверх