Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программирование на VBA в MS ExcelСтр 1 из 4Следующая ⇒
Программирование на VBA в MS Excel Лабораторная работа № 1. Линейные алгоритмы Время выполнения 4 часа Цель работы Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе линейных алгоритмов. Задачи лабораторной работы После выполнения данной работы студент должен знать и уметь:
Перечень обеспечивающих средств Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система Windows XP, электронные таблицы Excel с приложением в виде языка Visual Basic for Applications. Общие теоретические сведения VBA – это язык объектно-ориентированного программирования. Основными парадигмами являются объект, свойство, метод, событие, класс и семейство объектов. Объект – это инкапсуляция данных вместе с кодом, предназначенным для их обработки. Семейство – объект, содержащий несколько других объектов того же типа: Worksheets (“Лист 1”) – рабочий лист с имени Лист1, Worksheets (1) – первый лист рабочей книги. Классы – это проект, на основе которого будет создан объект, т.е. класс определяет имя объекта, его свойства и действия, над ним выполняемые. А каждый объект, свою очередь, является экземпляром класса. Методы – это действия, выполняемые над объектом. Объект.метод – синтаксис метода
Пример. Application.Quit – закрыть объект Application. Worksheets (“Лист1”).Chartobjects.Delete – удалит все диаграммы с листа “Лист1”. Свойства – это атрибут объекта, определяющий его характеристики: размер, цвет, положение на экране или состояние (доступность, видимость). Для изменения характеристик меняют его свойства: Объект.Свойство=Значение свойства
Пример. Worksheets.Visible = False Есть свойства, возвращающие объект: ActiveCell возвращает активную ячейку активного листа активной рабочей книги. ActiveWindow – активное окно. Свойства ActiveCell, ActiveWindow. ActiveCell и Application. ActiveWindow. ActiveCell возвращают одну и ту же активную ячейку. События – это действия, распознаваемые объектом. Суть программирования на VBA и заключается в том, чтобы на событие получить отклик.
Пример 1. Написать программу, которая вычисляет периметр треугольника. Запись программы в виде блок-схемы (рис. 1) и визуальное представление формы для ввода данных (рис. 2) и результата (рис. 3): Рисунок 1. Блок-схема решения задачи
Рисунок 2. Ввод исходных данных в процессе выполнения программы
Рисунок 3. Вывод результата в процессе выполнения программы
Программный код Option Explicit Sub ПериметрТреугольника() Dim ВтораяСторона, ТретьяСторона, Периметр As Single ВтораяСторона = 3.5 ТретьяСторона = InputBox("Введите значение третьей стороны треугольника", "Третья сторона") Периметр = Cells(1, 4) + ВтораяСторона + ТретьяСторона MsgBox "Периметр треугольника = " & Периметр End Sub
Пример 2. Вычислите значение квадратного корня из суммы трех переменных. Запись программы в виде блок-схемы (рис. 4) и визуальное представление формы для ввода данных (рис. 5) и результата (рис. 6):
Рисунок 4. Блок-схема решения задачи
а) б) в) Рисунок 5. Ввод исходных данных в процессе выполнения программы
Рисунок 6. Вывод результата в процессе выполнения программы
Программный код Option Explicit Sub КореньКвадратныйИзСуммыТрехПеременных() Dim ПерваяПеременная, ВтораяПеременная, ТретьяПеременная, Сумма As Single Dim Корень As Double ПерваяПеременная = InputBox("Введите значение первой переменной", "Первая Переменная") ВтораяПеременная = InputBox("Введите значение второй переменной", "Вторая Переменная") ТретьяПеременная = InputBox("Введите значение третьей переменной", "Третья Переменная") Сумма = ТретьяПеременная + ВтораяПеременная + ПерваяПеременная Корень = Sqr(Сумма) MsgBox "Корень из суммы трех переменных = " & Корень End Sub
Пример 3. Вычислить Y, задав значения переменным:
Программный код Sub Main() Dim x, b, a, res As Single x = -3 b = 2 a = 0,5 res = (Sqr(5 * x ^ 4 + 2 * Sin(b) ^ 2)) / Cos(Abs(a ^ 3 - 3 * Tan(b))) MsgBox "res=" & CStr(res) End Sub Private Sub CommandButton1_Click() Dim x, b, a, res As Single x = Cells(3, 1) b = Cells(3, 2) a = Cells(3, 3) res = (Sqr(5 * x ^ 4 + 2 * Sin(b) ^ 2)) / Cos(Abs(a ^ 3 - 3 * Tan(b))) Cells(5, 2) = res End Sub
Визуальное представление решения задачи представлено на рис. 7. Рисунок 7. Визуальное представление решения задачи
Пример 4. Вычислить f, задав значения переменным:
Программный код Sub Main() Dim x, y, t, res As Single x = -3 y = 2 t = 0.5 res = (x / (4.8 * x ^ 3 - y) ^ 3) + 1 / 4 * (t - 3 / x) MsgBox "res=" & CStr(res) End Sub Private Sub CommandButton2_Click() Dim x, y, t, res As Single x = Cells(3, 9) y = Cells(3, 10) t = Cells(3, 11) res = (x / (4.8 * x ^ 3 - y) ^ 3) + 1 / 4 * (t - 3 / x) Cells(5, 10) = res End Sub
Визуальное представление решения задачи представлено на рис. 8. Рисунок 8. Визуальное представление решения задачи Видеоурок по выполнению заданий лабораторной работы http://informatics.ssga.ru/practics/lab-28 .
Варианты заданий Задание 1. Составить блок-схему и написать программный код согласно условию задачи.
Задание 2. Вычислить для своего варианта Y, задав значения переменным:
Задание 3. Вычислить для своего варианта f, задав значения переменным
Содержание отчета
Вопросы для защиты работы
Лабораторная работа № 2. Условные алгоритмы Время выполнения 6 часов Цель работы Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе условных алгоритмов. Задачи лабораторной работы После выполнения данной работы студент должен знать и уметь:
Пример 1. Написать программу вычисления функции пользователя. Предусмотреть сбойную ситуацию (при y = 0) и в этом случае выдать сообщение об ошибке.
Запись программы в виде блок-схемы (рис. 1) и визуальное представление ввода данных и вывода результата (рис. 2): Рисунок 1. Блок-схема решения задачи
Программный код Function z (x, y) If y = 0 Then z = "Ошибка! На ноль делить нельзя!" ElseIf x > 0 And y > 1 Then z = x + y ElseIf x < = 1 And y <> 0 Then z = x / y End If End Function
Рисунок 2. Ввод исходных данных в процессе выполнения программы
Пример 2. Написать программу вычисляющую значение Z
Программный код Sub Условия() Dim x, y, Z As Double x = Range("A2").Value y = Range("B2").Value If x > 0.1 And y > 0.1 Then Z = (x - y) ^ x ElseIf x < 0.1 And y < 0.1 Then Z = Sin(x) ElseIf x = 0.1 And y = 0 Then If y = 0 Then MsgBox "Ошибка! Деление на ноль!" Else: Z = (x * x) / y End If End If Cells(2, 4).Value = Z End Sub
Рассмотрим результат работы программы при разных значениях x и y (рис. 3, 4, 5). Рисунок 3. Результат вычисления функции y= sin(x) при x<0.1 и y<0.1
Рисунок 4. Результат вычисления функции y= (x - y)x при x>0.1 и y>0.1
Рисунок 5. Результат вычисления функции y=x2/y при x=0.1 и y=0 Видеоурок по выполнению заданий лабораторной работы http://informatics.ssga.ru/practics/lab-29 .
Варианты заданий Задание 1. Составить блок-схему и написать программу вычисления функции пользователя Задание 2. Составить блок-схему и функцию пользователя согласно условию задачи. 1. Составить блок-схему и функцию пользователя для определения премии торговому агенту от суммы совершенной им сделки. Если объем сделки до 3000 рублей, то премия 1.5 %; если объем до 10000, то – 3 %; если выше 10000, то – 5 %. Предусмотреть проверку корректности данного «объем сделки». 2. Составить блок-схему и разработать функцию пользователя для вычисления годовой процентной ставки контракта по кредиту, взятого на определенный срок при известных сумме долга и сумме, подлежащей возврату. Используйте формулу: где P – сумма кредита, S – сумма, подлежащая возврату, Т – срок кредита. Предусмотреть проверку корректности данных. Для проверки и отладки программы используйте следующие исходные данные: Т = 4 месяца, Р = 200 000, S = 210 000. 3. Составить блок-схему и разработать функцию пользователя для вычисления надбавки к стипендии по результатам сессии. Размер стипендии составляет 2 МРОТ (минимальный размер оплаты труда). Если три экзамена сданы на "5", то надбавка составляет 50 %, если есть одна "4" (при остальных "5"), то надбавка составит 25 %, если есть хотя бы одна "2", то стипендия не назначается, т. е. равна "0". 4. Составить блок-схему и разработать функцию пользователя для расчета суммы вклада с начисленным процентом в зависимости от вида вклада: до востребования – 2 %, праздничный – 5 %, срочный – 3 %. Для проверки и отладки программы используйте данные для всех видов вкладов. 5. Составить блок-схему и разработать функцию пользователя для расчета реальной доходности с учетом налога на прибыль, которая вычисляется по формуле: где i – годовая процентная ставка, g - налог на прибыль, выраженный в процентах, h - годовой темп инфляции, вычисляемый по формуле: h=(1+h1/12)12- 1, где h1/12 – месячный темп инфляции. Предусмотреть проверку корректности данных. Для проверки и отладки программы используйте следующие исходные данные: i =60 %, h1/12 =3 %, g =25 %. 6. Составить блок-схему и разработать функцию пользователя расчета надбавки к окладу в зависимости от стажа работы сотрудников предприятия. Если стаж работы меньше 5 лет, то надбавка составляет 0 %, если стаж от 5 до 10 лет, то надбавка – 5 %, если стаж больше 10 лет, то надбавка – 10 %. 7. Составить блок-схему и разработать функцию пользователя определения комиссионных менеджеру по продажам от объема проданного товара. Если объем продажи до 8 000 рублей, то комиссионные 6 %; если объем до 16 000 рублей, то – 8 %; если объем до 32 000 рублей, то – 10 %; если выше 32 000, то – 12 %. Для обозначения ограничений объема продажи используйте константы. 8. Составить блок-схему и разработать функцию пользователя для расчета премиальных, выплачиваемых рабочему, размер выплаты которых определяется в зависимости от оклада и процента перевыполнения нормы выработки:
9. Составить блок-схему и разработать функцию пользователя, определяющую площадь треугольника по его сторонам по следующей формуле: где a, b, c – стороны треугольника, р – полупериметр: Предусмотреть проверку корректности данных. 10. Составить блок-схему и разработать функцию пользователя возвращающую большее из трех значений с указанием имени переменной. 11. Составить блок-схему и разработать функцию пользователя возвращающую меньшее из трех значений с указанием имени переменной. 12. Составить блок-схему и разработать функцию пользователя, возвращающую сумму первой и третьей по величине значений.
13. Составить блок-схему и разработать функцию пользователя, вычисляющую стоимость потребляемой энергии компанией в зависимости от установленной расценки и количества потребляемой энергии: Первые 240 кВт/час: 1,62руб. за кВт/час, Следующие 300 кВт/час: 2,10руб. за кВт/час, Свыше 540 кВт/час: 2,76руб. за кВт/час. Для обозначения тарифов в процедуре использовать константы. 14. Составить блок-схему и разработать функцию пользователя начисления премии сотрудникам малого предприятия в зависимости от стажа работы и объема продажи товаров. Если стаж работы меньше 2 лет и объем продажи больше 80 000руб., то премия составляет 1.5 %. Если стаж от 2 до 5 лет, а объем продажи больше 100 000 руб., то премия – 5 %, если стаж больше 5 лет, а объем продажи выше 100 000 руб., то премия – 7 %, в остальных случаях - премия – 1 % . 15. Составить блок-схему и разработать функцию пользователя начисления процента удержания у работников завода от начисленной заработной платы и количества иждивенцев по следующему правилу:
Содержание отчета
Вопросы для защиты работы
Лабораторная работа № 3. Время выполнения 8 часов Цель работы Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе циклических алгоритмов. Задачи лабораторной работы После выполнения данной работы студент должен знать и уметь:
Пример 1. В массиве чисел М(10) очистить клетки с нулевыми значениями.
Запись программы в виде блок-схемы (рис. 1) и визуальное представление ввода данных и вывода результата (рис. 2): Рисунок 1. Электронная таблица с исходными данными
Рисунок 2. Результат работы программы
Пример 2. Выявить, есть ли в массиве число 10? Если есть, на каком месте оно стоит (известно, что число может встретиться несколько раз).
Программный код Sub Число() Dim A As Variant Dim i, k As Integer i = 1 k = 0 A = Range("A1:A10") For i = 1 To 10 If A(i, 1) = 10 Then MsgBox ("Номер ячейки, содержащей число 10 - " & i) k = k + 1 End If Next i MsgBox ("Число 10 встретилось следующее количество раз - " & k) End Sub
Пример 3. Вычислить произведение ряда:
Программный код Sub Main() Dim x, n, res As Double x = 3 n = 4 res = 1 For i = 2 To n res = res * (i * x / (2 * i - 1)) Next i MsgBox "res=" & CStr(res) End Sub Private Sub CommandButton4_Click() Dim x, n, res As Double x = Cells(36, 1) n = Cells(36, 2) res = 1 For i = 2 To n res = res * (i * x / (2 * i - 1)) Next i Cells(38, 2) = res End Sub
Визуальное представление ввода данных и вывода результата (рис. 3): Рисунок 3. Результат работы программы
Пример 4. Найти максимальное значение из значений элементов последовательности x1, x2, …, x20 (одномерного массива), используя оператор do while…loop
Программный код Private Sub CommandButton5_Click() Dim x(20) As Double Dim res, res1 As Double i = 1 res = 0 Do While i < 20 x(i) = Cells(44 + i, 1) If x(i) > res Then res = x(i) i = i + 1 Loop Cells(47, 4) = res End Sub
Визуальное представление ввода данных и вывода результата (рис. 4):
Рисунок 4. Результат работы программы
Пример 5. Задан двумерный массив F(4 to 85, 2 to 6). Найти сумму элементов этого массива.
Программный код Private Sub CommandButton1_Click() Dim f(6) As Integer For j = 4 To 8 res = 0 For i = 2 To 6 f(i) = Cells(j, i) res = res + f(i) Next i Cells(j, 7) = res Next j End Sub
Пример 6. Найти в процедуре сумму в каждом столбце.
Программный код Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer) Dim i, j, k(2) As Integer For j = 0 To m k(j) = 0 For i = 0 To n k(j) = k(j) + x(i, j) Next i MsgBox "k(j)=" & CStr(k(j)) Next j End Sub Sub commandbutton1_click() Dim i, j, n, m, x(4, 2) As Integer Dim k(2) As Integer n = 4 m = 2 For i = 0 To n For j = 0 To m x(i, j) = Cells(i + 1, j + 1) Next j Next i kol x, n, m End Sub
Пример 7. В процедуре найти сумму элементов 1 и 3 строки и записать их на место элементов 1 строки.
Программный код Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer, k() As Integer) Dim i, j As Integer For j = 0 To m x(1, j) = x(1, j) + x(3, j) Next j End Sub Sub commandbutton1_click() Dim i, j, n, m, x(4, 4) As Integer Dim k(2) As Integer n = 4 m = 4 For i = 0 To n For j = 0 To m x(i, j) = Cells(i + 1, j + 1) Next j Next i kol x, n, m, k For j = 0 To m For i = 0 To n Cells(i + 7, j + 1).Value = x(i, j) Next i Next j End Sub Варианты заданий Задание 1. Разработать алгоритм решения задачи и составить программу согласно варианта.
Задание 2. По заданным значениям a, x и n найти сумму ряда.
Задание 3. Решить задачу для своего варианта на одномерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы.
Задание 4. Решить задачу для своего варианта на двумерный массив двумя способами: с данными на рабочем листе и вводимыми по тексту программы.
Задание 5. Решить задачи по условию 3 и 4 задания с использованием подпрограмм. Содержание отчета
Вопросы для защиты работы
Программирование на VBA в MS Excel Лабораторная работа № 1. Линейные алгоритмы Время выполнения 4 часа Цель работы Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе линейных алгоритмов. |
Последнее изменение этой страницы: 2019-05-08; Просмотров: 2387; Нарушение авторского права страницы