Мне просто интересно, можете ли вы помочь мне лучше понять, что делает .Cells(.Rows.Count,"A").End(xlUp).row . Я понимаю часть перед частью .End .
Он используется для определения того, сколько строк содержит данные на листе, который содержит данные в столбце "А". Полное использование
Где ws — объект Worksheet. В примере вопросов подразумевалось, что оператор находился внутри блока With
- ws.Rows.Count возвращает общее количество строк на листе (1048576 в Excel 2010).
- .Cells(.Rows.Count, "A") возвращает нижнюю часть ячейки в столбце "A" на листе
Возвращает объект Range, который представляет ячейку в конце области, содержащей исходный диапазон
В частности, он не определяет, что такое "регион". Мое понимание — это область непрерывного диапазона непустых ячеек. Таким образом, ожидаемое использование должно начинаться с ячейки в регионе и находить последнюю ячейку в этой области в этом направлении от исходной ячейки. Однако есть несколько исключений, если вы не используете его так:
- Если диапазон — несколько ячеек, он будет использовать область rng.cells(1,1) .
- Если диапазон не находится в регионе или диапазон уже находится в конце области, он будет перемещаться в направлении, пока он не войдет в область и не вернет первую обнаруженную ячейку в этом регионе.
- Если он встречает край листа, он вернет ячейку на границе этого рабочего листа.
Итак, Range.End не является тривиальной функцией.
- .row возвращает индекс строки этой ячейки.
Возвращает объект Range, представляющий ячейку в конце области, содержащей исходный диапазон. Returns a Range object that represents the cell at the end of the region that contains the source range. Эквивалентно нажатию клавиш END+СТРЕЛКА ВВЕРХ, END+СТРЕЛКА ВНИЗ, END+СТРЕЛКА ВЛЕВО или END+СТРЕЛКА ВПРАВО. Equivalent to pressing END+UP ARROW, END+DOWN ARROW, END+LEFT ARROW, or END+RIGHT ARROW. Объект Range предназначен только для чтения. Read-only Range object.
- Синтаксис Syntax
- Параметры Parameters
- Пример Example
- Поддержка и обратная связь Support and feedback
- Примеры кода
- Скачать
- Типовые задачи
- Перебор ячеек диапазона (вариант 4)
- Работа с текущей областью
- Определение границ текущей области
- Выделение столбцов / строк текущей области
- Сброс форматирования диапазона
- Поиск последней строки столбца (вариант 1)
- Поиск последней строки столбца (вариант 2)
- Поиск "последней" ячейки листа
- Разбор клипо-генератора
Синтаксис Syntax
выражение.End (Direction) expression.End (Direction)
выражение: переменная, представляющая объект Range. expression A variable that represents a Range object.
Параметры Parameters
Имя Name | Обязательный или необязательный Required/Optional | Тип данных Data type | Описание Description |
---|---|---|---|
Direction Direction | Обязательный Required | XlDirection XlDirection | Направление перемещения. The direction in which to move. |
Пример Example
В этом примере выделяется ячейка в верхней части столбца B в области, содержащей ячейку B4. This example selects the cell at the top of column B in the region that contains cell B4.
В этом примере выделяется ячейка в конце строки 4 в области, содержащей ячейку B4. This example selects the cell at the end of row 4 in the region that contains cell B4.
В этом примере расширяется выделенный фрагмент с ячейки B4 до последней ячейки в строке 4, содержащей данные. This example extends the selection from cell B4 to the last cell in row four that contains data.
Поддержка и обратная связь Support and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Продолжаем наш разговор про объект Excel Range , начатый в первой части. Разберём ещё несколько типовых задач и одну развлекательную. Кстати, в процессе написания второй части я дополнил и расширил первую, поэтому рекомендую её посмотреть ещё раз.
Примеры кода
Скачать
Типовые задачи
Перебор ячеек диапазона (вариант 4)
Для коллекции добавил четвёртый вариант перебора ячеек. Как видите, можно выбирать, как перебирается диапазон — по столбцам или по строкам. Обратите внимание на использование свойства коллекции Cells . Не путайте: свойство Cells рабочего листа содержит все ячейки листа, а свойство Cells диапазона ( Range ) содержит ячейки только этого диапазона. В данном случае мы получаем все ячейки столбца или строки.
Должен вас предупредить, что код, который вы видите в этом цикле статей — это код, написанный для целей демонстрации работы с объектной моделью Excel. Тут нет объявлений переменных, обработки ошибок и проверки условий, так как я специально минимизирую программы, пытаясь акцентировать ваше внимание целиком на обсуждаемом предмете — объекте Range .
Работа с текущей областью
Excel умеет автоматически определять текущую область вокруг активной ячейки. Соответствующая команда на листе вызывается через Ctrl + A . Через ActiveCell мы посредством свойства Worksheet легко выходим на лист текущей ячейки, а уже через него можем эксплуатировать свойство UsedRange , которое и является ссылкой на Range текущей области. Чтобы понять, какой диапазон мы получили, мы меняем цвет ячеек. Функция GetRandomColor не является стандартной, она определена в модуле файла примера.
Определение границ текущей области
Демонстрируем определение левого верхнего и правого нижнего углов диапазона текущей области. С левым верхним углом всё просто, так как координаты этой ячейки всегда доступны через свойства Row и Column объекта Range (не путать с коллекциями Rows и Columns !). А вот для определения второго угла приходится использовать конструкцию вида .Rows(.Rows.Count).Row , где .Rows.Count — количество строк в диапазоне UsedRange , .Rows(.Rows.Count) — это мы получили последнюю строку, и уже для этого диапазона забираем из свойства Row координату строки. Со столбцом — по аналогии. Также обратите внимание на использование оператора With . Как видите, оператор With , помимо сокращения кода, также позволяет отказаться от объявления отдельной объектной переменной через оператор Set , что очень удобно.
Выделение столбцов / строк текущей области
Тут нет ничего нового, мы всё это обсудили в предыдущем примере. Мы получаем ссылки на столбцы / строки, меняя их цвет для контроля результата работы кода.
Сброс форматирования диапазона
Для возвращения диапазона к каноническому стерильному состоянию очень просто и удобно использовать свойство Style , и присвоить ему имя стиля "Normal". Интересно, что все остальные стандартные стили в локализованном офисе имеют русские имена, а у этого стиля оставили англоязычное имя, что неплохо.
Поиск последней строки столбца (вариант 1)
Range имеет 2 свойства EntireColumn и EntireRow , возвращающие столбцы / строки, на которых расположился ваш диапазон, но возвращают их ЦЕЛИКОМ. То есть, если вы настроили диапазон на D5 , то Range("D5").EntireColumn вернёт вам ссылку на D:D , а EntireRow — на 5:5 .
Идём далее — свойство End возвращает вам ближайшую ячейку в определенном направлении, стоящую на границе непрерывного диапазона с данными. Как это работает вы можете увидеть, нажимая на листе комбинации клавиш Ctrl + стрелки . Кстати, это одна из самых полезных горячих клавиш в Excel. Направление задаётся стандартными константами xlUp , xlDown , xlToRight , xlToLeft .
Классическая задача у Excel программиста — определить, где кончается таблица или, в данном случае, конкретный столбец. Идея состоит в том, чтобы встать на последнюю ячейку столбца (строка 1048576) и, стоя в этой ячейке, перейти по Ctrl + стрелка вверх (что на языке VBA — End(xlUp) ).
Поиск последней строки столбца (вариант 2)
Ещё один вариант.
Поиск "последней" ячейки листа
Тут показывается, как найти на листе ячейку, ниже и правее которой находятся только пустые ячейки. Соответственно данные надо искать в диапазоне от A1 до этой ячейки. На эту ячейку можно перейти через Ctrl + End . Как этим воспользоваться в VBA показано ниже:
Разбор клипо-генератора
Ну, и в качестве развлечения и разрядки взгляните на код клипо-генератора, который генерирует цветные квадраты в заданных границах экрана. На некоторых это оказывает умиротворяющий эффект 🙂
По нашей теме в коде обращает на себя внимание использование свойства ReSize объекта Range . Как не трудно догадаться, свойство расширяет (усекает) текущий диапазон до указанных границ, при этом левый верхний угол диапазона сохраняет свои координаты. А также посмотрите на 2 последние строчки кода, реализующие очистку экрана. Там весьма показательно использован каскад свойств End и Offset .