Выделение части строки
Задачу выделения части строки в VBA решают три функции:
Left, Right и Mid.
Функция Left
Формат функции:
Left(String, Length)
String – любое допустимое строковое выражение;
Length – любое численное значение.
Функция возвращает копию String, начиная с первого символа и включая количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается всё строковое выражение String.
Функция Right
Формат функции:
Right(String, Length)
String – любое допустимое строковое выражение;
Length – любое численное значение.
Функция возвращает копию String, начиная с последнего символа и включая справа налево количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается все строковое выражение String. Функция Right всегда копирует символы от конца строки к ее началу.
Функция Mid
Формат функции:
Mid(String, Start, [, Length])
String – любое допустимое строковое выражение;
Length, Star t – любые численные значения.
Функция Mid возвращает копию String, начиная с положения символа в String, задаваемого с помощью аргумента Start . Необязательный аргумент Length определяет количество копируемых в Mid символов из String. Если Start содержит большее число, чем фактическая длина String, то возвращается пустая строка.
Пример
Sub Встр_функции_7()
Dim R1 As String, R2 As String, _
|
R4 = "Ваша оценка Отлично"
R1 = Left(R4, 4)
R2 = Mid(R4, 6, 6)
R3 = Right(R4, 7)
MsgBox "R4=" & R4 & Chr(13) & _
"R1=" & R1 & Chr(13) & _
"R2=" & R2 & Chr(13) & _
"R3=" & R3
End Sub
Форматирование значений данных
Форматирование значений данных можно выполнить при помощи функции Format, которая идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.
Формат функции:
Format(Expression [, Format[, Firstdayofweek [, Firstweekofyear]]])
Expression - любое допустимое выражение (обязательный аргумент).
Format - допустимое выражение именованного или определенного пользователем формата.
Firstdayofweek - константа, которая определяет первый день недели.
Firstweekofyear - константа, которая определяет первую неделю года.
Чтобы использовать функцию Format, надо либо задать предопределенный формат, либо создать образ определенного формата, используя символы-заполнители. В качестве символов-заполнителей используются символы 0, #, $, m, d, q и другие, используемые в Excel.
Пример
Sub Встр_функции_8()
Dim Дата As Date
Дата = Date
MsgBox Format(Дата, "Long Date") & vbCr _
& Format(Дата, "Medium Date") & vbCr _
& Format(Дата, "Short Date") & vbCr _
& Format(Дата, "dd mmmm yy") & vbCr _
& Format(Дата, "dd mm yy") & vbCr _
& Format(Дата, "dd mm yyyy")
End Sub
Функции, определённые пользователем
Функция, определённая пользователем, называемая также процедурой-функцией, – это особый вид процедуры VBA, возвращающей результат. Пользовательские процедуры-функции, как и встроенные функции VBA, могут иметь необязательные и именованные аргументы. Для записи функции-процедуры нельзя использовать макрорекордер, хотя можно редактировать записанный рекордером макрос и превращать его в функцию-процедуру.
Основное различие между процедурой-функцией и другими процедурами, помимо того, что функции возвращают значение, а процедуры - нет, состоит в том, что в функции-процедуре используются ключевые слова Function и End Function.
Формат процедуры-функции:
Function Name([Arglist]) [As Type]
VBA Statements
[Name = expression]
End Function
Function – ключевое слово, объявляющее начало функции.
Name – имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.
Arglist – список аргументов данной функции, необязательный элемент.
Type – любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип Variant.
Name = expression – присваивание функции, которое указывает VBA, какое значение должна возвращать функция, необязательный элемент. Тем не менее, всегда следует включать оператор присваивания в функции-процедуры.
End Function – ключевые слова, заканчивающие функцию.
Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.
Обычно функция предназначается для выполнения вычисления и для возвращения результата. При объявлении функции-процедуры указывается имя каждого аргумента, передаваемого функции. Имена аргументов в списке отделяются друг от друга запятой и должны следовать правилам, применяемым к любому идентификатору VBA.
Пример функции
Ниже приведён пример, в котором используется функция, вычисляющая сумму комиссионных. Суть задачи состоит в следующем. В таблице, приведённой ниже, требуется подсчитать суммы комиссионных и оплаты. Суммы комиссионных подсчитываются в процедуре-функции
Комиссионные, обращение к которой осуществляется в процедуре
Расчёт_Комиссионных при помощи инструкции
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
While Cells(i, 1) <> ""
Cells(i, 3) = Комиссионные(Cells(i, 2))
Cells(i, 4) = Cells(i, 2) + Cells(i, 3)
i = i + 1
Wend
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
Подсчёт оплаты выполняется при помощи инструкции
Cells(i, 4) = Cells(i, 2) + Cells(i, 3)
в процедуре Расчёт_Комиссионных.
Ниже приведена таблица с результатом решения задачи.
VBA передает все аргументы в функцию-процедуру как типы Variant. Можно объявлять определенные типы данных для каждого аргумента в списке аргументов. Определение типов аргументов для функции-процедуры помогает пользователю при вызове функции вводить аргументы правильного типа в правильном порядке.