Макросы, создаваемые с помощью макрорекордера. Упражнение 14. «День рождения». Задание. Создать макрос, который фильтрует список сотрудников (табл. 24) и отбирает всех, у кого день рождения в этом месяце. Затем копирует результат фильтрации и размещает на другом листе. Примечание. Так как в упражнении используется связь с системной датой компьютера, результаты приведены по состоянию на 15 апреля 2006 г. При выполнении упражнения в другом месяце результаты фильтрации будут другие.
Таблица 24
| A
| B
| C
| D
| E
| F
| 1
| Список
|
|
|
|
|
| 2
| №пп
| Фамилия
| Дата рождения
| Возраст
| Месяц рождения
| День рождения в этом месяце
| 3
| 1
| Абрамов
| 12 Декабрь, 1950
| 55
| 12,00
|
| 4
| 2
| Иванов
| 20 Апрель, 1989
| 16
| 4,00
| !!
| 5
| 3
| Петров
| 11 Ноябрь, 1970
| 35
| 11,00
|
| 6
| 4
| Николаева
| 12 Март, 1978
| 28
| 3,00
|
| 7
| 5
| Гиясова
| 1 Апрель, 1910
| 96
| 1,00
| !!
| 8
| 6
| Гончаренко
| 12 Февраль, 1915
| 91
| 2,00
|
| 9
| 7
| Грицай
| 12 Июнь, 1977
| 28
| 6,00
|
| 10
| 8
| Дудина
| 3 Март, 1999
| 07
| 3,00
|
| 11
| 9
| Зеров
| 9 Сентябрь, 1980
| 25
| 9,00
|
|
Порядок выполнения.
Создать шапку таблицы и внести первичные данные – столбцы «№пп», «Фамилия» и «Дата рождения». Дату нужно вносить числами в формате дд.мм.гггг, а затем форматировать через ФОРМАТ – ЯЧЕЙКИ... (см. лабораторную работу 2).
Возраст с учётом даты создаётся выражением СЕГОДНЯ()-С3 с последующим заданием дополнительного формата числа «ГГ» (см. лабораторную работу 2).
Месяц подсчитать выражением МЕСЯЦ(С3) с помощью мастера функций.
В столбце «День рождения в этом месяце» нужно применить оператор мастера функции категории ЛОГИЧЕСКИЕ «ЕСЛИ» (рис. 62).
Рис.62.
Запись “”(две кавычки подряд) в синтаксисе Visual Basic означает пустую строку.
Дать имя листу «Список». Создать новый лист. Назвать его «Дни рождения текущего месяца».
Создать фильтрацию вручную, без макроса. Для этого нужно выполнить следующие действия:
на листе «Список» выделить область заголовков А2:F2.
выбрать пункт меню ДАННЫЕ –ФИЛЬТР АВТОФИЛЬТР. В результате в каждом заголовке появится разворачивающийся список.
развернуть список критериев для столбца F и выбрать «!!». В результате создастся список из двух сотрудников –Иванова и Гиясовой.
выделить новую таблицу , скопировать её . Так как в общем случае неизвестно, сколько строк будет содержать таблица, выделять лучше столбцы А:F.
активизировать лист «Дни рождения текущего месяца». Установить курсор в ячейке А1 и дать команду ПРАВКА – ВСТАВИТЬ.
в ячейку А1 внести текст : Дни рождения в этом месяце.
активизировать лист «Список». Завершить режим фильтрации, дать команду ДАННЫЕ – ФИЛЬТР – АВТОФИЛЬТР.
активизировать лист «Дни рождения текущего месяца». В ячейку G1 внести текст : «Чтобы обновить , наберите CTRL+d».
Чтобы не выполнять эту процедуру многократно вручную, можно записать все действия и в последующем вызывать их сочетанием клавиш, например, CTRL+d. Перед записью нужно построить четкий алгоритм действий, лучше записать его, чтобы не сбиваться во время действия макрорекордера. В данном упражнении нужно выполнить следующую последовательность действий.
сделать активным лист «Список».
вызвать макрорекордер через пункт меню Сервис –макрос- начать запись.
дать имя макросу «День_рождения». Задать сочетание клавиш CTRL+d.
с помощью макрорекордера записать следующие действия:
Активизировать лист «Дни рождения».
На листе «Дни рождения» выделить столбцы A:F и удалить их содержимое (нажать Delete).
Перейти на лист «Список», выделить область заголовков А2:F2.
Выбрать пункт меню Данные- фильтр- автофильтр.
Развернуть список критериев в столбце «Дни рождения в этом месяце» и выбрать критерий «!!».
На листе «Список» выделить столбцы А:F и дать команду «копировать».
Перейти на лист «Дни рождения», установить курсор в ячейку А1 и дать команду «Вставить»
В ячейку А1 внести текст «Дни рождения в этом месяце»
Перейти на лист «Список», восстановить таблицу- выбрать пункт меню ДАННЫЕ-ФИЛЬТР-АВТОФИЛЬТР.
Сделать активным лист «Дни рождения».
Остановить запись.
Можно убедиться, что создался текст макроса, если выбрать пункт меню СЕРВИС- МАКРОС – МАКРОСЫ, указать на макрос «День_рождения» и щёлкнуть по кнопке Изменить. Текст макроса будет следующим:
Sub День_рождения()
' Сочетание клавиш: Ctrl+d
Sheets("Дни рождения").Select
Columns("A:F").Select
Selection.ClearContents
Sheets("Список").Select
Range("A2:F2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=6, Criteria1:="!!"
Columns("A:F").Select
Selection.Copy
Sheets("Дни рождения").Select
Range("A1").Select
ActiveSheet.Paste
Columns("D:D").ColumnWidth = 14.14
Columns("C:C").ColumnWidth = 14.71
Columns("C:C").ColumnWidth = 16.71
Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Дни рождения в этом месяце"
Sheets("Список").Select
Selection.AutoFilter
Range("A2").Select
Sheets("Дни рождения").Select
End Sub
Закрыть Visual Basic .
Проверить работу макроса. Изменить базу данных –сделать день рождения Дудиной тоже в апреле. Запустить макрос и убедиться, что список на листе «Дни рождения текущего месяца» обновился.
Вопросы к практической работе.
Значения в столбце «Месяц» можно вычислять с помощью мастера функций выражением Месяц(«День рождения»),как в практической работе, а можно форматированием даты рождения, создав дополнительный формат «ММ». В чём разница данных, полученных этими способами?
|