Выделение части строки

Задачу выделения части строки в 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, _

Выделение части строки - student2.ru
R3 As String, R4 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

Выделение части строки - student2.ru

Функции, определённые пользователем

Функция, определённая пользователем, называемая также процедурой-функцией, – это особый вид процедуры 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)

Выделение части строки - student2.ru

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

 
  Выделение части строки - student2.ru

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)

в процедуре Расчёт_Комиссионных.

Ниже приведена таблица с результатом решения задачи.

Выделение части строки - student2.ru

VBA передает все аргументы в функцию-процедуру как типы Variant. Можно объявлять определенные типы данных для каждого аргумента в списке аргументов. Определение типов аргументов для функции-процедуры помогает пользователю при вызове функции вводить аргументы правильного типа в правильном порядке.

Наши рекомендации