Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

624

.pdf
Скачиваний:
0
Добавлен:
06.12.2022
Размер:
2.74 Mб
Скачать

7. Остановите запись, нажав кнопку «Остановить запись» или выполнив команду Сервис Макрос Остановить запись.

Итак, макрос записан. Его текст можно увидеть, задав команду Сервис Макрос Макросы, выбрав из списка макросов имя «Шапка» и нажав кнопку диалогового окна «Изменить». Пояснения сделаны вручную.

Макрос будет иметь вид:

Sub Шапка() Range(“A2”).Select

ActiveCell.FormulaR1C1 = “Номер километра” Range(“B2”).Select

ActiveCell.FormulaR1C1 = “Длина километра, м” Range(“C2”).Select

ActiveCell.FormulaR1C1 = “Тип рельса” Range(“D2”).Select

ActiveCell.FormulaR1C1 = “Длина рельса, м” Range(“E2”).Select

ActiveCell.FormulaR1C1 = “Число дефектных рельсов в километре”

Range(“F2”).Select

ActiveCell.FormulaR1C1 = “Тип скрепления” Range(“G2”).Select

ActiveCell.FormulaR1C1 = “Негодные скрепления, %” Range(“H2”).Select

ActiveCell.FormulaR1C1 = “Тип шпал” Range(“I2”).Select

ActiveCell.FormulaR1C1 = “Материал шпал” Range(“J2”).Select

ActiveCell.FormulaR1C1 = “Общее число шпал” Range(“K2”).Select

ActiveCell.FormulaR1C1 = “Число негодных шпал” Range(“L2”).Select

ActiveCell.FormulaR1C1 = “% негодных шпал” Range(“M2”).Select

ActiveCell.FormulaR1C1 = “Загрязненность балласта, %” Range(“N2”).Select

ActiveCell.FormulaR1C1 = “Потребность в среднем ремонте”

Range(“N3”).Select ActiveWindow.SmallScroll ToRight:=-3 Range(“A2:N2”).Select

With Selection ‘назначение на выделение параметров выравнивания

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = True

.Orientation = 0

3 1

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

 

With Selection.Font

назначение на выделение параметров шрифтов

.Name = “Arial Cyr”

.FontStyle = “полужирный”

.Size = 8

 

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

 

Range(“A1”).Select

 

With Selection.Font

назначение шрифтов на название таблицы

.Name = “Arial Cyr”

.FontStyle = “полужирный”

.Size = 14

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic End With

ActiveCell.FormulaR1C1 = “Сведения о состоянии пути ПЧ”

Range(“A1:N1”).Select

 

With Selection

назначение параметров выравнивания

.HorizontalAlignment = xlCenter

.VerticalAlignment =

xlBottom

.WrapText = False

 

.Orientation = 0

 

.AddIndent = False

 

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False End With Selection.Merge

End Sub

3 2

8.Модуль, в котором получили макрос «Шапка», переименуйте в «Отчеты».

9.Проверьте работу макроса, запустив его с листа Расчет-

ная таблица командой Сервис Макрос Макросы, выбрав из списка макросов имя «Шапка» и нажав кнопку диалогового окна «Выполнить».

Задание 2. Напишите макрос для копирования данных из базы с листа «Базы данных» на лист «Расчетная таблица» и заполнения расчетных граф.

По ря д ок р або т ы

1.Макрос создается ручным способом в редакторе VBA. Создавать его желательнов том же модуле, в котором находится полученный автозаписью макрос «Шапка» (модуль «Отчеты»). Поэтому войти в редактор VBA можно, выполнив те же действия, что и для просмотра макроса «Шапка» (набрать команду Сервис Макрос Макросы, выбрать из списка макросов имя «Шапка» и нажать кнопку диалогового окна «Изменить»).

2.Набрать за процедурой «Шапка» следующий текст:

Sub Расчет()

Application.ScreenUpdating = False ‘Отключение возможности обновле-

ния экрана, в результате экран не будет мигать

n = Sheets(“База данных”).UsedRange.Rows.Count + 1 ‘номер последней занятой строки в таблице

Worksheets(“Расчетная таблица”).Select

