15-01-Excel Обращение к ячейкам.xlsm - пример к п. 15.1.
Мы добрались до ячеек, работа с которыми осуществляется, в основном, через Range. Выше мы немного работали с
Выше мы уже обращались к
Можно адресовать A1. Здесь и далее мы используем метод Select Range, который выделяет
ActiveSheet.Range("A2").Select
Для обращения к диапазону ячеек нужно знать верхнюю левую и нижнюю правую границы диапазона. Например, для обращения к диапазону высотой в одну строку от A2 до E2 или к диапазону A2:E4 - понадобится такой код (листинг 15.2.)
ActiveSheet.Range("A2:E2").Select
ActiveSheet.Range("A2:E4").Select
Можно воспользоваться конструкцией с использованием объекта Cells, который позволяет обращаться к отдельной R1C1. Чтобы обратиться к
ActiveSheet.Cells(5,1).Select
Можно объединить использование Range и Cells, указав координаты ячеек при адресации диапазона с помощью Cells (листинг 15.4.).
ActiveSheet.Range(Cells(5, 4), _
Cells(7, 5)).Select
Нам уже встречалось использование Cells для доступа к группам ячеек в цикле - в качестве индексов ячеек можно использовать переменные (листинг 15.5.)
For i = 1 To 3
For j = 1 To 3
ActiveSheet.Cells(i, j).Select
Application.Wait (Now + _
TimeValue("0:00:01"))
p = p + 1
Selection = p
Next j
Next i
ActiveSheet.Range("A1:E5").Clear
Здесь мы циклически выделяем A1:C3, делая задержку на 1 секунду после каждого выделения и выводя количество прошедших с начала работы программы секунд. Здесь мы воспользовались для выделения Select, а для ввода данных в выделенную Selection, который в данном случае ссылается на выделенную A1:E5 от введенных данных.
Объект Selection - это еще один способ работы с
Выше мы использовали прямое обращение к
Dim obj_MyCells As Range Set obj_MyCells = ActiveSheet.Cells(5, 5) obj_MyCells.Select
Помимо обращения к отдельным
В листинге 15.7 мы сначала выделяем столбец A, потом столбец B, используя коллекцию Columns (столбцы), 3-ю строку, используя коллекцию Rows (строки) а далее - лист целиком.
ActiveSheet.Range("A:A").Select
ActiveSheet.Columns("B:B").Select
ActiveSheet.Range("3:3").Select
ActiveSheet.Rows("4:4").Select
ActiveSheet.Cells.Select
Еще один способ обращения к Names ) мы рассмотрим ниже. А теперь поговорим о методах и свойствах Range.
15-02-Range Activate.xlsm - пример к п. 15.2.1.
Позволяет выбрать Activate метод Select, то
Например, в листинге 15.8. мы сначала выделили
Range("A1:E5").Select
Range("C2").Activate
Позволяет добавлять комментарии к
Range("C3").AddComment ("Проверка комментария")
В правом верхнем углу
(рис 15.1) Комментарий в ячейке MS Excel
Позволяет автоматически подстроить ширину столбцов и высоту строк, входящих в диапазон. Это удобно делать, чтобы придать автоматически генерируемым таблицам привлекательный вид.
Метод можно применять как к диапазону, так и к отдельным строкам или столбцам.
Например, код в листинге 15.10. позволяет автоматически подобрать ширину столбцов A, B, C, D, E, руководствуясь данными, расположенными в первой строке этих столбцов. Если в других строках столбцов будут более длинные значения - они не будут приняты во внимание.
ActiveSheet.Range("A1:E1").Columns.AutoFit
Мы не случайно обращаемся здесь к свойству Columns Range - иначе метод AutoFit не работает. Если же в подобном вызове не задавать конкретной строки, а выполнить эту команду так (листинг 15.11.), то ширина столбцов A - E будет подстроена таким образом, чтобы наилучшим образом вместить самое длинное из значений, хранящихся в
ActiveSheet.Range("A:E").Columns.AutoFit
Метод Clear позволяет очистить диапазон - он удаляет данные и форматирование из ячеек. Например, в листинге 15.12. мы очищаем от форматирования сначала диапазон A1:E5, а потом - весь лист.
ActiveSheet.Range("A1:E5").Clear
Activesheet.Cells.Select
Selection.Clear
Другие методы, название которых начинается с Clear, позволяют очищать
ClearContents очищает содержимое ячеек, не затрагивая форматирование. Если вы выделите Del на клавиатуре - вы добъетесь того же эффекта.
ClearFormats очищает лишь форматирование ячеек, не затрагивая содержимого.
Выше мы уже рассматривали команды для работы с буфером обмена в Copy копирует содержимое диапазона в буфер обмена, Cut - вырезает, PasteSpecial осуществляет специальную вставку.
Как ни странно, Range не поддерживает метод Paste, осуществляющий обычную вставку, однако, этот метод поддерживает объект .
Удаляет выделенный диапазон - остальные
15-03-Range Merge.xlsm - пример к п. 15.2.7.
Merge позволяет создать одну объединенную
UnMerge разбивает объединенную
Объединенные
В листинге 15.13. мы программно формируем таблицу шириной в 10 ячеек. Заполняем ее данными, автоматически подстраиваем ширину столбцов под введенные значения. После этого вводим в левую верхнюю
'Заполняем область C3:L2
'случайными целыми числами
For i = 1 To 10
For j = 1 To 10
ActiveSheet.Cells(i + 2, j + 2) = _
Int(Rnd * 100)
Next j
Next i
'Выравниваем размер столбцов
ActiveSheet.Range("C:L").Columns.AutoFit
'Записываем название таблицы
'в ячейку верхней строчки
Range("C2") = "Название таблицы"
'Объединяем ячейки над таблицей
Range("C2:L2").Merge
(рис 15.2) Название таблицы в объединенной ячейке
15-04-Range Select.xlsm — пример к п. 7.7.2.8.
Выделяет Selection. Так же этот объект можно использовать для работы с
Например, в листинге 15.14. мы находим сумму чисел, которые хранятся в
Dim obj_Range As Range
Dim num_Sum
'Обращаемся к каждой ячейке
'в выделенной области
For Each obj_Range In Selection.Cells
num_Sum = num_Sum + Val(obj_Range)
Next
MsgBox ("Сумма выделенных ячеек: " _
num_Sum)
15-05-Range Address.xlsm - пример к п. 15.3.1.
Возвращает строку, представляющую собой адрес A1. Адрес выводится в абсолютном виде - снабжается знаками $.
Листинг 15.15 позволяет, задав адрес ячейки в виде R1C1, вывести ее адрес в формате A1.
Dim num_Row
Dim num_Col
Dim MyRange As Range
num_Row = Val(InputBox("Введите строку"))
num_Col = Val(InputBox("Введите столбец"))
Set MyRange = _
ActiveSheet.Cells(num_Row, num_Col)
MsgBox (MyRange.Address + _
" - имя ячейки " _
" с индексами " num_Row " и " num_Col)
15-06-Range Areas.xlsm - пример к п. 15.3.2.
Свойство возвращает коллекцию Areas, которая содержит все Range в выделенной области в том случае, если выделенная область содержит несмежные диапазоны ячеек. Эту коллекцию удобно использовать для обработки несмежных областей, выделенных пользователем. Например, листинг 15.16. выводит каждую из выделенных областей большой таблицы в отдельный лист.
'Для хранения исходной
'выделенной области
Dim obj_Area As Range
'Для хранения ссылки на
'отдельные диапазоны
Dim obj_Range As Range
'Для исходного листа
Dim obj_Sheet As Worksheet
'Для каждого из новых листов
Dim obj_OldSheet As Worksheet
'Присвоим ссылку на выделенную область
Set obj_Area = Selection
'Ссылка на активный лист
Set obj_OldSheet = ActiveSheet
'Для каждой несмежной области в
'выделении
For Each obj_Range In obj_Area.Areas
'Копируем эту область
obj_OldSheet.Activate
obj_Range.Select
Selection.Copy
'Создаем новый лист
'и вставляем в него
Set obj_Sheet = Worksheets.Add
obj_Sheet.Select
obj_Sheet.Paste
Next
15-07-Range Borders.xlsm - пример к п. 15.3.3.
Позволяет управлять границами ячеек. Границы ячеек обычно используются для оформления таблиц. Как правило, работа ведется с неким выделенным Border. Собственно говоря, самое важное свойство коллекции Borders - это Item, дающее доступ к отдельным объектам Border - то есть к границам. Остальные действия с границами проводятся с помощью свойств объектов Border.
Item - свойство, которое возвращает отдельную границу по индексу или имени границы. Принято использовать следующие имена границ:
xlDiagonalDown - диагональ из левого верхнего угла xlDiagonalUp - диагональ из левого нижнего угла xlEdgeBottom - нижняя внешняя границаxlEdgeLeft - левая внешняя границаxlEdgeRight - правая внешняя границаxlEdgeTop - верхняя внешняя границаxlInsideHorizontal - внутренние горизонтальные границыxlInsideVertical - внутренние вертикальные границыКогда выбрана граница, с которой вы хотите работать, можно использовать свойства объекта Border, в частности, следующие:
Color - позволяет задавать цвет границы. Для задания цвета можно использовать функцию RGB, которая по переданным ей значениям цветовых компонентов в формате RGB возвращает нужный цвет. Например, такой вызов этой функции возвратит красный цвет: RGB(255,0,0). Также здесь можно использовать цветовые константы: vbBlack, vbRed и т.д.
LineStyle - позволяет задавать тип линии. Здесь применимо несколько констант. В частности, следующие:
xlContinuous - непрерывная линияxlDash - линия, состоящая из черточекxlDashDot - линия с чередующимися точками и черточкамиxlDot - линия состоящая из точекxlDouble - двойная линияxlLineStyleNone - нет линийWeight - задает толщину линии при помощи указания одной из констант:
xlHairline - самая тонкая линияxlThin - тонкая линияxlMedium - линия средней толщиныxlThick - толстая линияДавайте рассмотрим пример (листинг 15.17.). Выведем набор значений в таблицу, отформатируем ее таким образом, чтобы внешние границы состояли из сплошных черных линий средней толщины, внутренние - из точечных тонких красных линий (рис. 15.3.)
Dim obj_Range As Range
'Добавляем в книгу новый лист
'он автоматически становится активным
Worksheets.Add
ActiveSheet.Name = "Новая таблица"
'заполняем небольшую таблицу данными
For i = 1 To 5
For j = 1 To 5
ActiveSheet.Cells(i + 1, j + 1) = _
Int(Rnd * 100)
Next j
Next i
'Свойство CurrentRegion возвращает
'заполненную данными область вокруг
'ячейки, для которой вызывается
Set obj_Range = ActiveSheet.Cells(i, j).CurrentRegion
'Настраиваем свойства каждой из границ
With obj_Range.Borders(xlEdgeLeft)
.LineStyle = xlDContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlInsideVertical)
.LineStyle = xlDot
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With obj_Range.Borders(xlInsideHorizontal)
.LineStyle = xlDot
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
(рис 15.3) Отформатированная таблица в документе
15-08-Range Cells.xlsm - пример к п. 15.3.4.
Свойство Cells позволяет обращаться к отдельным
Свойства Columns и Rows возвращают, соответственно, коллекции, которые содержат столбцы и строки диапазона. Например, так (листинг 15.18.) можно узнать количество строк в диапазоне, ссылка на который хранится в переменной obj_Range.
num_Rows = obj_Range.Rows.Count
Воспользуемся свойством Cell для диапазона размером 6х5 ячеек, чтобы заполнить этот диапазон данными (листинг 15.19.).
Dim obj_Range As Range
Set obj_Range = ActiveSheet.Range("B2:F7")
For i = 1 To obj_Range.Rows.Count
For j = 1 To obj_Range.Columns.Count
obj_Range.Cells(i, j) = _
Int(Rnd * 100)
Next j
Next i
Как видите, мы присваиваем ссылку на B2:F7 переменной obj_Range, после чего в цикле, используя свойство Cells для этой переменной, заполняем выбранный диапазон значениями. Еще раз обращаю ваше внимание на то, что свойство Cells для Range "работает" в пределах диапазона и
Возвращает Range, который представляет собой все заполненные данными
15-09-Range Font.xlsm - пример к п. 15.3.6.
Свойство Characters позволяет настраивать форматирование отдельных символов текста Font нужен для настройки параметров шрифта по Times New Roman, размером 15, красного цвета. А первый символ отформатируем курсивом (листинг 15.20.).
Dim obj_Range As Range
Set obj_Range = Selection
With obj_Range
.Font.Name = "Times New Roman"
.Font.Size = 15
.Font.Color = vbRed
.Characters(1, 1).Font.Italic = True
End With
Свойство Name объекта Font позволяет задать имя шрифта, Size - размер, Color - цвет. При работе с Characters мы задаем номер символа, с которого начинается форматирование, а так же - количество символов, начиная с первого. Чтобы отформатировать второй и третий символы, нам понадобилось бы вызвать это свойство так: Characters(2, 2) - два символа, начиная со второго.
15-10-Range Formula.xlsm - пример к п. 15.3.7.
позволяет записать в A1. Например, для записи в A1 суммы ячеек A2 и A3, нам понадобится такая команда (листинг 15.21.)
Range("A1").Formula = "=$A$2+$A$3"
Свойство FormulaR1C1 записывает в R1C1.
Рассмотрим пример. Программно создадим таблицу с числами и рассчитаем после каждого столбца и каждой строки таблицы суммы составляющих их элементов. Для расчетов сумм строк используем свойство , для расчета сумм по столбцам - FormulaR1C1 (листинг 15.22.).
'Для хранения ссылки на ячейку
'в которую запишем формулу
Dim obj_Range As Range
'Для хранения ссылки на первую
'ячейку диапазона (для формулы в стиле A1)
Dim obj_Range1 As Range
'Для хранения ссылки на последнюю
'ячейку диапазона (для формулы в стиле A1)
Dim obj_Range2 As Range
'Для сборки адресов ячеек в
'стиле R1C1
Dim str_R1C11 As String
Dim str_R1C12 As String
'Заполняем ячейки данными
For i = 1 To 5
For j = 1 To 5
ActiveSheet.Cells(i, j) = _
Int(Rnd * 100)
Next j
Next i
'Заполняем формулами ячейки, которые
'будут отображать суммы по строкам
For i = 1 To 5
'Ссылка на ячейку с формулой
Set obj_Range = ActiveSheet.Cells(i, 6)
'Ссылка на первую ячейку диапазона
Set obj_Range1 = ActiveSheet.Cells(i, 1)
'На последнюю ячейку
Set obj_Range2 = ActiveSheet.Cells(i, 5)
'Формула передается в ячейку в виде строки
'формируем строку такого вида:
'=SUM($A$1:$A$5)
obj_Range.Formula = _
"=sum(" + obj_Range1.Address + ":" + _
obj_Range2.Address + ")"
Next i
'Заполняем ячейки с суммами по
'столбцам
For i = 1 To 5
'ссылка на ячейку с формулой
Set obj_Range = ActiveSheet.Cells(6, i)
'Собираем ссылку на первую ячейку
'она будет иметь вид R1C1 для первого
'столбца, R1C2 для второго и т.д.
str_R1C11 = "R" + Mid(Str(1), 2, _
Len(Str(1)) - 1) + _
"C" + Mid(Str(i), 2, Len(Str(i)) - 1)
'Собираем ссылку на последнюю ячейку
'она будет иметь вид R5C1 для первого
'столбца, R5C2 для второго и т.д.
str_R1C12 = "R" + Mid(Str(5), 2, _
Len(Str(5)) - 1) + _
"C" + Mid(Str(i), 2, Len(Str(i)) - 1)
'Записываем в ячейку формулу вид
obj_Range.FormulaR1C1 = _
"=sum(" + str_R1C11 + ":" + _
str_R1C12 + ")"
Next i
Позволяет управлять внешним видом
Например, такой код (листинг 15.23.) позволяет окрасить
Range("A1").Interior.Color = vbRed
15-11-Range Name.xlsm - пример к п. 15.3.9.
Позволяет узнать или установить имя Names. Именами удобно пользоваться для автоматического заполнения каких-либо заранее созданных таблиц.
Рассмотрим пример. Создадим на рабочем листе
| Имя | (сюда будет введено имя) |
|---|---|
| Возраст | (сюда будет введен возраст) |
Дадим cell_Name и cell_Age.
Для задания имени щелкните правой кнопкой мыши по Имя диапазона (рис. 15.4.)
(рис 15.4) Задаем имя ячейке Заполните поле Имя, здесь же можно выбрать область видимости имени, ввести примечание и отредактировать, при необходимости, диапазон, для которого назначается имя.
Также для присвоения имени
Теперь добавим на лист кнопку и присвоим ее обработчику Click такой код (листинг 15.24.).
'Переменная для работы с ячейкой
Dim obj_Range As Range
'Переменная для адреса ячейки
Dim str_Name As String
'Так как имя ячейки возвращается
'в виде =лист1$A$1 мы вырезаем из
'переданного значения все, кроме знака =
str_Name = Mid( _
ActiveWorkbook.Names("cell_Name"), _
2, Len(ActiveWorkbook.Names("cell_Name")) - 1)
'Вводим в ячейку данные
Range(str_Name).Value = _
InputBox("Введите имя")
str_Name = Mid( _
ActiveWorkbook.Names("cell_Age"), _
2, Len(ActiveWorkbook.Names("cell_Age")) - 1)
Range(str_Name).Value = _
Val(InputBox("Введите возраст"))
Здесь мы используем коллекцию Names объекта ActiveWorkbook, чтобы обратиться к конкретной
Range("A1").Name = "cell_A"
По такой же схеме осуществляется работа с именованными диапазонами ячеек.
15-12-Range Value.xlsm - пример к п. 15.3.10.
Позволяет узнать или установить содержимое
Рассмотрим пример - здесь мы получаем с помощью свойства Value значение, хранящееся в vbCyan (голубой) (листинг 15.25.)
Dim obj_Cell As Range
For Each obj_Cell In ActiveSheet.Range("A1:E8")
If obj_Cell.Value < 0 Then
obj_Cell.Value = Abs(obj_Cell.Value)
obj_Cell.Interior.Color = vbCyan
End If
Next
В этой лекции мы обсудили особенности работы с Range, который предоставляет средства взаимодействия с
15-01-Excel Обращение к ячейкам.xlsm - пример к п. 15.1.
Мы добрались до ячеек, работа с которыми осуществляется, в основном, через Range. Выше мы немного работали с
Выше мы уже обращались к
Можно адресовать A1. Здесь и далее мы используем метод Select Range, который выделяет
ActiveSheet.Range("A2").Select
Для обращения к диапазону ячеек нужно знать верхнюю левую и нижнюю правую границы диапазона. Например, для обращения к диапазону высотой в одну строку от A2 до E2 или к диапазону A2:E4 - понадобится такой код (листинг 15.2.)
ActiveSheet.Range("A2:E2").Select
ActiveSheet.Range("A2:E4").Select
Можно воспользоваться конструкцией с использованием объекта Cells, который позволяет обращаться к отдельной R1C1. Чтобы обратиться к
ActiveSheet.Cells(5,1).Select
Можно объединить использование Range и Cells, указав координаты ячеек при адресации диапазона с помощью Cells (листинг 15.4.).
ActiveSheet.Range(Cells(5, 4), _
Cells(7, 5)).Select
Нам уже встречалось использование Cells для доступа к группам ячеек в цикле - в качестве индексов ячеек можно использовать переменные (листинг 15.5.)
For i = 1 To 3
For j = 1 To 3
ActiveSheet.Cells(i, j).Select
Application.Wait (Now + _
TimeValue("0:00:01"))
p = p + 1
Selection = p
Next j
Next i
ActiveSheet.Range("A1:E5").Clear
Здесь мы циклически выделяем A1:C3, делая задержку на 1 секунду после каждого выделения и выводя количество прошедших с начала работы программы секунд. Здесь мы воспользовались для выделения Select, а для ввода данных в выделенную Selection, который в данном случае ссылается на выделенную A1:E5 от введенных данных.
Объект Selection - это еще один способ работы с
Выше мы использовали прямое обращение к
Dim obj_MyCells As Range Set obj_MyCells = ActiveSheet.Cells(5, 5) obj_MyCells.Select
Помимо обращения к отдельным
В листинге 15.7 мы сначала выделяем столбец A, потом столбец B, используя коллекцию Columns (столбцы), 3-ю строку, используя коллекцию Rows (строки) а далее - лист целиком.
ActiveSheet.Range("A:A").Select
ActiveSheet.Columns("B:B").Select
ActiveSheet.Range("3:3").Select
ActiveSheet.Rows("4:4").Select
ActiveSheet.Cells.Select
Еще один способ обращения к Names ) мы рассмотрим ниже. А теперь поговорим о методах и свойствах Range.
15-02-Range Activate.xlsm - пример к п. 15.2.1.
Позволяет выбрать Activate метод Select, то
Например, в листинге 15.8. мы сначала выделили
Range("A1:E5").Select
Range("C2").Activate
Позволяет добавлять комментарии к
Range("C3").AddComment ("Проверка комментария")
В правом верхнем углу
(рис 15.1) Комментарий в ячейке MS Excel
Позволяет автоматически подстроить ширину столбцов и высоту строк, входящих в диапазон. Это удобно делать, чтобы придать автоматически генерируемым таблицам привлекательный вид.
Метод можно применять как к диапазону, так и к отдельным строкам или столбцам.
Например, код в листинге 15.10. позволяет автоматически подобрать ширину столбцов A, B, C, D, E, руководствуясь данными, расположенными в первой строке этих столбцов. Если в других строках столбцов будут более длинные значения - они не будут приняты во внимание.
ActiveSheet.Range("A1:E1").Columns.AutoFit
Мы не случайно обращаемся здесь к свойству Columns Range - иначе метод AutoFit не работает. Если же в подобном вызове не задавать конкретной строки, а выполнить эту команду так (листинг 15.11.), то ширина столбцов A - E будет подстроена таким образом, чтобы наилучшим образом вместить самое длинное из значений, хранящихся в
ActiveSheet.Range("A:E").Columns.AutoFit
Метод Clear позволяет очистить диапазон - он удаляет данные и форматирование из ячеек. Например, в листинге 15.12. мы очищаем от форматирования сначала диапазон A1:E5, а потом - весь лист.
ActiveSheet.Range("A1:E5").Clear
Activesheet.Cells.Select
Selection.Clear
Другие методы, название которых начинается с Clear, позволяют очищать
ClearContents очищает содержимое ячеек, не затрагивая форматирование. Если вы выделите Del на клавиатуре - вы добъетесь того же эффекта.
ClearFormats очищает лишь форматирование ячеек, не затрагивая содержимого.
Выше мы уже рассматривали команды для работы с буфером обмена в Copy копирует содержимое диапазона в буфер обмена, Cut - вырезает, PasteSpecial осуществляет специальную вставку.
Как ни странно, Range не поддерживает метод Paste, осуществляющий обычную вставку, однако, этот метод поддерживает объект .
Удаляет выделенный диапазон - остальные
15-03-Range Merge.xlsm - пример к п. 15.2.7.
Merge позволяет создать одну объединенную
UnMerge разбивает объединенную
Объединенные
В листинге 15.13. мы программно формируем таблицу шириной в 10 ячеек. Заполняем ее данными, автоматически подстраиваем ширину столбцов под введенные значения. После этого вводим в левую верхнюю
'Заполняем область C3:L2
'случайными целыми числами
For i = 1 To 10
For j = 1 To 10
ActiveSheet.Cells(i + 2, j + 2) = _
Int(Rnd * 100)
Next j
Next i
'Выравниваем размер столбцов
ActiveSheet.Range("C:L").Columns.AutoFit
'Записываем название таблицы
'в ячейку верхней строчки
Range("C2") = "Название таблицы"
'Объединяем ячейки над таблицей
Range("C2:L2").Merge
(рис 15.2) Название таблицы в объединенной ячейке
15-04-Range Select.xlsm — пример к п. 7.7.2.8.
Выделяет Selection. Так же этот объект можно использовать для работы с
Например, в листинге 15.14. мы находим сумму чисел, которые хранятся в
Dim obj_Range As Range
Dim num_Sum
'Обращаемся к каждой ячейке
'в выделенной области
For Each obj_Range In Selection.Cells
num_Sum = num_Sum + Val(obj_Range)
Next
MsgBox ("Сумма выделенных ячеек: " _
num_Sum)
15-05-Range Address.xlsm - пример к п. 15.3.1.
Возвращает строку, представляющую собой адрес A1. Адрес выводится в абсолютном виде - снабжается знаками $.
Листинг 15.15 позволяет, задав адрес ячейки в виде R1C1, вывести ее адрес в формате A1.
Dim num_Row
Dim num_Col
Dim MyRange As Range
num_Row = Val(InputBox("Введите строку"))
num_Col = Val(InputBox("Введите столбец"))
Set MyRange = _
ActiveSheet.Cells(num_Row, num_Col)
MsgBox (MyRange.Address + _
" - имя ячейки " _
" с индексами " num_Row " и " num_Col)
15-06-Range Areas.xlsm - пример к п. 15.3.2.
Свойство возвращает коллекцию Areas, которая содержит все Range в выделенной области в том случае, если выделенная область содержит несмежные диапазоны ячеек. Эту коллекцию удобно использовать для обработки несмежных областей, выделенных пользователем. Например, листинг 15.16. выводит каждую из выделенных областей большой таблицы в отдельный лист.
'Для хранения исходной
'выделенной области
Dim obj_Area As Range
'Для хранения ссылки на
'отдельные диапазоны
Dim obj_Range As Range
'Для исходного листа
Dim obj_Sheet As Worksheet
'Для каждого из новых листов
Dim obj_OldSheet As Worksheet
'Присвоим ссылку на выделенную область
Set obj_Area = Selection
'Ссылка на активный лист
Set obj_OldSheet = ActiveSheet
'Для каждой несмежной области в
'выделении
For Each obj_Range In obj_Area.Areas
'Копируем эту область
obj_OldSheet.Activate
obj_Range.Select
Selection.Copy
'Создаем новый лист
'и вставляем в него
Set obj_Sheet = Worksheets.Add
obj_Sheet.Select
obj_Sheet.Paste
Next
15-07-Range Borders.xlsm - пример к п. 15.3.3.
Позволяет управлять границами ячеек. Границы ячеек обычно используются для оформления таблиц. Как правило, работа ведется с неким выделенным Border. Собственно говоря, самое важное свойство коллекции Borders - это Item, дающее доступ к отдельным объектам Border - то есть к границам. Остальные действия с границами проводятся с помощью свойств объектов Border.
Item - свойство, которое возвращает отдельную границу по индексу или имени границы. Принято использовать следующие имена границ:
xlDiagonalDown - диагональ из левого верхнего угла xlDiagonalUp - диагональ из левого нижнего угла xlEdgeBottom - нижняя внешняя границаxlEdgeLeft - левая внешняя границаxlEdgeRight - правая внешняя границаxlEdgeTop - верхняя внешняя границаxlInsideHorizontal - внутренние горизонтальные границыxlInsideVertical - внутренние вертикальные границыКогда выбрана граница, с которой вы хотите работать, можно использовать свойства объекта Border, в частности, следующие:
Color - позволяет задавать цвет границы. Для задания цвета можно использовать функцию RGB, которая по переданным ей значениям цветовых компонентов в формате RGB возвращает нужный цвет. Например, такой вызов этой функции возвратит красный цвет: RGB(255,0,0). Также здесь можно использовать цветовые константы: vbBlack, vbRed и т.д.
LineStyle - позволяет задавать тип линии. Здесь применимо несколько констант. В частности, следующие:
xlContinuous - непрерывная линияxlDash - линия, состоящая из черточекxlDashDot - линия с чередующимися точками и черточкамиxlDot - линия состоящая из точекxlDouble - двойная линияxlLineStyleNone - нет линийWeight - задает толщину линии при помощи указания одной из констант:
xlHairline - самая тонкая линияxlThin - тонкая линияxlMedium - линия средней толщиныxlThick - толстая линияДавайте рассмотрим пример (листинг 15.17.). Выведем набор значений в таблицу, отформатируем ее таким образом, чтобы внешние границы состояли из сплошных черных линий средней толщины, внутренние - из точечных тонких красных линий (рис. 15.3.)
Dim obj_Range As Range
'Добавляем в книгу новый лист
'он автоматически становится активным
Worksheets.Add
ActiveSheet.Name = "Новая таблица"
'заполняем небольшую таблицу данными
For i = 1 To 5
For j = 1 To 5
ActiveSheet.Cells(i + 1, j + 1) = _
Int(Rnd * 100)
Next j
Next i
'Свойство CurrentRegion возвращает
'заполненную данными область вокруг
'ячейки, для которой вызывается
Set obj_Range = ActiveSheet.Cells(i, j).CurrentRegion
'Настраиваем свойства каждой из границ
With obj_Range.Borders(xlEdgeLeft)
.LineStyle = xlDContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlMedium
End With
With obj_Range.Borders(xlInsideVertical)
.LineStyle = xlDot
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
With obj_Range.Borders(xlInsideHorizontal)
.LineStyle = xlDot
.Color = RGB(255, 0, 0)
.Weight = xlThin
End With
(рис 15.3) Отформатированная таблица в документе
15-08-Range Cells.xlsm - пример к п. 15.3.4.
Свойство Cells позволяет обращаться к отдельным
Свойства Columns и Rows возвращают, соответственно, коллекции, которые содержат столбцы и строки диапазона. Например, так (листинг 15.18.) можно узнать количество строк в диапазоне, ссылка на который хранится в переменной obj_Range.
num_Rows = obj_Range.Rows.Count
Воспользуемся свойством Cell для диапазона размером 6х5 ячеек, чтобы заполнить этот диапазон данными (листинг 15.19.).
Dim obj_Range As Range
Set obj_Range = ActiveSheet.Range("B2:F7")
For i = 1 To obj_Range.Rows.Count
For j = 1 To obj_Range.Columns.Count
obj_Range.Cells(i, j) = _
Int(Rnd * 100)
Next j
Next i
Как видите, мы присваиваем ссылку на B2:F7 переменной obj_Range, после чего в цикле, используя свойство Cells для этой переменной, заполняем выбранный диапазон значениями. Еще раз обращаю ваше внимание на то, что свойство Cells для Range "работает" в пределах диапазона и
Возвращает Range, который представляет собой все заполненные данными
15-09-Range Font.xlsm - пример к п. 15.3.6.
Свойство Characters позволяет настраивать форматирование отдельных символов текста Font нужен для настройки параметров шрифта по Times New Roman, размером 15, красного цвета. А первый символ отформатируем курсивом (листинг 15.20.).
Dim obj_Range As Range
Set obj_Range = Selection
With obj_Range
.Font.Name = "Times New Roman"
.Font.Size = 15
.Font.Color = vbRed
.Characters(1, 1).Font.Italic = True
End With
Свойство Name объекта Font позволяет задать имя шрифта, Size - размер, Color - цвет. При работе с Characters мы задаем номер символа, с которого начинается форматирование, а так же - количество символов, начиная с первого. Чтобы отформатировать второй и третий символы, нам понадобилось бы вызвать это свойство так: Characters(2, 2) - два символа, начиная со второго.
15-10-Range Formula.xlsm - пример к п. 15.3.7.
позволяет записать в A1. Например, для записи в A1 суммы ячеек A2 и A3, нам понадобится такая команда (листинг 15.21.)
Range("A1").Formula = "=$A$2+$A$3"
Свойство FormulaR1C1 записывает в R1C1.
Рассмотрим пример. Программно создадим таблицу с числами и рассчитаем после каждого столбца и каждой строки таблицы суммы составляющих их элементов. Для расчетов сумм строк используем свойство , для расчета сумм по столбцам - FormulaR1C1 (листинг 15.22.).
'Для хранения ссылки на ячейку
'в которую запишем формулу
Dim obj_Range As Range
'Для хранения ссылки на первую
'ячейку диапазона (для формулы в стиле A1)
Dim obj_Range1 As Range
'Для хранения ссылки на последнюю
'ячейку диапазона (для формулы в стиле A1)
Dim obj_Range2 As Range
'Для сборки адресов ячеек в
'стиле R1C1
Dim str_R1C11 As String
Dim str_R1C12 As String
'Заполняем ячейки данными
For i = 1 To 5
For j = 1 To 5
ActiveSheet.Cells(i, j) = _
Int(Rnd * 100)
Next j
Next i
'Заполняем формулами ячейки, которые
'будут отображать суммы по строкам
For i = 1 To 5
'Ссылка на ячейку с формулой
Set obj_Range = ActiveSheet.Cells(i, 6)
'Ссылка на первую ячейку диапазона
Set obj_Range1 = ActiveSheet.Cells(i, 1)
'На последнюю ячейку
Set obj_Range2 = ActiveSheet.Cells(i, 5)
'Формула передается в ячейку в виде строки
'формируем строку такого вида:
'=SUM($A$1:$A$5)
obj_Range.Formula = _
"=sum(" + obj_Range1.Address + ":" + _
obj_Range2.Address + ")"
Next i
'Заполняем ячейки с суммами по
'столбцам
For i = 1 To 5
'ссылка на ячейку с формулой
Set obj_Range = ActiveSheet.Cells(6, i)
'Собираем ссылку на первую ячейку
'она будет иметь вид R1C1 для первого
'столбца, R1C2 для второго и т.д.
str_R1C11 = "R" + Mid(Str(1), 2, _
Len(Str(1)) - 1) + _
"C" + Mid(Str(i), 2, Len(Str(i)) - 1)
'Собираем ссылку на последнюю ячейку
'она будет иметь вид R5C1 для первого
'столбца, R5C2 для второго и т.д.
str_R1C12 = "R" + Mid(Str(5), 2, _
Len(Str(5)) - 1) + _
"C" + Mid(Str(i), 2, Len(Str(i)) - 1)
'Записываем в ячейку формулу вид
obj_Range.FormulaR1C1 = _
"=sum(" + str_R1C11 + ":" + _
str_R1C12 + ")"
Next i
Позволяет управлять внешним видом
Например, такой код (листинг 15.23.) позволяет окрасить
Range("A1").Interior.Color = vbRed
15-11-Range Name.xlsm - пример к п. 15.3.9.
Позволяет узнать или установить имя Names. Именами удобно пользоваться для автоматического заполнения каких-либо заранее созданных таблиц.
Рассмотрим пример. Создадим на рабочем листе
| Имя | (сюда будет введено имя) |
|---|---|
| Возраст | (сюда будет введен возраст) |
Дадим cell_Name и cell_Age.
Для задания имени щелкните правой кнопкой мыши по Имя диапазона (рис. 15.4.)
(рис 15.4) Задаем имя ячейке Заполните поле Имя, здесь же можно выбрать область видимости имени, ввести примечание и отредактировать, при необходимости, диапазон, для которого назначается имя.
Также для присвоения имени
Теперь добавим на лист кнопку и присвоим ее обработчику Click такой код (листинг 15.24.).
'Переменная для работы с ячейкой
Dim obj_Range As Range
'Переменная для адреса ячейки
Dim str_Name As String
'Так как имя ячейки возвращается
'в виде =лист1$A$1 мы вырезаем из
'переданного значения все, кроме знака =
str_Name = Mid( _
ActiveWorkbook.Names("cell_Name"), _
2, Len(ActiveWorkbook.Names("cell_Name")) - 1)
'Вводим в ячейку данные
Range(str_Name).Value = _
InputBox("Введите имя")
str_Name = Mid( _
ActiveWorkbook.Names("cell_Age"), _
2, Len(ActiveWorkbook.Names("cell_Age")) - 1)
Range(str_Name).Value = _
Val(InputBox("Введите возраст"))
Здесь мы используем коллекцию Names объекта ActiveWorkbook, чтобы обратиться к конкретной
Range("A1").Name = "cell_A"
По такой же схеме осуществляется работа с именованными диапазонами ячеек.
15-12-Range Value.xlsm - пример к п. 15.3.10.
Позволяет узнать или установить содержимое
Рассмотрим пример - здесь мы получаем с помощью свойства Value значение, хранящееся в vbCyan (голубой) (листинг 15.25.)
Dim obj_Cell As Range
For Each obj_Cell In ActiveSheet.Range("A1:E8")
If obj_Cell.Value < 0 Then
obj_Cell.Value = Abs(obj_Cell.Value)
obj_Cell.Interior.Color = vbCyan
End If
Next
В этой лекции мы обсудили особенности работы с Range, который предоставляет средства взаимодействия с
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.