Сравнение и поиск строк. Функции StrComp, InStr

В VBA имеются две функции, позволяющие сравнивать строки: StrComp и InStr.

Формат функции StrComp:

StrComp (String1, String2 [, Compare])

где String1, String2 - любые два строковых выражения, которые необходимо сравнивать. Compare - необязательный аргумент, может быть любой из следующих предопределенных констант:

- vbBinaryCompare - бинарное сравнение двух строк;

- vbTextCompare - текстовое сравнение двух строк.

При бинарном сравнении коды символов упорядочены в соответствии с их двоичным значением, и коды строчных и прописных букв различаются при сравнении. При текстовом сравнении VBA прописные и строчные буквы не различает.

Если аргумент Compare опускается, то используется текущая установка инструкции Option Compare (см. лабораторную работу № 3 «Инструкции перехода»).

Функция StrComp возвращает следующее значение:

- -1, если String1 меньше String2;

- 0, если String1 и String2 равны;

- 1, если String1 больше String2.

В процедуре Comp_Str для задания метода сравнения строковых данных используется параметр vbTextCompare, который устанавливает метод сравнения строковых данных Text.

Sub Comp_Str()

Dim R1 As String, R2 As String, R3 As String

R1 = StrComp("Строка1", "Строка2", vbTextCompare)

R2 = StrComp("Строка1", "Строка1", vbTextCompare)

R3 = StrComp("Строка2", "Строка1", vbTextCompare)

MsgBox "R1=" & R1 & " " & "R2=" & R2 & " " & "R3=" & R3

End Sub

Результат выполнения процедуры Comp_Str: В первой инструкции присваивания текстовое выражение Строка1 меньше, чем Строка2, и поэтому значение R1=–1, во втором они равны (R2=0) и в третьем Строка2 больше, чем Строка1 (R3=1).Функция InStr дает возможность определить, содержит ли одна строка другую строку.Формат функции:

InStr([Start,] String1, String2 [, Compare])

String1, String2 – любые допустимые строковые выражения. Функция проверяет, содержится ли String1 в String2.

Start – необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка. Аргумент Start является обязательным, если указывается аргумент Compare.

Compare имеет тот же смысл, что и в функции StrComp.

Функция InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. Если InStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null (“Пусто”), то функция также возвращает Null.

Процедура In_Str показывает работу функции InStr.

Sub In_Str()

Dim R1 As String, R2 As String

R1 = "Строка ввода

R2 = "Ввод"

MsgBox "R2 входит в R1 с позиции " & InStr(1, R1, R2, _

vbTextCompare)

End Sub

Результат выполнения процедуры In_Str:

Выделение части строки. Функции Left, Right и Mid.

Задачу выделения части строки в 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, Start – любые численные значения.

 

Функция Mid возвращает копию String, начиная с положения символа в String, задаваемого с помощью аргумента Start . Необязательный аргумент Length определяет количество копируемых в Mid символов из String. Если Start содержит большее число, чем фактическая длина String, то возвращается пустая строка.


Процедура SelectPart демонстрирует работу всех трёх функций.

Sub SelectPart()

Dim R1 As String, R2 As String, _

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

Результат выполнения процедуры SelectPart:

Форматирование Значений данных. Функция 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 DateDim MyTime As DateDim MyVar As Single MyDate = #3/6/2016# ' Задание даты 06.03.16MyTime = #4:07:45 PM# ' Задание момента времени 16:07:45MyVar = 1372.547MsgBox 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

1. Скопируйте в модуль VBA процедуры RemoveBlank, LenStr_1, LenStr_2, LenStr_3, Comp_Str, In_Str, SelectPart, Ex_Format.

2. Выполните эти процедуры и проанализируйте результаты выполнения.

3. Замените по вашему выбору значения констант, являющихся значениями аргументов функции и введите значения переменных, являющихся аргументами функций, при помощи функции InputBox. Сохраните процедуру под именем ExNew_Format и проанализируйте результат выполнения.