ActiveSheet.Range("B3")
Worksheets("Sheet 2").Range("M5:S20")
Именованные диапазоны. Если рабочий лист содержит именованные диапазоны, VBA объекты Range могут опираться на них, как показано в следующем примере:
Worksheets("Финансовый отчет").Range("Выплата процентов")
Для присвоения диапазону имени непосредственно в самом коде необходимо употребить следующее выражение с использованием функцией свойства Name (Имя):
Range("A3:В4")-Name = "Прайс-лист"
Сокращенная запись. Вследствие частого использования объектов Range, Excel позволяет упускать ключевое слово Range при определении диапазона при записи в А1 -стиле или при записи с использованием имени. Для реализации такого приема ссылку на ячейку или имя диапазона следует заключить в квадратные скобки, как показано в приведенном ниже примере:
ActiveSheet["Aclass="underline" Z26"]
["Квартальный отчет"]
Свойство Cells объекта Worksheets. Данная техника крайне необходима профессионалам, так как позволяет определять диапазон не путем указания фиксированных адресов ячейки, а на основе переменных. Основная идея состоит в составлении в цифровом виде списка координат строк и столбцов диапазона. Читайте об этом в разделе "Использование свойства Cells для определения диапазона" дальше в данной главе.
Свойство Selection (Выделение). Когда требуется воздействие кода на диапазон, соответствующий выделению пользователя, используется свойство Selection. Читайте об этом в разделе "Работа с выделениями" дальше в данной главе.
Свойство ActiveCell (Активная ячейка). Свойство Active Cell используется для доступа к диапазону, представляющему активную ячейку данного окна. При использовании без спецификатора объекта (что эквивалентно использованию объекта Application), свойство Active Cell ссылается на активное окно:
ValueStorageBi n = ActiveCell.Value
Свойства Rows (Строки) или Columns (Столбцы) объекта Worksheet. Доступ к диапазону, включающему весь столбец или строку, осуществляется с помощью свойств рабочего листа Rows и Columns с использованием номера указываемого столбца или строки (нельзя адресовать столбец через его буквенное обозначение). В следующем примере определяется диапазон, включающий столбец Е, т.е. пятый столбец:
Workbooks("IOU.xls").Worksheets("Sheetshoot out").Column(5)
Определенные пользователем ссылки на объекты. Поскольку диапазон является объектом, можно установить именованную объектную ссылку на него, после чего доступ к диапазону осуществляется с помощью указания имени ссылки. Данную технику использовать проще и быстрее, чем многократное указание оригинального диапазона. После установки объектной ссылки RanGer, как показано в последующем примере, можно использовать его свойства в таких выражениях, как RanGer . Value:
Dim RanGer As Range Set RanGer = Worksheets("Лист1").Range("B12:H13" )
Использование свойств Cells для определения диапазона
При использовании без координат свойство Cells объекта Worksheets указывает на диапазон, включающий все ячейки данного рабочего листа. По аналогии, свойства Cells объекта Application ( Application. Cells ) ссылаются на все ячейки листа, активного в данный момент (свойство Cells может использоваться само по себе, без указания в явном виде объекта Application).
Если необходимо остановиться на более локализированном диапазоне, для свойства Cells требуется числовое указание координат строки и столбца (буквенное указание столбца не допускается). В следующем примере указан диапазон, заключающий ячейку ЕЗ:
Worksheets("Старые новости").Cells ( 3,5)
Весьма непривычно то, что сначала указывается координата строки, а затем столбца, в противоположность записи в А1-стиле. В предшествующем примере второе значение в ссылке на ячейку указывает на столбец Е, т.е. пятый столбец. Вследствие того, что данная система трудна для понимания, работать с ней следует лишь в случае особой необходимости. Поскольку обе координаты являются числами, можно очень просто указывать их через переменные. Переменные координаты позволяют программе (при работе) принимать решение о том, где находится требуемый диапазон на основе введенных пользователем данных, результатов вычислений и т.д.
В следующем примере строка выбирается в зависимости от текущего года и месяца: intMonth = Month (Now О)
aGoal = Worksheets("Monthly Projections").Cells ( intMont h, 8)
Способом чуть похитрее можно указать диапазон, покрывающий больше одной ячейки:
Range( Cells ( 3,5), Cells ( 4,6) )
В приведенном здесь примере указывается диапазон ячеек 2x2 на активном рабочем листе, включающий ячейки ЕЗ (строка 3, столбец 5) в верхнем левом и ячейку F4 в левом нижнем углах.
Для определения диапазона на неактивном листе необходимо использовать совместно свойства Range и Cells для требуемого листа. Следующее выражение выполняет данную работу, правда, имеет достаточно громоздкий вид:
Worksheets("2"). _
Range(Worksheets("2").Cells(3,5).
Worksheets("2">.Cells(4,6))
Оператор With позволяет избежать излишних ссылок на рабочий лист. В следующем примере к тексту всего диапазона применяется полужирное форматирование:
With Worksheets("Лист2")
.Range(.Cells ( 3,5), .Cells ( 4,6) ).Font.Bold = True
End With
Обратите внимание, что точки перед каждым использованием свойства Cells необходимы для связи любой ссылки с требуемым рабочим листом. В случае отсутствия точек каждое свойство Cells будет относится к активному листу, что приведет к возникновению конфликта со ссылкой свойства Range.
Выполнение совместных действий с ячейками
Используя свойства диапазона, можно одним действием изменять характеристики целого диапазона. Следующая строка изменяет размер шрифта текста во всех ячейках диапазона:
Worksheets ("Лист1").Range("B12:H13").Font.Size = 14
Безусловно, можно и даже предпочтительно использовать структуру With, когда необходимо работать с несколькими свойствами или методами целого диапазона, как показано здесь:
With someRange ' определенная ранее объектная ссылка
.Value = 20 ' Значение всех ячеек устанавливается равным 20
.Font.Name = "Garamond"
. Font.Italic = True
.Locked = True someRange = .Name ' Сохраняется имя диапазона
End With
Работа с отдельными ячейками диапазона
Хотя можно с помощью одного оператора назначить одно значение всем ячейкам диапазона, как показано в предыдущем примере, в Excel нет метода, позволяющего с помощью единственного действия изменять имеющиеся значения многоячеечного диапазона. Оператор вроде someRange .Value = someRange . Value + 10 не работает. Вместо этого необходимо осуществить циклический перебор всех ячеек диапазона с помощью цикла For Each. . , Next. При использовании данной техники не требуется знание количества ячеек, входящих в диапазон. Вот пример работоспособного кода:
For Each aCell In Selection
aCell.Value = aCell.Value + 10
Next
Часто перед тем, как принять решение о выполнении действия над отдельной ячейкой или о вообще о выборе действия, требуется проверка содержимого ячейки. Основываясь на текущем значении ячейки, код может принять решение о форматировании ячейки, изменении ее значения или же использовании данного значения для выполнения других вычислений. В таком случае также используется цикл For Each . . . Next: