Работа с ячейками — объект Range
Аннотация: Лекция посвящена описанию объектной модели MS Excel, относящейся к ячейкам — объект Range.
15.1. Как обратиться к ячейке
Мы добрались до ячеек, работа с которыми осуществляется, в основном, через объект типа Range . Выше мы немного работали с ячейками , а теперь рассмотрим их наиболее интересные методы и свойства.
Выше мы уже обращались к ячейкам в некоторых примерах. Здесь мы кратко обобщим и поясним основные способы обращения к ячейкам .
Можно адресовать ячейку или диапазон ячеек , указав их адреса в стиле A1 . Здесь и далее мы используем метод Select объекта Range , который выделяет ячейки (листинг 15.1.)
Для обращения к диапазону ячеек нужно знать верхнюю левую и нижнюю правую границы диапазона. Например, для обращения к диапазону высотой в одну строку от A2 до E2 или к диапазону A2:E4 — понадобится такой код (листинг 15.2.)
Можно воспользоваться конструкцией с использованием объекта Cells , который позволяет обращаться к отдельной ячейке по ее индексу в формате R1C1 . Чтобы обратиться к ячейке A5 таким способом, нужно заметить, что она расположена в пятой строке и первом столбце (листинг 15.3.):
Можно объединить использование Range и Cells , указав координаты ячеек при адресации диапазона с помощью Cells (листинг 15.4.).
Нам уже встречалось использование Cells для доступа к группам ячеек в цикле — в качестве индексов ячеек можно использовать переменные (листинг 15.5.)
Объект Selection — это еще один способ работы с ячейками , однако он используется сравнительно редко, так как к ячейкам удобнее обращаться по их именам.
Выше мы использовали прямое обращение к ячейкам активного листа, без использования объектных переменных .)
Помимо обращения к отдельным ячейкам или их диапазонам, Excel предусматривает возможность обращения к строкам и столбцам, а так же — к листу целиком.
В листинге 15.7 мы сначала выделяем столбец A , потом столбец B , используя коллекцию Columns (столбцы), 3-ю строку, используя коллекцию Rows (строки) а далее — лист целиком.
Еще один способ обращения к ячейкам — применение именованных диапазонов (коллекция Names ) мы рассмотрим ниже. А теперь поговорим о методах и свойствах объекта Range .
15.2. Методы Range
15.2.1. Activate — активация ячейки
Например, в листинге 15.8. мы сначала выделили диапазон ячеек , а потом, не снимая выделения, сделали одну из ячеек диапазона активной.
15.2.2. AddComment — добавляем комментарии к ячейкам
Позволяет добавлять комментарии к ячейкам . Если вы формируете какой-нибудь Excel-документ программно, вы можете добавить в некоторые ячейки комментарии для пояснения данных, которые в них хранятся. В листинге 15.9. мы добавляем комментарий к ячейке C3.
В правом верхнем углу ячейки появится красный треугольник, а наведя мышь на ячейку , можно увидеть текст комментария (рис. 15.1.).
15.2.3. AutoFit — автонастройка ширины столбцов и высоты строк
Позволяет автоматически подстроить ширину столбцов и высоту строк, входящих в диапазон. Это удобно делать, чтобы придать автоматически генерируемым таблицам привлекательный вид.
Метод можно применять как к диапазону, так и к отдельным строкам или столбцам.
Например, код в листинге 15.10. позволяет автоматически подобрать ширину столбцов A, B, C, D, E, руководствуясь данными, расположенными в первой строке этих столбцов. Если в других строках столбцов будут более длинные значения — они не будут приняты во внимание.
Мы не случайно обращаемся здесь к свойству Columns объекта Range — иначе метод AutoFit не работает. Если же в подобном вызове не задавать конкретной строки, а выполнить эту команду так (листинг 15.11.), то ширина столбцов A — E будет подстроена таким образом, чтобы наилучшим образом вместить самое длинное из значений, хранящихся в ячейках , принадлежащих столбцам.
Метод Clear позволяет очистить диапазон — он удаляет данные и форматирование из ячеек. Например, в листинге 15.12. мы очищаем от форматирования сначала диапазон A1:E5, а потом — весь лист.
Другие методы, название которых начинается с Clear , позволяют очищать ячейки от соответствующих им объектов.
ClearContents очищает содержимое ячеек, не затрагивая форматирование. Если вы выделите ячейки и нажмете клавишу Del на клавиатуре — вы добъетесь того же эффекта.
ClearFormats очищает лишь форматирование ячеек, не затрагивая содержимого.
15.2.5. Copy, Cut, PasteSpecial — буфер обмена
Выше мы уже рассматривали команды для работы с буфером обмена в MS Excel . Метод Copy копирует содержимое диапазона в буфер обмена, Cut — вырезает, PasteSpecial осуществляет специальную вставку.
Как ни странно, объект Range не поддерживает метод Paste , осуществляющий обычную вставку, однако, этот метод поддерживает объект Worksheet .
15.2.6. Delete — удалить диапазон
Удаляет выделенный диапазон — остальные ячейки сдвигаются, занимая его место.
15.2.7. Merge, UnMerge — объединение ячеек
Merge позволяет создать одну объединенную ячейку из заданного диапазона.
UnMerge разбивает объединенную ячейку на обычные ячейки .
Объединенные ячейки удобно использовать для хранения в них названий таблиц.
15.2.8. Select — выделение ячейки
Выделяет ячейки или ячейку . Выделив ячейку , к ней можно обращаться, используя объект Selection . Так же этот объект можно использовать для работы с ячейками , предварительно выделенными пользователями.
Например, в листинге 15.14. мы находим сумму чисел, которые хранятся в ячейках диапазона, выделенного пользователем перед запуском макроса.
[expert_bq id=»1570″]Если рабочий лист содержит именованные диапазоны, VBA объекты Range могут опираться на них, как показано в следующем примере. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Использование констант внешних объектов Для того чтобы в сценарии обращаться по имени к константам, определенным во внешних объектах, не создавая экземпляров самих объектов, необходимо сначала получить ссылку на эти объекты с помощью элемента <reference>.В листинге 3.10
Указать адрес ячейки Vba
Преимуществом именованного диапазона является его информативность. Сравним две записи одной формулы для суммирования, например, объемов продаж: =СУММ($B500:$B$10) и =СУММ(Продажи) . Хотя формулы вернут один и тот же результат (если, конечно, диапазону B2:B10 присвоено имя Продажи ), но иногда проще работать не напрямую с диапазонами, а с их именами.