Cells.Clear ‘ Очистка ячеек листа Расчетная таблица Шапка ‘Обращение к макросу формирования шапки таблицы s5 = 0 ‘Очистка переменной для получения суммы по гр. 5 s7 = 0 ‘Очистка переменной для получения суммы по гр. 7 s11 = 0: s12 = 0: s13 = 0 ‘Подготовка сумм для гр. 11–13

Цикл для копирования данных из базы на лист “Расчетная таблица”

For i = 3 To n

Cells(i, 1) = Worksheets(“База данных”).Cells(i - 1, 1) Cells(i, 2) = Worksheets(“База данных”).Cells(i - 1, 2) Cells(i, 3) = Worksheets(“База данных”).Cells(i - 1, 3) Cells(i, 4) = Worksheets(“База данных”).Cells(i - 1, 4) Cells(i, 5) = Worksheets(“База данных”).Cells(i - 1, 5) Cells(i, 6) = Worksheets(“База данных”).Cells(i - 1, 6) Cells(i, 7) = Worksheets(“База данных”).Cells(i - 1, 7) Cells(i, 11) = Worksheets(“База данных”).Cells(i - 1, 8) Cells(i, 13) = Worksheets(“База данных”).Cells(i - 1, 9)

Next i

3 3

Цикл для заполнения расчетных граф и получения итогов

For i = 3 To n

Cells(i, 10) = Cells(i, 2) * 1.84

Cells(i, 12) = Cells(i, 11) / Cells(i, 10) * 100

If Cells(i, 13) > 30 And (Cells(i, 7) > 12 Or Cells(i, 12) > 10)

Then Cells(i, 14) = “Да” Else Cells(i, 14) = “Нет” s5 = s5 + Cells(i, 5)

s7 = s7 + Cells(i, 7)

s11 = s11 + Cells(i, 11)

s12 = s12 + Cells(i, 12)

s13 = s13 + Cells(i, 13) Next i

Cells(n + 1, 1) = “Итого” Cells(n + 2, 1) = “В среднем” Cells(n + 1, 5) = s5

Cells(n + 1, 11) = s11 Cells(n + 2, 5) = s5 / (n - 2) Cells(n + 2, 7) = s7 / (n - 2) Cells(n + 2, 11) = s11 / (n - 2) Cells(n + 2, 12) = s12 / (n - 2) Cells(n + 2, 13) = s13 / (n - 2)

End Sub

Проверьте работу макроса. Для этого на листе Отчеты создайте командную кнопку «Расчетная таблица», свяжите ее с макросом «Расчет» и выполните его.

Задание 3. Создайте под автозапись макрос для заполнения указанных в задании граф справочными данными.

Втабличном процессоре Excel имеется богатая библиотека стандартных функций, использование которых намного упрощает работу пользователя по обработке данных. В VBA также есть стандартные функции, но их список гораздо меньше. Однако из VBA возможен доступ к функциям Excel через объект Application.Крометого, можноавтоматическизаписать макрос по действиям, выполняемым в Excel при использовании функции, а затем полученные команды вставить в нужное место ручного макроса.

Внашем примере необходимо по типу скрепления выбирать из справочника данные для заполнения граф «Тип шпал» и «Материал шпал». В Excel это лучше всего сделать с помощью функции ВПР.

3 4

Эта функция ищет значение в крайнем левом столбце справочной таблицы и возвращает значение из ячейки, находящейся на пересечении найденной строки и указанного столбца таблицы. Буква «В» в имени функции ВПР означает «вертикальный».

Синтаксис

ВПР(искомое_значение;таблица;номер_столбца;интервальный_просмотр)

искомое_значение — это значение, которое должно быть найдено в первом столбце массива. Искомое_значение может быть значением, ссылкой или текстовой строкой.

таблица — таблица с информацией, в которой ищутся данные. Можно использовать ссылку на интервал или имя интервала, например, БазаДанных или Список. Значения в первом столбце аргумента «таблица» могут быть текстовыми строками, числами или логическими значениями. Текстовые строки сравниваются без учета регистра букв.

номер_столбца — это номер столбца в массиве «таблица», в котором должно быть найдено соответствующее значение.Если «номер_столбца»равен1, товозвращается значение из первогостолбцааргумента«таблица»; если«номер_столбца» равен 2, то возвращается значение из второго столбца аргумента “таблица»и т.д. Если«номер_столбца»меньше1, то функция ВПР возвращает значение ошибки #ЗНАЧ!; если «номер_столбца»больше, чем количествостолбцов варгументе «таблица», то функция ВПР возвращает значение ошибки

