Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
объектная модель Excel.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Доступ к отдельным ячейкам диапазона

Свойство Cells объекта Range, использованное без индексов, возвращает все ячейки диапазона, а с индексами — конкретную ячейку, специфицированную либо ее номером (один параметр), либо местоположением (два параметра).

Например, в следующем коде в диапазоне В1:СЗ все положительные значения заменяются на 1, а отрицательные — на — 1.

Dim с As Range

For Each c In Range("Bl:C3").Cells

If c.Value > 0 Then

c.Value = 1

Elself c.Value < 0 Then

c.Value = -1

End If

Next

Ту же задачу можно решить, используя свойство Cells с двумя параметрами, возвращающее ячейку, стоящую на пересечении указанной строчки и столбца. При этом надо помнить, что свойство Cells задает относительное расположение ячеек к диапазону.

Dim i As Integer

Dim j As Integer

For i = 1 To Range("B1:C3").Columns.Count

For j = 1 To Range("B1:C3").Columns.Count

If Range("B1:C3").Cells(i, j).Value > 0 Then

Range("B1:C3").Cells(i, j).Value = 1

Elself Range("B1:C3").Cells(i, j).Value < 0 Then

Range("B1:C3").Cells(i, j).Value = -1

End If

Next

Next

Если требуется задать абсолютное местоположение ячеек, то надо восполь­зоваться свойством cells рабочего листа, например, как это делается для задачи из предыдущего примера.

Dim i As Integer

Dim j As Integer

For i = 2 To 3

For j = 1 To 3

If Cells(i, j).Value > 0 Then

Cells (i, j).Value = 1

Elself Cells(i, j).Value < 0 Then

Cells (i, j).Value,= -1

End If

Next

Next

Выбор элементов на рабочем листе или в книге

Выбор элемента, например, диапазона на рабочем листе производится методом select. Например, для того чтобы очистить содержимое ячейки А1, ее надо выбрать, а затем к полученному объекту Selection применить метод ClearContents:

Range("A1).Select

Selection.ClearContents

Конечно, того же самого результата можно достичь, применив метод ClearContents непосредственно к объекту Range ("A1”):

Range("A1).ClearContents

Затем, не изменяя текущей активной ячейки, например, при помощи метода Offset переместиться к другой ячейке (в данном случае ячейке В2) и произвести над ней какие-либо действия, например, очистить ее содержимое:

Range("A1").Offset(1,1).ClearContents

Метод Select позволяет выбрать не только одну ячейку, но и целый диапазон. Например, первая из приводимых инструкций выбирает диапазон А1:В2, вторая — ячейки A1, B2, D9, а третья — диапазон В2:С4 и ячейки A1, D9.

Range("Al:В2").Select

Range("A1,B2,D9").Select

Range("A1,B2:C4,D9").Select

Метод Activate позволяет не только выбирать, но и активизировать указанный объект. Например, первая из приводимых далее инструкций активизирует рабочую книгу, в которой в данный момент выполняется макрос, вторая — окно с рабочей книгой Отчет.хls, а третья — рабочий лист Май.

ThisWorkbook.Activate

Windows(Отчет.хls").Activate

Sheets("Май").Activate

Свойство ActiveCell возвращает активную ячейку. Например, в следующем коде сначала определяется активная ячейка (например, ей будет А1), затем методом Offset возвращается ссылка на ячейку, которая находится на одну строку ниже и на три столбца правее активной, и эта ячейка затем выбирается методом Select (в данном случае Е2).

ActiveCell.Offset(1, 3).Select

Если есть несколько ячеек, имена которых образуют нумерованную после­довательность, то для работы с ними можно воспользоваться оператором цикла. Например, в коде листинга 5.42 ячейкам с именами с_1, с_2 и с_з присваиваются в цикле значения, соответствующие их индексам.

Листинг 5.42. Работа с ячейками, имена которых представляют нумерованную последовательность

Sub SetValues()

Dim i As Integer

Dim cellName As String

For i = 1 To 3

cellName = "c__" & i

Range([cellName]).Value = i

Next

End Sub

Для того чтобы выбрать первую ячейку столбца/строки, в которой находится активная ячейка, можно воспользоваться следующими инструкциями:

ActiveCell.Offset(0, -ActiveCell.Column + 1).Select

ActiveCell.Offset(-ActiveCeii.Row + 1,0).Select

Для того чтобы выбрать диапазон от указанной ячейки (например, активной) вниз/вверх вдоль столбца или влево/вправо вдоль строки до первой пустой ячейки, подойдут следующие инструкции

Range(ActiveCell, ActiveCell.End(xlDown)).Select

Range(ActiveCell, ActiveCell.End(xlUp)).Select

Range(ActiveCell, ActiveCell.End(xlToLeft)).Select

Range(ActiveCell, ActiveCell.End(xlToRight)).Select

Для того чтобы выбрать диапазон ячеек от активной до другой ячейки, которая находится на специфицированном расстоянии от активной, можно применить следующую инструкцию:

Range(ActiveCell, ActiveCell.Offset(3, 4)).Select

Для того чтобы выбрать первую пустую ячейку в столбце/строке (в данном случае столбец А/первая строка), воспользуйтесь следующими инструкциями:

Range("A1").End(xlDown).Offset(1, 0).Select

Range("A1").End(xlToRight).Offset(0,1).Select

Для изменения размеров выбранного диапазона применяется метод Resize, который возвращает диапазон, имеющий указанные размеры и с левой верхней вершиной, совпадающей с соответствующей вершиной искомого диапазона. Например, если первоначально выбран диапазон В2:С4, то следующая инструкция выбирает диапазон B2:F5:

Selection.Resize(4, 5).Select

Как проверить, является ли

диапазон выбранным объектом?

Функция TypeName возвращает имя типа значения ее параметра. Поэтому, если надо проверить, является ли диапазон выбранным объектом, просто надо воспользоваться функцией TypeName (листинг 5.43).

Листинг 5.43. Проверка, является ли диапазон выбранным объектом

Function IsRange() As Boolean

If TypeName(Selection) = "Range" Then

IsRange = True

Else

IsRange = False

End If

End Function

Определение типа данных, хранимых в ячейке

Объект Application обладает большой коллекцией свойств вида isTypename, позволяющих идентифицировать тип значения. Код в листинге 5.44 демонстрирует, как эти свойства можно использовать для индикации типов данных, введенных в ячейки диапазона А1:А10.

Листинг 5.44. Определение типа данных, хранимых в ячейке

Sub ScanColumn()

For Each c In Worksheets(1).Range("Al:A10").Cells

If Application.IsText(c.Value) Then

c.Offset(0, 1).Formula = "Text"

Elself Application.IsNumber(с.Value) Then

c.Offset(0, 1).Formula = "Number"

Elself Application.IsLogical(c.Value) Then

с Offset(0, 1).Formula = "Boolean"

Elself Application.IsError(c.Value) Then

с Offset(0, 1).Formula = "Error"

Elself c.Value = "" Then

с Offset(0, 1).Formula = "(blank cell)"

End If

Next с

End. Sub