- •Лабораторная работа №5. Процедуры-функции
- •Стандартные (встроенные) функции
- •Функции преобразования данных
- •Функции даты и времени
- •Строковые функции
- •Сравнение и поиск строк. Функции StrComp, InStr
- •Выделение части строки. Функции Left, Right и Mid.
- •Функции, определённые пользователем
- •Форматирование Значений данных. Функция Format.
- •Упражнение 1
- •Упражнение 2
Форматирование Значений данных. Функция Format.
Форматирование значений данных можно выполнить при помощи функции Format, которая идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.
Формат функции:
Format(Expression [, Format[, FirstDayOfWeek _
[, FirstWeekOfYear]]])
Expression - любое допустимое выражение (обязательный аргумент).
Format - допустимое выражение именованного или определенного пользователем формата.
FirstDayOfWeek - константа, которая определяет первый день недели.
FirstWeekOfYear - константа, которая определяет первую неделю года.
Чтобы использовать функцию Format, надо либо задать предопределенный формат, либо создать образ определенного формата, используя символы-заполнители. В качестве символов-заполнителей используются символы 0, #, $, m, d, q и другие, используемые в Excel.
Процедура Ex_Format выводит дату MyDate, системную дату, время MyTime, числовую переменную MyVar и константы в разных форматах.
Option Explicit
Sub Ex_Format()
Dim MyDate As Date
Dim MyTime As Date
Dim MyVar As Single
MyDate = #3/6/2016# ' Задание даты 06.03.16
MyTime = #4:07:45 PM# ' Задание момента времени 16:07:45
MyVar = 1372.547
MsgBox Format(MyDate) & vbCr _
& Format(MyDate, "Long Date") & vbCr _
& Format(MyDate, "Medium Date") & vbCr _
& Format(MyDate, "Short Date") & vbCr _
& Format(MyDate, "dd mmmm yy") & vbCr _
& Format(MyDate, "dd mm yy") & vbCr _
& Format(MyDate, "dd mm yyyy") & vbCr _
& Format(MyTime, "h:m:s") & vbCr _
& Format(MyTime, "hh:mm:ss AMPM") & vbCr _
& Format(MyDate, "dddd, mmm d yyyy") & vbCr _
& Format(MyDate, "dddd, d mmmm yyyy") & vbCr _
& Format(Date, "dddd, d mmm yyyy") & vbCr _
& Format(MyVar) & vbCr & vbCr _
& Format("Специальные форматы:", ">") & vbCr _
& Format(MyVar, "00000.0000") & vbCr _
& Format(MyVar, "#####.####") & vbCr _
& Format(MyVar, "##,##0.00") & vbCr _
& Format(MyVar, "fixed") & vbCr _
& Format(MyVar, "0.00") & vbCr _
& Format(MyVar, "$###,###.00") & vbCr _
& Format(MyVar, "#.####E+00") & vbCr _
& Format(0.7, "0.00") & vbCr _
& Format(0.12345, "Percent") & vbCr _
& Format(0.12345, "0.00%")
End Sub
Результат выполнения процедуры Ex_Format:
Упражнение 1
Скопируйте в модуль VBA процедуры RemoveBlank, LenStr_1, LenStr_2, LenStr_3, Comp_Str, In_Str, SelectPart, Ex_Format.
Выполните эти процедуры и проанализируйте результаты выполнения.
Замените по вашему выбору значения констант, являющихся значениями аргументов функции и введите значения переменных, являющихся аргументами функций, при помощи функции InputBox. Сохраните процедуру под именем ExNew_Format и проанализируйте результат выполнения.
Функции, определённые пользователем
Функция, определённая пользователем, называемая также процедурой-функцией, – это особый вид процедуры VBA, возвращающей результат. Пользовательские процедуры-функции, как и встроенные функции VBA, могут иметь необязательные и именованные аргументы. Для записи процедуры-функции нельзя использовать макрорекордер, хотя можно редактировать записанный рекордером макрос и превращать его в процедуру-функцию.
Формат процедуры-функции:
Function Name([Arglist]) [As Type]
‘ VBA Statements
[Name = expression]
End Function
Function – ключевое слово, объявляющее начало функции.
Name – имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.
Arglist – список аргументов данной функции, необязательный элемент.
Type – любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип Variant.
Name = expression – присваивание функции выражения, значение которого возвращает функция, необязательный элемент. Тем не менее, всегда следует включать оператор присваивания в функции-процедуры.
End Function – ключевые слова, заканчивающие функцию.
Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.
Основное различие между процедурой-функцией и другими процедурами, помимо того, что функции возвращают значение, а процедуры - нет, состоит в том, что в процедуре-функции используются ключевые слова Function и End Function.
Обычно функция предназначается для выполнения вычисления и для возвращения результата. При объявлении функции-процедуры указывается имя каждого аргумента, передаваемого функции. Имена аргументов в списке Arglist отделяются друг от друга запятой и должны следовать правилам, применяемым к любому идентификатору VBA.
Ниже приведён пример, в котором используется пользовательская функция, вычисляющая сумму комиссионных. Суть задачи состоит в следующем. В таблице Excel, приведённой ниже, требуется подсчитать суммы комиссионных и оплаты.
Суммы комиссионных подсчитываются в процедуре-функции Комиссионные, обращение к которой осуществляется в процедуре Расчёт_Комиссионных, при помощи инструкции
Cells(i, 3) = Комиссионные(Cells(i, 2)),
параметром которой, является сумма продаж, находящаяся в ячейках Excel B3÷B6 (Cells(3, 2) – это ячейка B3 и т.д.).
Подсчёт оплаты выполняется при помощи инструкции
Cells(i, 4) = Cells(i, 2) + Cells(i, 3)
в процедуре Расчёт_Комиссионных.
Sub Расчёт_Комиссионных()
Sheets("Лист1").Select
Dim i As Integer
i = 3
Do While Cells(i, 1) <> ""
Cells(i, 3) = Комиссионные(Cells(i, 2))
Cells(i, 4) = Cells(i, 2) + Cells(i, 3) ‘ Оплата
i = i + 1
Loop
End Sub
Function Комиссионные(Продажи As Double) As Double
Dim РасчётКом As Double, Надбавка As Double
РасчётКом = Продажи * 0.05
If Продажи > 5000 Then
Надбавка = 0.01 * (Продажи - 5000)
РасчётКом = РасчётКом + Надбавка
End If
If Продажи > 10000 Then
Надбавка = 0.02 * (Продажи - 10000)
РасчётКом = РасчётКом + Надбавка
End If
If Продажи > 15000 Then
Надбавка = 0.03 * (Продажи - 15000)
РасчётКом = РасчётКом + Надбавка
End If
Комиссионные = РасчётКом
End Function
VBA передает все аргументы в процедуру-функцию как типы Variant. Можно объявлять определенные типы данных для каждого аргумента в списке аргументов. Определение типов аргументов для процедуры-функции помогает пользователю при вызове функции вводить аргументы правильного типа в правильном порядке.