#ССЫЛ!.

интервальный_просмотр — это логическое значение, которое определяет, нужно ли, чтобы ВПР искала точное или приближенное соответствие. Если этот аргумент имеет значение ИСТИНА(1) или опущен, то возвращается приблизительно соответствующее значение; другими словами, если точное соответствие не найдено, то возвращается наибольшее значение, которое меньше, чем искомое_значение. Если этот аргумент имеет значение ЛОЖЬ(0), то функция ВПР ищет точное соответствие. Если таковое не найдено, то возвращается значение ошибки #Н/Д.

3 5

По ря д ок р або т ы

1.Выполните макрос «Расчет», нажав командную кнопку «Расчетная таблица» налисте«Отчеты».В результатеналисте Расчетная таблица появится таблица «Сведения о состоянии пути ПЧ», в которой пока незаполнены двеграфы «Типшпал»

и«Материал шпал».

2.Заполните эти графы, используя функцию ВПР. Для формирования макроса по выполняемым действиям включите автозапись командой Сервис Макрос Начать запись,

задайте макросу имя «ДанныеИзСправочника».

3.Активизируйте ячейку H3.

4.Используя мастера функций(кнопкаfx), введите вячейку формулу

=ВПР(F3;Справочник!$A$3:$C$5;2;0).

5.Скопируйте формулу в блок H4 : H13.

6.Активизируйте ячейку I3.

7.Введите в ячейку формулу

=ВПР(F3;Справочник!$A$3:$C$5;3;0).

8.Скопируйте формулу в блок I4 : I13.

9.Остановите запись, нажав кнопку «Остановить запись» или выполнив команду Сервис Макрос Остановить запись.

Итак, макрос записан. Его текст можно увидеть, задав команду Сервис Макрос Макросы, выбрав из списка макросов имя «ДанныеИзСправочника» и нажав кнопку диалогового окна «Изменить».

Макрос будет иметь вид:

Sub ДанныеИзСправочника() Range(“H3”).Select

ActiveCell.FormulaR1C1=“=VLOOKUP(RC[-2],Справочник!R2C1:R4C3,2,0)” Selection.AutoFill Destination:=Range(“H3:H13”), Type:=xlFillDefault Range(“H3:H13”).Select

Range(“I3”).Select ActiveCell.FormulaR1C1=”=VLOOKUP(RC[-3],Справочник!R2C1:R4C3,3,0)” Selection.AutoFill Destination:=Range(“I3:I13”), Type:=xlFillDefault Range(“I3:I13”).Select

End Sub

Замечание. VLOOKUP — имя функции ВПР, используемое в VBA.

3 6

Задание4.Создать макросдля получения отчета«Сведения

осостоянии пути ПЧ».

Врезультате проделанной работы получены три макроса:

Шапка — формирует заголовки граф и название таблицы.

Расчет — берет исходные данные из базы данных и заполняет расчетные графы таблицы (гр. 10, 12, 14).

ДанныеИзСправочника — заполняет справочными данными две графы расчетной таблицы (гр. 8–9).

Используя этимакросы, необходимо получить один макрос, запуск которого будет приводить к созданию таблицы «Сведения о состоянии пути ПЧ» на листе Расчетная таблица. За основу возьмем макрос «Расчет», в текст которого внесем нужные изменения.

По ря д ок р або т ы 1. Текст макроса «ДанныеИзСправочника» отредактиро-

вать для работы с произвольным количеством записей базы данных. Внесенные изменения обозначены полужирным курсивом.

Sub ДанныеИзСправочника() Range(“H3”).Select

ActiveCell.FormulaR1C1=”=VLOOKUP(RC[-2],Справочник!R2C1:R4C3,2,0)” Selection.AutoFill Destination:=Range(“H3:H” & n), Type:=xlFillDefault Range(“H3:H” & n).Select ‘Эту команду можно убрать Range(“I3”).Select ActiveCell.FormulaR1C1=”=VLOOKUP(RC[-3],Справочник!R2C1:R4C3,3,0)” Selection.AutoFill Destination:=Range(“I3:I” & n), Type:=xlFillDefault Range(“I3:I” & n).Select ‘Эту команду можно убрать или оста-

