страница 1 |
|||||||||||||||||||||||||||||||||||||||||||||
Похожие работы
|
Решение задач в Excel с помощью vba. Использование встроенных - страница №1/1
![]() Практическая работа № 13.Тема: Решение задач в Excel с помощью VBA. Использование встроенных функций. Цель: Научиться выполнять вычисления с использованием функций и операторов VBA, организовывать ввод и вывод данных, научиться выполнять отладку программ. Время: 40 мин. Задание: Изучите основные функции VBA для работы с различными типами данных, составьте программу для расчёта краткосрочной ссуды.
Последовательность выполнения работы:
![]() В имени файла укажите свою фамилию и номер практической работы, например: «Иванов, пр13».
![]() Другие элементы управления (кнопки) добавятся чуть позже.
![]()
![]()
![]()
![]()
![]() Часто для заполнения таблицы используют специальные формы или программный код. Так меньше вероятность занесения ошибочных данных. Для ввода текстовых данных используется функция InputBox. Создайте процедуру Ввод_исходных_данных() с использованием этой функции.
InputBox (prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
![]()
Sub Ввод_исходных_данных() Cells(2, 3) = InputBox("Размер ссуды P = ", "Расчет ссуды", 3000) Cells(3, 3) = InputBox("Дата выдачи ссуды: ", "Расчет ссуды", "22.01.2013") Cells(3, 3) = CVDate(Cells(3, 3)) Cells(4, 3) = InputBox("Дата возврата ссуды: ", "Расчет ссуды", "22.07.2013") Cells(4, 3) = CVDate(Cells(4, 3)) Cells(5, 3) = InputBox("Годовая процентная ставка, % ", "Расчет ссуды", 36) End Sub
Образец: Dim P, R, i As Double Dim D_beginning, D_end As Date Sub Очистить() ' ' Очистить, Макрос ' Range("C2:C7").Select Selection.ClearContents Range("C2").Select End Sub Sub Ссуда() If Cells(2, 3) = Empty Then 'Проверка, заполнена ли ячейка MsgBox "Не введена сумма ссуды", vbExclamation, "Расчет ссуды" Exit Sub End If
P = CDbl(Cells(2, 3)) D_beginning = CDate(Cells(3, 3)) D_end = CDate(Cells(4, 3)) i = CDbl(Cells(5, 3)) / 100 If D_end < D_beginning Then MsgBox "Ошибка в датах", _ vbExclamation, "Расчет ссуды" 'Если оператор слишком длинный, 'можно разместить его в двух или более строках, 'добавив в конце каждой из строк '(кроме последней) символ подчеркивания (_) Exit Sub
End If R = P * (1 + i) ^ ((D_end - D_beginning) / 365) R = CDbl(Format(R, "Fixed")) Cells(6, 3) = R Cells(7, 3) = R - P: Cells(7, 3).Font.Bold = True 'Можно сделать и наоборот — 'разместить несколько операторов в одной строке программного кода. 'Для этого применяется знак : Debug.Print "D_beginning = "; D_beginning Debug.Print "D_end = "; D_end Debug.Print "D_end - D_beginning = "; (D_end - D_beginning) Debug.Print "i = "; i Debug.Print "R = "; R End Sub
![]()
Debug.Print служит для отображения значения выражения в специальном окне Immediate в процессе выполнения программы. Выводить в это окно можно любые допустимые выражения, включая свойства объектов. Для того чтобы вывести значение переменной, нужно ввести знак "?" и имя переменной и нажать клавишу ![]() Высокий уровень (дополнительное задание):
R = P * (1 + i) ^ ((D_end - D_beginning) / 365), где i=30 (% ставка), P - долг, взятая сумма, D_end - 30-е число, D_begining - 30 число предыдущего месяца или дата взятия кредита. Если происходит платёж, этот интервал делится на на два, в формуле для второго интервала вместо P будет будет фигурировать P – Pl, где Pl – сумма платежа. Рассчитайте, сколько вы заплатите сверх взятой на один год суммы, если взяли 8000 гривен в начале года и погашаете кредит ежемесячно, в начале каждого месяца, начиная со второго (скажем, 10-го числа), путём перечисления фиксированной суммы 700 гривен. Когда вы полностью выплатите кредит? Каким будет последний платёж?
Ветвление реализуется с помощью оператора IF и инструкции Select Case. Оператор ветвления IF. Блочные структуры If – наиболее эффективные из структур логического ветвления. Их можно применять для создания логических структур практически любой сложности. В общем виде эта структура выглядит следующим образом:
Когда логическое выражение принимает значение истина (true), то выполняется блок операторов, заключенный между операторами IF и END IF. Если логическое выражение принимает значение ложь (false), то этот блок не выполняется и управление переходит к оператору, следующему за оператором END IF. Структура IF может содержать оператор ELSE:
Управление переходит к блоку операторов, следующему за ELSE в том случае, если логическое выражение принимает значение ложь (false). Это был пример одноблочной структуры оператора IF. Одноблочная структура оператора IF преобразуется в многоблочную путем добавления оператора ElseIf. В этом случае структура выглядит следующим образом:
Когда встречается многоблочная структура IF, VB определяет значение логического выражения 1. Если оно равно true, то выполняется блок операторов 1, если false, то блок операторов 1 полностью пропускается и проверяется значение логического выражения 2 и т.д. Если ни одно из поставленных условий не выполняется, то управление передается блоку операторов 4. В приведенном ниже примере показано использование как блоковой, так и однострочной форм инструкции If...Then...Else: Dim Number, Digits, MyString Number = 53 ' Инициализирует переменную. If Number < 10 Then Digits = 1 ElseIf Number < 100 Then ' Условие является истинным, поэтому выполняется следующая инструкция. Digits = 2 Else Digits = 3 End If ' Использует однострочную форму для присвоения значения. If Digits = 1 Then MyString = "Один" Else MyString = "Больше 1" |