- •Лабораторная работа №5. Процедуры-функции
- •Стандартные (встроенные) функции
- •Функции преобразования данных
- •Функции даты и времени
- •Строковые функции
- •Сравнение и поиск строк. Функции StrComp, InStr
- •Выделение части строки. Функции Left, Right и Mid.
- •Форматирование Значений данных. Функция Format.
- •Упражнение 1
- •Функции, определённые пользователем
- •Упражнение 2
Функции даты и времени
N - любое допустимое численное значение; D - любое допустимое выражение типа Date (либо выражение, которое может быть преобразовано к типу Date). Аргументы каждой функции являются обязательными, если не указано иначе.
Функция(аргумент) |
Действие |
Date() |
Возвращает системную дату |
Time() |
Возвращает системное время |
Now() |
Возвращает системные дату и время |
Year(D) |
Возвращает целое, являющееся частью выражения типа Date и содержащее год. Год возвращается как число между 100 и 9999 |
Month(D) |
Возвращает целое, являющееся частью выражения типа Date и содержащее месяц. Месяц возвращается как число между 1 и 12 |
Day(D) |
Возвращает целое, являющееся частью выражения типа Date и содержащее день. День возвращается как число между 1 и 31 |
Hour(D) |
Возвращает целое, содержащее часы как часть времени, содержащегося в выражении типа Date. Часы возвращаются как число между 0 и 23. Если аргумент не содержит значения времени, то возвращается 0 |
Minute(D) |
Возвращает целое, содержащее минуты как часть времени, содержащегося в выражении типа Date. Минуты возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0 |
DateValue(E) |
Возвращает значение типа Date, эквивалентное дате, заданной аргументом Е, который может быть строкой, числом или константой, представляющей время |
TimeValue(E) |
Возвращает значение типа Date, содержащее время, заданное аргументом Е, который может быть строкой, числом или константой, представляющей время |
Строковые функции
N - любое допустимое численное значение; S - любое допустимое строковое значение. Аргументы каждой функции являются обязательными, если не указано иначе.
Функция(аргумент) |
Действие |
InStr(N1,S1,S2,N2) |
Возвращает положение S2 в S1. N1 – начальное положение для поиска. N2 определяет, следует ли выполнять поиск с учетом регистра. N1, N2 - необязательные аргументы |
Lcase(S) |
Возвращает строку (тип String), содержащую копию S со всеми символами верхнего регистра, преобразованными в символы нижнего регистра |
Left(S,N) |
Возвращает строку: копирует N символов из S, начиная с левого крайнего символа S |
Len(S) |
Возвращает число символов в S, включая начальные и конечные пробелы |
Ltrim(S) |
Возвращает копию строки S после удаления символов пробела из левой части строки (начальные пробелы) |
Mid(S,N1,N2) |
Возвращает строку: копирует N2 символов из S, начиная с позиции символа в S, заданной аргументом N1. N2 - необязательный аргумент, если он опущен, то возвращаются все символы в строке S от позиции N1 до конца строки |
Right(S,N) |
Возвращает значение типа String: копирует N символов из S, начиная с правого крайнего символа S |
Rtrim(S) |
Возвращает копию строки S после удаления символов пробела из правой части строки (конечные пробелы) |
Space(N) |
Возвращает строку пробелов длиной N символов |
StrComp(S1,S2,N) |
Сравнивает S1 с S2 и возвращает число, обозначающее результат сравнения: -1, если S1<S2; 0 - S1=S2; 1 - S1>S2. N является необязательным аргументом и указывает следует ли выполнять сравнение с учетом регистра |
StrConv(S,N) |
Возвращает строку, преобразованную в новую форму в зависимости от числового кода, заданного аргументом N. VBA предоставляет внутренние константы для использования с функцией StrConv. Наиболее полезными являются: vbProperCase (преобразует строку так, что каждая буква, начинающая слово, становится заглавной), vbLowerCase (преобразует строку в буквы нижнего регистра) и vbUpperCase (преобразует строку в буквы верхнего регистра) |
String(N,S) |
Возвращает строку длиной N символов, состоящую из символа, заданного первым символом в S |
Trim(S) |
Возвращает копию строки S после удаления начальных и конечных символов пробела из этой строки |
Ucase(S) |
Возвращает S со всеми символами нижнего регистра, преобразованными в символы верхнего регистра |
Ниже представлены примеры использования стандартных функций VBA.
Удаление ненужных пробелов. Функции LTrim, RTrim, Trim.
Процедура RemoveBlank удаляет ненужные пробелы в строке str0. Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке, не предусмотренные логикой программы, могут вызвать не корректное её выполнение. В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim. Эти функции не изменяют исходную строку, а возвращают копию этой строки с удаленными лишними пробелами слева, справа, и слева и справа соответственно.
Sub RemoveBlank()
Dim Str0, Str1, Str2, Str3
Str0 = " Строка "
Str1 = RTrim(Str0)
Str2 = LTrim(Str0)
Str3 = Trim(Str0)
MsgBox "(" & Str1 & ")" & Chr(13) & _
"(" & Str2 & ")" & Chr(13) & _
"(" & Str3 & ")"
End Sub
При выполнении этой процедуры выводится диалоговое окно
Определение длины строки. Функция Len.
Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len. Процедура LenStr_1 определяет длину строки Str0. В приведенном ниже листинге в начале и в конце строки Str0 присутствует по два пробела.
Sub LenStr_1()
Dim Str0 As String, LStr0 As Byte
Str0 = " Строка "
LStr0 = Len(Str0)
MsgBox "Длина строки=" & LStr0
End Sub
Результат выполнения процедуры:
Строка фиксированной длины имеет всегда одну и ту же длину, и поэтому функция Len всегда возвращает объявленную длину строки, независимо от фактической длины строки. Например, в процедуре LenStr_2 переменная Str0 определена как строковая фиксированной длины в 20 символов. Несмотря на то, что в ней фактически находится слово "Строка", функция Len(Str0) возвратит результат, равный 20.
Sub LenStr_2()
Dim Str0 As String * 20, LStr0 As Byte
Str0 = "Строка"
LStr0 = Len(Str0)
MsgBox "Длина строки=" & LStr0
End Sub
Результат выполнения процедуры:
Чтобы в таком случае узнать фактическую длину строки (в нашем случае это 6), необходимо использовать комбинацию функций Len(Trim(StrokeName)):
Sub LenStr_3()
Dim Str0 As String * 20, LStr0 As Byte
Str0 = "Строка"
LStr0 = Len(Trim(Str0))
MsgBox "Длина строки=" & LStr0
End Sub
Результат будет следующим:
