Книга: Excel. Трюки и эффекты
Быстрое заполнение диапазона
Разделы на этой странице:
Быстрое заполнение диапазона
Рассмотрим несколько несложных трюков, с помощью которых можно быстро заполнить любой диапазон необходимыми данными.
Первый способ
Предположим, что нам необходимо заполнить какой-нибудь диапазон последовательностью чисел от 1 до 100. Для решения этой задачи удобно воспользоваться макросом, код которого приведен в листинге 2.22 (этот код следует набрать в стандартном модуле редактора VBA).
Листинг 2.22. Быстрое заполнение диапазона
Sub FillCells()
Dim intStartVal As Integer ' Начальное значение
Dim intStep As Integer ' Шаг при изменении значения
Dim intEndVal As Integer ' Конечное значение
Dim intVal As Integer ' Текущее значение
Dim intCellOffset As Integer ' Смещение от начальной ячейки
' Установка параметров заполнения
intStartVal = 1
intStep = 1
intEndVal = 100
' Заполнение ячеек текущего столбца значениями от 1 до 100
For intVal = intStartVal To intEndVal Step intStep
ActiveCell.Offset(intCellOffset, 0).Value = intVal
intCellOffset = intCellOffset + 1
Next intVal
End Sub
Сразу после выполнения макроса диапазон, расположенный ниже текущей ячейки (в том же столбце), будет заполнен числами от 1 до 100 (заполнение начнется с активной ячейки).
Приведенный выше код можно изменять по своему усмотрению и таким образом корректировать длину последовательности, шаг и иные параметры. Например, можно применить такой код (листинг 2.23).
Листинг 2.23. Заполнение через интервал
Sub FillCells()
Dim intStartVal As Integer ' Начальное значение
Dim intStep As Integer ' Шаг при изменении значения
Dim intEndVal As Integer ' Конечное значение
Dim intVal As Integer ' Текущее значение
Dim intCellOffset As Integer ' Смещение от начальной ячейки
Dim intCellStep As Integer ' Шаг при перемещении между _
заполняемыми ячейками
' Установка параметров заполнения
intStartVal = 3
intStep = 3
intEndVal = 30
intCellStep = 3
' Заполнение ячеек текущего столбца значениями от 3 до 30
For intVal = intStartVal To intEndVal Step intStep
ActiveCell.Offset(intCellOffset, 0).Value = intVal
intCellOffset = intCellOffset + intCellStep
Next intVal
End Sub
После выполнения данного макроса последовательность будет заполнена числами с 3 до 30, причем числа будут расположены в каждой третьей ячейке следующим образом: 3 (активная ячейка), 6, 9, 12…., 27, 30.
Второй способ
Допустим, что нам нужно быстро заполнить диапазон, состоящий из 10 ячеек в высоту и 5 ячеек в ширину, последовательностью чисел, расположенных по порядку от 1 до 50. Для решения данной задачи напишем в стандартном модуле редактора VBA представленный ниже код (листинг 2.24).
Листинг 2.24. Заполнение указанного диапазона
Sub FillCellRect()
Dim lngRows As Long, intCols As Integer ' Количество ячеек по _
горизонтали и вертикали
Dim lngRows As Long, intCol As Integer ' Координаты текущей
ячейки
Dim lngStep As Long, lngVal As Long
' Установка начального значения и шага заполнения
lngVal = 1
lngStep = 1
' Ввод количества ячеек по горизонтали и вертикали, которое _
необходимо заполнить
lngRows = Val(InputBox(«Количество ячеек в высоту»))
intCols = Val(InputBox(«Количество ячеек в ширину»))
' Отключение обновления экрана
Application.ScreenUpdating = False
' Заполнение ячеек значениями
For lngRow = 0 To lngRows – 1
For intCol = 0 To intCols – 1
ActiveCell.Offset(lngRow, intCol).Value = lngVal
lngVal = lngVal + lngStep
Next intCol
Next lngRow
' Включение обновления экрана
Application.ScreenUpdating = True
End Sub
В результате написания кода будет создан макрос FillCellRect. После его запуска откроется окно, в котором с клавиатуры нужно ввести количество ячеек в высоту (в нашем примере нужно указать значение 10). После нажатия в данном окне кнопки О К откроется аналогичное окно, в котором точно так же нужно ввести количество ячеек в ширину (в нашем примере нужно задать 5) и нажать ОК. После этого в соответствии с выполненными настройками будет автоматически заполнен диапазон, начиная с ячейки, которая была выделена (данная ячейка будет являться левой верхней в заполненном диапазоне). Изменив соответствующим образом код макроса, можно корректировать шаг последовательности, ее первое число (в строке IngVal = 1, которая входит в состав приведенного выше кода, указано, что первое число последовательности – 1) и другие параметры.
Третий способ
Данный способ заполнения диапазона также предусматривает написание макроса. Его преимущество состоит в том, что он быстрее способа, о котором рассказано в предыдущем примере. Код макроса (он должен быть написан в стандартном модуле редактора VBA) выглядит следующим образом (листинг 2.25).
Листинг 2.25. Заполнение диапазона
Sub FillCellRect1()
Dim lngRows As Long, intCols As Integer
Dim lngRow As Long, intCol As Integer
Dim lngStep As Long, lngVal As Long
Dim alngValues() As Long
Dim rgRange As Range
' Установка начального значения и шага заполнения
lngVal = 1
lngStep = 1
' Ввод количества ячеек по горизонтали и вертикали, которое _
необходимо заполнить
lngRows = Val(InputBox(«Количество ячеек в высоту»))
intCols = Val(InputBox(«Количество ячеек в ширину»))
ReDim alngValues(1 To lngRows, 1 To intCols)
Set rgRange = ActiveCell.Range(Cells(1, 1), _
Cells(lngRows, intCols))
' Заполнение массива alngValues значениями
For lngRow = 1 To lngRows
For intCol = 1 To intCols
alngValues(lngRow, intCol) = lngVal
lngVal = lngVal + lngStep
Next intCol
Next lngRow
' Перенос значений из массива в таблицу
rgRange.Value = alngValues
End Sub
Порядок заполнения диапазона такой же, как и в предыдущем примере, – после запуска макроса нужно последовательно указать количество ячеек в высоту и ширину. Результатом работы макроса будет заполненный диапазон (начиная с активной ячейки). Так же, как и в предыдущем примере, для изменения параметров заполнения диапазона (начальное число последовательности, шаг и др.) можно внести соответствующие изменения в код макроса.
Более высокая скорость работы данного алгоритма достигается благодаря тому, что сначала формируется двухмерный массив со значениями. Этот массив целиком передается объекту Range. Тем самым мы избегаем множества обращений к таблице, заменяя их одним, но эффективным.
- Быстрое заполнение ячеек
- Автоматизация ввода данных в ячейки
- Ввод дробных чисел
- Сбор данных из разных ячеек
- Выделение диапазона над текущей ячейкой
- Поиск ближайшей пустой ячейки столбца
- Поиск максимального значения в диапазоне
- Автоматическая замена значений диапазона
- Засекречивание содержимого ячейки
- Всем ячейкам диапазона – одно значение
- Добавление в ячейку раскрывающегося списка
- Быстрое заполнение диапазона
- Гиперссылки – в виде обычного текста
- Помещение в ячейку электронных часов
- «Будильник»
- Поиск данных в диапазоне
- Создание цветной границы диапазона
- Автоматическое определение адреса ячейки
- Автоматизация добавления примечаний в указанном диапазоне
- Заливка диапазона
- Ввод строго ограниченных значений в указанный диапазон
- Последовательный ввод данных
- Быстрое выделение ячеек с отрицательными значениями
- Получение информации о выделенном диапазоне
- Кнопка для изменения числового формата ячейки
- Тестирование скорости чтения и записи диапазонов
- Создание цветной границы диапазона
- Заливка диапазона
- Быстрое заполнение ячеек
- Выделение диапазона над текущей ячейкой
- Заполнение справочников и каталогов
- 6.2. Создание и автоматическое заполнение бланков стандартных документов
- 6.2.2. Нахождение границ диапазона
- Чем отличается быстрое форматирование от обычного?
- Быстрое размножение формул
- 7.2. Усилители диапазона СВЧ
- Урок 6.2. Работа с ячейками, диапазонами и листами
- Автозаполнение