4. СТРУКТУРА ДАННЫХ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
В разработанном программном модуле на языке VBA для расчета простых и сложных процентов по депозитам используются функция вызова (UserForm_.Show) и функция закрытия (Unload Me) пользовательских форм:
Private Sub OptionButton1_Click()
Unload Me
UserForm2.Show
End Sub
Private Sub OptionButton2_Click()
Unload Me
UserForm3.Show
End Sub
Private Sub OptionButton3_Click()
Unload Me
UserForm4.Show
End Sub
При написании подпрограммы на пользовательскую форму расчета суммы инвестированного капитала (Rn) по схеме простого процента используется подпрограмма с использованием формулы:
Rn = Fix(P * (1 + i * R / 100))
Функция Fix позволяет отбросить дробную часть числа, что является актуальным в условиях действующей системы округления в банковской сфере.
При написании программы на пользовательскую форму расчета депозита по схеме простого процента используется следующая подпрограмма, в которой используются макросы (выделены зеленым цветом) вывода таблицы на печать и формирования таблицы:
Private Sub CheckBox1_Click()
If Not CheckBox1 Then
Exit Sub
End If
End Sub
Private Sub CommandButton1_Click()
Dim P As Double
Dim R As Double
Dim n As Double
Dim str_P
Dim Rn As Double
Dim str_R
Dim str_n
Dim a As String, b As String, c As String, d As String
Dim i As Integer
Dim st As String
str_n = TextBox1.Value
If IsGoodNum1(str_n) = False Then
MsgBox (NotNumberГод(str_n))
Exit Sub
End If
str_P = TextBox2.Value
If IsGoodNum2(str_P) = False Then
MsgBox (NotNumberКап(str_P))
Exit Sub
End If
str_R = TextBox3.Value
If IsGoodNum3(str_R) = False Then
MsgBox (NotNumberПроц(str_R))
Exit Sub
End If
Worksheets("Лист1").Range("B1") = "Простой процент"
Worksheets("Лист1").Range("A1") = "Год"
Worksheets("Лист1").Range("A3") = 0
Worksheets("Лист1").Range("B2") = "Сумма"
Worksheets("Лист1").Range("B3") = TextBox2.Value
P = Val(str_P)
n = Val(str_n)
R = Val(str_R)
For i = 1 To n
Rn = Fix(P * (1 + i * R / 100))
a = "Инвестируемый капитал Rn за " + Chr(10)
b = "-й год по схеме простого процента равен" + Str(Rn)
st = st + Str(i) + b + Chr(10)
Cells(i + 3, 1) = i
Cells(i + 3, 2) = Rn
Next i
Unload Me
формирование таблицы
Range("A1:A2").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("A1:B8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1:A2").Select
MsgBox (a & st)
c = InputBox("Введите название банка")
d = InputBox("Введите название депозита")
Worksheets("Лист1").Range("C1") = c
Worksheets("Лист1").Range("C2") = d
вывод на печать
If CheckBox1 Then
Application.Visible = True
Unload Me
Range("A1:M30").Select
ActiveWindow.SelectedSheets.PrintPreview
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
UserForm1.Show
End Sub
При написании подпрограммы на пользовательскую форму расчета инвестированного капитала (Fn) по схеме сложного процента используется аналогичная подпрограмма только с использованием другой формулы:
Fn = Fix(P * (1 + R / 100) ^ i)
При написании подпрограммы на пользовательскую форму сравнительного анализа расчета депозитов по схемам простого и сложного процентов используется следующая подпрограмма, которая соединяет в себе расчет двух видов процента (с использованием двух указанных выше формул) и макрос построения результирующего графика:
Dim g As String
Private Sub CheckBox1_Click()
If Not CheckBox1 Then
Exit Sub
End If
End Sub
Public Sub grafik()
Dim n As Integer
n = Application.CountA(Worksheets(1).Range("A:A"))
График Макрос
Range("B3:C8").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Лист1!$B$3:$C$8")
ActiveChart.ChartType = xlBarClustered
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$3:$A$8"
ActiveChart.SeriesCollection(1).Name = "=Лист1!$B$1"
ActiveChart.SeriesCollection(2).Name = "=Лист1!$C$1"
ActiveChart.ApplyLayout (8)
ActiveChart.Axes(xlCategory).AxisTitle.Select
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Год"
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Сумма"
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Сравнение процентов"
ActiveChart.Export "grafic.gif" экспортируем в картинку
g = "grafic.gif" переменной присваиваем имя картинки
Image1.Picture = LoadPicture(g) загружаем картинку в image1 на форме
Worksheets(1).ChartObjects.Delete
End Sub
Private Sub CommandButton1_Click()
Dim P As Double
Dim Rn As Double
Dim Fn As Double
Dim R As Double
Dim n As Double
Dim a As String, b As String, c As String, d As String, e As String, f As String
Dim i As Integer
Dim Rt As String
Dim Ft As String
Dim str_P
Dim str_R
Dim str_n
Worksheets("Лист1").Range("B1") = "Простой процент"
Worksheets("Лист1").Range("A1") = "Год"
Worksheets("Лист1").Range("A3") = 0
Worksheets("Лист1").Range("B2") = "Сумма"
Worksheets("Лист1").Range("C2") = "Сумма"
Worksheets("Лист1").Range("B3") = TextBox2.Value
Worksheets("Лист1").Range("C1") = "Сложный процент"
Worksheets("лист1").Range("C3") = TextBox2.Value
str_n = TextBox1.Value
If IsGoodNum1(str_n) = False Then
MsgBox (NotNumberГод(str_n))
Exit Sub
End If
str_P = TextBox2.Value
If IsGoodNum2(str_P) = False Then
MsgBox (NotNumberКап(str_P))
Exit Sub
End If
str_R = TextBox3.Value
If IsGoodNum3(str_R) = False Then
MsgBox (NotNumberПроц(str_R))
Exit Sub
End If
P = Val(str_P)
n = Val(str_n)
R = Val(str_R)
For i = 1 To n
Rn = Fix(P * (1 + i * R / 100))
Fn = Fix(P * (1 + R / 100) ^ i)
a = "Инвестируемый капитал Rn за " + Chr(10)
b = "-й год по схеме простого процента равен " + Str(Rn)
Rt = Rt + Str(i) + b + Chr(10)
c = "Инвестируемый капитал Fn за " + Chr(10)
d = "-й год по схеме сложного процента равен " + Str(Fn)
Ft = Ft + Str(i) + d + Chr(10)
Cells(i + 3, 1) = i
Cells(i + 3, 2) = Rn
Cells(i + 3, 3) = Fn
Next i
формирование таблицы
Range("A1:A2").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
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("A1:C8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1:A2").Select
grafik
MsgBox (a & Rt & c & Ft)
e = InputBox("Введите название банка")
f = InputBox("Введите название депозита")
Worksheets("Лист1").Range("D1") = e
Worksheets("Лист1").Range("D2") = f
График Макрос
Range("B3:C8").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Лист1!$B$3:$C$8")
ActiveChart.ChartType = xlBarClustered
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$3:$A$8"
ActiveChart.SeriesCollection(1).Name = "=Лист1!$B$1"
ActiveChart.SeriesCollection(2).Name = "=Лист1!$C$1"
ActiveChart.ApplyLayout (8)
ActiveChart.Axes(xlCategory).AxisTitle.Select
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Год"
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Сумма"
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Сравнение процентов"
вывод на печать
If CheckBox1 Then
Application.Visible = True
Unload Me
Range("A1:M30").Select
ActiveWindow.SelectedSheets.PrintPreview
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
UserForm1.Show
End Sub
В следующем программном модуле, который проверяет правильность ввода данных, используются функции для проверки данных. Данные проверяются с помощью функций, вызываемых подпрограммой. Если переменная не удовлетворяет определенным условиям (ввод отрицательного числа, ввод символов, отсутствие ввода и количество лет, не превышающее 5-ти лет), то подпрограмма выдает название ошибки и совершает преждевременный выход из подпрограммы. В функциях используются условия, которые определяют ошибку в зависимости от введенных данных. Такая функция используется для проверки каждой из входных данных. Данные функции написаны в «Module1»:
проверка n
Public Function IsGoodNum1(var_n) As Boolean
If IsNumeric(var_n) = True And Val(var_n) > 0 And Val(var_n) < 6 Then
IsGoodNum1 = True
Else
IsGoodNum1 = False
End If
End Function
Public Function NotNumberГод(var_n) As String
NotNumber = "Ошибка ввода данных"
If var_n = "" Then
NotNumberГод = "Вы не ввели количество лет"
End If
If Val(var_n) > 5 Then
NotNumberГод = "Период не более 5-ти лет"
End If
If Val(var_n) < 0 Then
NotNumberГод = "Вы ввели отрицательное число"
End If
If IsNumeric(var_n) = False Then
NotNumberГод = "Вы ввели не число"
End If
End Function
проверка P
Public Function IsGoodNum2(var_P) As Boolean
If IsNumeric(var_P) = True And Val(var_P) > 0 Then
IsGoodNum2 = True
Else
IsGoodNum2 = False
End If
End Function
Public Function NotNumberКап(var_P) As String
NotNumberКап = "Ошибка ввода данных"
If var_P = "" Then
NotNumberКап = "Вы не ввели капитал"
If Val(var_P) < 0 Then
NotNumberКап = "Вы ввели отрицательное число"
End If
If IsNumeric(var_P) = False Then
NotNumberКап = "Вы ввели не число"
End If
End Function
проверка R
Public Function IsGoodNum3(var_R) As Boolean
If IsNumeric(var_R) = True And Val(var_R) > 0 Then
IsGoodNum3 = True
Else
IsGoodNum3 = False
End If
End Function
Public Function NotNumberПроц(var_R) As String
NotNumberПроц = "Ошибка ввода данных"
If var_R = "" Then
NotNumberПроц = "Вы забыли ввести процент"
End If
If Val(var_R) < 0 Then
NotNumberКап = "Вы ввели отрицательное число"
End If
If IsNumeric(var_R) = False Then
NotNumberПроц = "Вы ввели не число"
End If
End Function
К кнопкам управления (CommandButton1 - «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА», CommandButton2 - «УДАЛИТЬ»), находящихся на листе Excel, привязаны следующие подпрограммы, с использованием макросов удаления данных и очищения форматированной таблицы:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
удаление данных с листа
Cells.Select
Selection.ClearContents
Range("A1").Select
очищение форматированной таблицы
Range("A1:C8").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A1").Select
End Sub
Для того, чтобы книга Excel открывада сразу пользовательскую форму «Выбор схемы процента» (UserForm1) в «ЭтаКнига» была записана следующая подпрограмма:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
End Sub
Yandex.RTB R-A-252273-3- ВВЕДЕНИЕ
- 1. ОПИСАНИЕ ЭКОНОМИЧЕСКОГО ОБЪЕКТА И ПОСТАНОВКА ЗАДАЧИ
- 1.1 Теоретические аспекты применения простых и сложных процентов по депозитам
- 1.2 Нормативные и законодательные акты Республики Беларусь в области регулирования депозитных операций
- 1.3 Постановка задачи по разработке программного модуля
- 2. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ И МЕТОД АНАЛИЗА
- 2.1 Математическая модель расчета и сравнения простого и сложного процентов по депозитам
- 3. РАЗРАБОТКА ВХОДНЫХ И ВЫХОДНЫХ ФОРМ
- 4. СТРУКТУРА ДАННЫХ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
- 5. РАЗРАБОТКА АЛГОРИТМОВ
- 6. ТЕСТИРОВАНИЕ ПРОГРАМНОГО ОБЕСПЕЧЕНИЯ
- ЗАКЛЮЧЕНИЕ
- Язык vba и его возможности
- 3. Программирование на vba
- 2. Простой и сложный процент
- Тема 1: Простые и сложные проценты.
- Язык программирования vba Редактор vba
- 2). Знакомство с vba в Excel
- 17)Основы программирования на языке vba
- 43. Банковские проценты. Применение простых и сложных процентов. Расчет процентов.