вить Range(“I3”) для снятия выделения с блока

End Sub

2.Отредактированный текст вставить в макрос «Расчет» перед End Sub.

3.Проверить работу макроса «Расчет», запустив его с листа Отчеты нажатием командной кнопки «Расчетная таблица».

4.Создать самостоятельно автозаписью макрос для форматирования полученного отчета. Откорректировать его для произвольного количества записей, включить в текст макроса «Расчет» и проверить работу макроса, повторив п. 3.

В итоге получена таблица, приведенная на рис. 14.

3 7

Рис. 14. Вид расчетной таблицы

Контрольныевопросы

1.Какими способами могут быть созданы макросы?

2.Как включить автозапись?

3.Как войти в редактор VBA для создания нового макроса?

4.Как войти в редактор VBA для редактирования созданного макроса?

5.Какая команда используется для отключения возможности обновления экрана (чтобы экран не мигал)?

6.Какой командой можно определить номер последней занятой строки на листе Excel?

7.Использование логическихопераций AND, OR (назначение, приоритет).

8.Функция ВПР, ее назначение, синтаксис.

9.Как переименовать модуль?

2.2. Сортировка данных

Сортировка — это упорядочивание данных по какому-либо ключу. Excel предоставляет разнообразные способы сортировки данных. Можно сортировать строки и столбцы в возраста-

3 8

Рис. 15. Использование команды Сортировка для сортировки таблицы данных

ющем или убывающем порядке, с учетом или без учета регистра букв. (При сортировке строк изменяется порядок расположения строк в списке, в то время как порядок столбцов остается прежним. При сортировке столбцов соответственно изменяется порядокрасположения столбцов.) Данныевтаблице сортируют по значениям одного или нескольких полей. Например, список сотрудников можно сортировать по полю Фамилия, расположив значения этого поля в алфавитном порядке. Чтобы выполнить сортировку данных в Excel, нужно поместить курсор в любую ячейку таблицы и выбрать команду Данные Сортировка.Excel автоматическивыделит таблицу данных и отобразит диалоговое окно Сортировка диапазона

(рис. 15).

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

ВспискеСортироватьпо

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

последнюю очередь, по.

Значения этих полей будут учитываться при сортировке записей, если значения первого поля совпадают.

Сортировку данных из программы VBA можно осуществить, используя метод Sort объекта Range. Он имеет такой синтаксис:

SomeRange. Sort, Key1, Order1, Key2, Order2, Header

Метод включает следующие аргументы:

3 9

SomeRange. Объект Range ссылается на диапазон значений, подлежащихсортировке.Объект может ссылаться на весь диапазон или на одну его ячейку (в последнем случае Excel автоматически выделяет весь диапазон, содержащий данные).

Key1. Объект Range ссылается на столбец, по значениям которого должна осуществляться сортировка всего диапазона. Этот объект может ссылаться на любую ячейку требуемого столбца.

Order1. Необязательная константа, определяющая порядок сортировки. Можно выбрать значение xlAscending (значения столбца будут отсортированы по возрастанию от A до Z; используется по умолчанию) или xlDescending (обратный порядок сортировки).

Key2. Необязательный объект Range, ссылающийся на второй столбец, по значениям которого должна осуществляться сортировка.

Order2. Необязательный аргумент, определяющий порядок сортировки по второму столбцу.

Header. Необязательная константа, указывающая имеет ли таблица строку заголовка с названиями полей. Константа может принимать значения xlYes (да), xlNo (нет) или xlGuess (по умолчанию).Если выбранозначение xlGuess, Excel анализирует таблицу данных и самостоятельно определяет, есть ли

вней строка заголовков.

Ниже показан пример использования метода Sort для сортировки таблицы. Предположим, что рабочий лист содержит таблицу, имеющую строку заголовков, и что ячейка A2 принадлежит этой таблице. Следующий код осуществляет первичную сортировку данных по значениям поля, расположенного в столбце B, и вторичную сортировку по значениям поля, расположенного в столбце D.

Worksheets(“Объем продаж”).Range(“A2”).Sort Key1:=_ Worksheets(“Объем продаж”).Range(“B2”). Key2:=_ Worksheets(“Объем продаж”).Range(“D2”), Header:=xlYes

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

4 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]