Свойство Cells объекта Range в VBA Excel, представляющее коллекцию ячеек заданного диапазона. Обращение к ячейкам диапазона с помощью свойства Cells.
Свойство Cells объекта Worksheet
Обращение к ячейке «A1» активного рабочего листа с помощью свойства Cells:
1 2 3 4 5 6 7 8 |
'по индексу (порядковому номеру) ячейки MsgBox Cells(1).Address 'Результат: $A$1 'по номеру строки и номеру столбца MsgBox Cells(1, 1).Address 'Результат: $A$1 'по номеру строки и буквенному обозначению столбца MsgBox Cells(1, "A").Address 'Результат: $A$1 |
В данном случае в качестве объекта Range выступает диапазон всего активного рабочего листа (ActiveSheet). Полный путь к ячейке «A1» можно записать так:
1 2 3 |
MsgBox ThisWorkbook.ActiveSheet.Cells(1).Address 'Результат: $A$1 MsgBox ThisWorkbook.ActiveSheet.Cells(1, 1).Address 'Результат: $A$1 MsgBox ThisWorkbook.ActiveSheet.Cells(1, "A").Address 'Результат: $A$1 |
Обращение в VBA Excel к ячейке «C5» с помощью свойства Cells по имени рабочего листа (Worksheet) в другой книге Excel:
1 2 3 |
MsgBox Workbooks("Книга1.xlsm").Worksheets("Лист1").Cells(65539).Address 'Результат: $C$5 в Excel 2016 MsgBox Workbooks("Книга1.xlsm").Worksheets("Лист1").Cells(5, 3).Address 'Результат: $C$5 MsgBox Workbooks("Книга1.xlsm").Worksheets("Лист1").Cells(5, "C").Address 'Результат: $C$5 |
Обращение к диапазону «C5:G10» с помощью свойства Cells активного рабочего листа:
1 |
MsgBox Range(Cells(5, 3), Cells(10, 7)).Address 'Результат: $C$5:$G$10 |
Свойство Cells объекта Range
Обращение в VBA Excel к ячейкам заданного диапазона с помощью свойства Cells рассмотрим на коллекции ячеек диапазона «C5:G10». Обращаться будем к ячейке «D8» активного листа:
1 2 3 |
MsgBox Range("C5:G10").Cells(17).Address 'Результат: $D$8 MsgBox Range("C5:G10").Cells(4, 2).Address 'Результат: $D$8 MsgBox Range("C5:G10").Cells(4, "B").Address 'Результат: $D$8 |
Обратите внимание, что отсчет номеров строк, номеров и буквенных обозначений столбцов для указания адреса ячейки внутри диапазона ведется от верхней левой ячейки данного диапазона.
Обход диапазона ячеек циклом
Обход ячеек циклом For Each… Next
Обход ячеек циклом For Each… Next — это самый простой способ обхода всех ячеек заданного диапазона. Он может быть применен, например, для присвоения ячейкам свойств и значений или поиска ячейки с определенным свойством или значением.
Присвоение ячейкам диапазона «B3:F10» числовых значений, соответствующих их порядковым номерам (индексам) в диапазоне:
1 2 3 4 5 6 7 |
Sub Primer1() Dim myCell As Range, n As Long For Each myCell In Range("B3:F10") n = n + 1 myCell = n Next End Sub |
Поиск в диапазоне «B3:F10», заполненном предыдущим кодом VBA Excel значениями, ячейки со значением «27», окрашивание ее в зеленый цвет и выход из цикла:
1 2 3 4 5 6 7 8 9 |
Sub Primer2() Dim myCell As Range, n As Long For Each myCell In Range("B3:F10") If myCell = 27 Then myCell.Interior.Color = vbGreen Exit For End If Next End Sub |
Обход диапазона циклом For… Next
Цикл For… Next позволяет указывать переменные в качестве индексов ячеек или номеров строк и столбцов для обхода ячеек заданного диапазона.
Присвоение ячейкам диапазона «B3:F10» числовых значений, соответствующих их порядковым номерам (индексам) в диапазоне, с помощью цикла For… Next:
1 2 3 4 5 6 7 8 9 |
Sub Primer3() Dim i As Long, n As Long With Range("B3:F10") n = .Cells.Count For i = 1 To n .Cells(i) = i Next End With End Sub |
Если в блоке с оператором With вместо строки .Cells(i) = i
указать строку без точки впереди — Cells(i) = i
, то свойство Cells будет относиться не к диапазону Range("B3:F10")
, а к рабочему листу (объекту ActiveSheet). В этом случае, порядковыми номерами будут заполнены первые 40 ячеек первой строки активного рабочего листа.
Применение в качестве параметров свойства Cells объекта Range переменных, задающих номера строк и номера столбцов указанного диапазона при обходе его ячеек циклом For… Next:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer4() Dim i1 As Long, i2 As Long, r As Long, c As Long With Range("B3:F10") r = .Rows.Count c = .Columns.Count For i1 = 1 To r For i2 = 1 To c .Cells(i1, i2) = (i1 - 1) * c + i2 Next Next End With End Sub |
Номер ячейки на рабочем листе
Определение порядкового номера (индекса) активной ячейки на рабочем листе Excel с помощью кода VBA:
1 2 3 4 5 |
Sub Primer5() Dim n As Double n = (ActiveCell.Row - 1) * CDbl(Cells.Columns.Count) + ActiveCell.Column MsgBox n End Sub |