В этой статье разберем работу со строками в VBA на примерах функций InStr, LCASE, UCase, Left, Right, Mid, LTrim, RTrim, Trim, Len, Replace, Space, StrComp, String, StrReverse.
Строки - это последовательность символов, которая может состоять либо из алфавитов, цифр, специальных символов, либо из всех них. Переменная называется строкой, если она заключена в двойные кавычки "".
Синтаксис
variablename = "string"Примеры
Строковые функции
Существуют предопределенные функции VBA String, которые помогают разработчикам эффективно работать со строками. Ниже приведены методы String, поддерживаемые в VBA. Пожалуйста, нажмите на каждый из методов, чтобы знать подробно.
Название функции и описание
InStr
Функция InStr возвращает первое вхождение одной строки в другую строку. Поиск происходит слева направо.
Синтаксис
InStr(string1,string2[,compare])Параметр Описание
- Пуск - необязательный параметр. Указывает начальную позицию для поиска. Поиск начинается с первой позиции слева направо.
пример
Private Sub Constant_demo_Click() Dim Var As Variant Var = "Microsoft VBScript" MsgBox ("Line 1: " & InStr(1, Var, "s")) MsgBox ("Line 2: " & InStr(7, Var, "s")) MsgBox ("Line 3: " & InStr(1, Var, "f", 1)) MsgBox ("Line 4: " & InStr(1, Var, "t", 0)) MsgBox ("Line 5: " & InStr(1, Var, "i")) MsgBox ("Line 6: " & InStr(7, Var, "i")) MsgBox ("Line 7: " & InStr(Var, "VB")) End Sub
Line 1: 6
Line 2: 0
Line 3: 8
Line 4: 9
Line 5: 2
Line 6: 16
Line 7: 11
Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо.
InStrRev
Функция InStrRev возвращает первое вхождение одной строки в другую строку. Поиск происходит справа налево.
Синтаксис
InStrRev(string1,string2[,start,])Параметр Описание
- String1 - требуемый параметр. Строка для поиска.
- String2 - требуемый параметр. Строка, по которой выполняется поиск String1.
- Пуск - необязательный параметр. Указывает начальную позицию для поиска. Поиск начинается с первой позиции справа налево.
- Compare - Необязательный параметр. Указывает сравнение строк.Он может принимать следующие значения.
- 0 = vbBinaryCompare - выполняет двоичное сравнение (по умолчанию)
- 1 = vbTextCompare - выполняет сравнение текста
пример
Добавьте кнопку и установите следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1: " & InStrRev(var,"s",10)) msgbox("Line 2: " & InStrRev(var,"s",7)) msgbox("Line 3: " & InStrRev(var,"f",-1,1)) msgbox("Line 4: " & InStrRev(var,"t",5)) msgbox("Line 5: " & InStrRev(var,"i",7)) msgbox("Line 6: " & InStrRev(var,"i",7)) msgbox("Line 7: " & InStrRev(var,"VB",1)) End Sub
После выполнения вышеуказанного скрипта он производит следующий результат.
Line 1: 6
Line 2: 6
Line 3: 8
Line 4: 0
Line 5: 2
Line 6: 2
Line 7: 0
Возвращает первое вхождение указанной подстроки. Поиск происходит справа налево.
LCASE
Функция LCase возвращает строку после преобразования введенной строки в строчные буквы.
Синтаксис
Lcase(String)пример
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1: " & LCase(var)) var = "MS VBSCRIPT" msgbox("Line 2: " & LCase(var)) var = "microsoft" msgbox("Line 3: " & LCase(var)) End Sub
Line 1: microsoft vbscript
Line 2: ms vbscript
Line 3: microsoft
Возвращает нижний регистр указанной строки.
UCase
Функция UCase возвращает строку после преобразования введенной строки в буквы буквы UPPER.
Синтаксис
UCase(String)пример
Добавьте кнопку и поместите следующую функцию внутри нее.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1: " & UCase(var)) var = "MS VBSCRIPT" msgbox("Line 2: " & UCase(var)) var = "microsoft" msgbox("Line 3: " & UCase(var)) End Sub
После выполнения вышеуказанного скрипта он производит следующий вывод.
Line 1: MICROSOFT VBSCRIPT
Line 2: MS VBSCRIPT
Line 3: MICROSOFT
Возвращает верхний регистр указанной строки.
Left
Функция Left возвращает указанное количество символов с левой стороны данной входной строки.
Синтаксис
Left(String, Length)Параметр Описание
- String - обязательный параметр. Строка ввода, из которой указанное число символов должно быть возвращено с левой стороны.
- Длина - требуемый параметр. Целое число, определяющее количество возвращаемых символов.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript" msgbox("Line 1: " & Left(var,2)) var = "MS VBSCRIPT" msgbox("Line 2: " & Left(var,5)) var = "microsoft" msgbox("Line 3: " & Left(var,9)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1: Mi
Line 2: MS VB
Line 3: microsoft
Возвращает определенное количество символов с левой стороны строки.
Right
Функция Right возвращает указанное количество символов с правой стороны данной входной строки.
Синтаксис
Right(String, Length)Параметр Описание
- String - обязательный параметр. Строка ввода, из которой указанное число символов должно быть возвращено с правой стороны.
- Длина - требуемый параметр. Целое число, которое задает количество возвращаемых символов.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1: " & Right(var,2)) var = "MS VBSCRIPT" msgbox("Line 2: " & Right(var,5)) var = "microsoft" msgbox("Line 3: " & Right(var,9)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1: pt
Line 2: CRIPT
Line 3: microsoft
Возвращает определенное количество символов с правой стороны строки.
Mid
Mid функция возвращает указанное количество символов из заданной входной строки.
Синтаксис
Mid(String,start[,Length])Параметр Описание
- String - обязательный параметр. Строка ввода, из которой задано количество символов, которые нужно вернуть.
- Начало - требуемый параметр. Целое число, определяющее начальную позицию строки.
- Длина - необязательный параметр. Целое число, определяющее количество возвращаемых символов.
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript" msgbox("Line 1: " & Mid(var,2)) msgbox("Line 2: " & Mid(var,2,5)) msgbox("Line 3: " & Mid(var,5,7)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1: icrosoft VBScript
Line 2: icros
Line 3: osoft V
Возвращает определенное количество символов из строки на основе указанных параметров.
LTrim
Функция Ltrim удаляет пробелы с левой стороны строки.
Синтаксис
LTrim(String)пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = " Microsoft VBScript" msgbox "After Ltrim: " & LTrim(var) End Sub
Когда вы выполняете функцию, она производит следующий вывод.
After Ltrim: Microsoft VBScript
Возвращает строку после удаления пробелов в левой части указанной строки.
RTrim
Функция Rtrim удаляет пробелы с правой стороны строки.
Синтаксис
RTrim(String)пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript " msgbox("After Rtrim: " & RTrim(var)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
After Rtrim: Microsoft VBScript
Возвращает строку после удаления пробелов в правой части указанной строки.
Trim
Функция Trim удаляет как ведущее, так и конечное пустое пространство данной входной строки.
Синтаксис
Trim(String)пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" var = " Microsoft VBScript " msgbox ("After Trim: " & Trim(var)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
After trim: Microsoft VBScript
Возвращает строковое значение после удаления как верхнего, так и конечного пробелов.
Len
Функция Len возвращает длину данной входной строки, включая пробелы.
Синтаксис
Len(String)пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var1 as Variant Dim var2 as Variant var1 ="Microsoft VBScript" msgbox("Length of var1 is: " & Len(var1)) var2 = " Microsoft VBScript " msgbox ("Length of var2 is: " & Len(var2)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Length of var1 is: 18
Length of var2 is: 36
Возвращает длину данной строки.
Replace
Функция Replace заменяет указанную часть строки на определенную строку, указанное количество раз.
Синтаксис
Replace(string,find,replacewith[,start[,count[,compare]]])Параметр Описание
- String - обязательный параметр. Строка ввода, которую нужно искать для замены.
- Find - требуемый параметр. Часть строки, которая будет заменена.
- Replacewith - обязательный параметр. Строка замены, которая будет заменена на параметр find.
- Start - необязательный параметр. Задает начальную позицию, из которой нужно искать и заменять строку. Значение по умолчанию - 1.
- Count - необязательный параметр. Указывает количество раз, которое должна выполняться замена.
- Compare - Необязательный параметр. Указывает метод сравнения, который будет использоваться. Значение по умолчанию - 0.
- 0 = vbBinaryCompare - выполняет двоичное сравнение
- 1 = vbTextCompare - выполняет текстовое сравнение
пример
Private Sub Constant_demo_Click() Dim var as Variant var = "This is VBScript Programming" "VBScript to be replaced by MS VBScript msgbox("Line 1: " & Replace(var,"VBScript","MS VBScript")) "VB to be replaced by vb msgbox("Line 2: " & Replace(var,"VB","vb")) ""is" replaced by ## msgbox("Line 3: " & Replace(var,"is","##")) ""is" replaced by ## ignores the characters before the first occurence msgbox("Line 4: " & Replace(var,"is","##",5)) ""s" is replaced by ## for the next 2 occurences. msgbox("Line 5: " & Replace(var,"s","##",1,2)) ""r" is replaced by ## for all occurences textual comparison. msgbox("Line 6: " & Replace(var,"r","##",1,-1,1)) ""t" is replaced by ## for all occurences Binary comparison msgbox("Line 7: " & Replace(var,"t","##",1,-1,0)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1: This is MS VBScript Programming
Line 2: This is vbScript Programming
Line 3: Th## ## VBScript Programming
Line 4: ## VBScript Programming
Line 5: Thi## i## VBScript Programming
Line 6: This is VBSc##ipt P##og##amming
Line 7: This is VBScrip## Programming
Возвращает строку после замены строки другой строкой.
Space
Функция Space заполняет строку конкретным количеством пробелов.
Синтаксис
space(number)Параметр Описание
Номер - требуемый параметр. Количество пробелов, которые мы хотим добавить к данной строке.
пример
Private Sub Constant_demo_Click() Dim var1 as Variant var1 = "Microsoft" Dim var2 as Variant var2 = "VBScript" msgbox(var1 & Space(2)& var2) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Microsoft VBScript
Заполняет строку указанным количеством пробелов.
StrComp
Функция StrComp возвращает целочисленное значение после сравнения двух заданных строк. Он может возвращать любое из трех значений -1, 0 или 1 на основе входных строк для сравнения.
- Если String1 меньше String2, то StrComp возвращает -1
- Если String1 равно String2, то StrComp возвращает 0
- Если String1 больше String2, то StrComp возвращает 1
Синтаксис
StrComp(string1,string2[,compare])Параметр Описание
- String1 - требуемый параметр. Первое строковое выражение.
- String2 - требуемый параметр. Второе строковое выражение.
- Compare - Необязательный параметр. Указывает сравнение строк.Он может принимать следующие значения.
- 0 = vbBinaryCompare - выполняет двоичное сравнение (по умолчанию)
- 1 = vbTextCompare - выполняет сравнение текста
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var1 as Variant msgbox("Line 1:" & StrComp("Microsoft","Microsoft")) msgbox("Line 2:" &StrComp("Microsoft","MICROSOFT")) msgbox("Line 3:" &StrComp("Microsoft","MiCrOsOfT")) msgbox("Line 4:" &StrComp("Microsoft","MiCrOsOfT",1)) msgbox("Line 5:" &StrComp("Microsoft","MiCrOsOfT",0)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1:0
Line 2:1
Line 3:1
Line 4:0
Line 5:1
Возвращает целочисленное значение после сравнения двух указанных строк.
String
Функция String заполняет строку указанным символом для указанного количества раз.
Синтаксис
String(number,character)Параметр Описание
- Номер - требуемый параметр. Целочисленное значение, которое будет повторяться в течение определенного количества раз против параметра символа.
- Символ - требуемый параметр. Значение символа, которое должно повторяться определенное количество раз.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() msgbox("Line 1:" & String(3,"$")) msgbox("Line 2:" & String(4,"*")) msgbox("Line 3:" & String(5,100)) msgbox("Line 4:" & String(6,"ABCDE")) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Буквы от ‘A’ до ‘Z’ следуют в возрастающем порядке, иными словами, каждая буква имеет порядковое значение, соответствующее ее месту в алфавите. Это порядковое значение может быть получено посредством функции ord
.
ord(выражение)
– возвращает порядковый номер литеры или значения другого дискретного типа.
ord(‘I’), ord(‘J’). Результат: 73, 74 (код ASCII)
Порядковый номер литеры зависит от используемого кода. Но, независимо от используемого кода, порядковые значения букв следуют по возрастанию:
ord(‘A’) < ord(‘B’) < ord(‘C’) … < ord(‘Z’)
хотя ord(‘Z’) – ord(‘A’) и не обязательно равно 25. То же самое и со строчными буквами:
ord(‘a’) < ord(‘b’) < ord(‘c’) … < ord(‘z’)
Определенной связи между прописными и соответствующими строчными буквами нет, но можно без опасений полагаться на то, что ord(‘a’) – ord(‘A’) имеет то же значение, что и ord(‘z’) – ord(‘Z’).
Независимо от используемого кода, порядковые значения цифр также расположены по возрастанию:
ord(‘0’) < ord(‘1’) < ord(‘2’) … < ord(‘9’)
и, более того, порядковые значения соседних цифр отличаются на 1; так, ord(‘9’) – ord(‘0’) = 9. Отсюда следует, что численное значение цифры d (типа char) может быть получено так
value:= ord(d) – ord(‘0’).
Паскаль поддерживает типы char, integer
и т.д. В дополнение к ним программист вправе определить и другие типы путем перечисления последовательности констант. Например, тип, заданный перечислением:
type days = (mon, tue, wed, thu, fri, sat, sun);
Константы типа, заданного перечислением, имеют порядковые значения, отсчитываемые от нуля. Например, ord(mon) возвращает 0, ord(sun) возвращает 6; mon < sun.
Тип boolean
– перечисляемый тип, который автоматически задается как
type boolean = (false, true);
следовательно, ord(false) дает 0, ord(true) дает 1; false < true.
Функция chr
Обратной для ord
является функция chr
.
chr(выражение)
– возвращает литеру, порядковое значение которой задается параметром; неправильное значение влечет ошибку.
chr(73), chr(74). Результат: I, J (кодировка ASCII)
chr(1000). Результат: ошибка
Функции succ и pred
Порядковые значения редко бывают нужны сами по себе. Часто достаточно знать следующий или предыдущий элемент в установленном порядке. Для этой цели служат функции succ
и pred
.
succ(выражение)
– возвращает элемент, следующий за тем, который указан в качестве параметра.
succ(‘A’), succ(‘0’), succ(0). Результат: B, 1 (символ), 1 (число)
succ(false). Результат: true
pred(выражение)
– возвращает элемент, предшествующий тому, который указан в качестве параметра.
pred(‘Z’), pred(‘9’), pred(9). Результат: Y, 8 (символ), 8 (число)
pred(true). Результат: false
Эти две функции можно использовать для определения следующих и предшествующих элементов для типа, заданного перечислением. Возьмем тип days , определенный ранее: pred(sun) возвращает sat, succ(mon) возвращает tue.
Однако было бы неверно писать writeln(pred(sun)), поскольку элементы перечисляемого типа нельзя читать или печатать, что, конечно, снижает выгоду от использования таких типов. Наилучшее приближение к writeln(pred(sun) – это оператор writeln(ord(pred(sun))), печатающий число 5 (порядковое значение элемента sat).
ChrФункция Chr
Chr(CharCode)Chr$(CharCode)
ChrB(CharCode)
ChrW(CharCode)
Функция Chr (Ch aracter )позволяет получить символ по значению его числового кода ANSI или Unicode
Возвращаемое значениеФункции Chr , ChrB , ChrW возвращают значение субтипа String типа Variant , содержащее символ, соответствующий указанному коду символа ANSI или Unicode. Функции Chr$ , ChrB$ , ChrW$ возвращают соответственно значение типа String
ПримечаниеChr
и Chr$
возвращают символ по его кодировке в стандарте ANSI
ChrB
и ChrB$
возвращают однобайтовую
строку
ChrW
возвращает символ Unicode, однако в системах, не поддерживающих Unicode, ее поведение аналогично Chr
Использование в параметре CharCode
значения больше, чем 255, генерирует ошибки стадии выполнения 5: Invalid procedure call or argument или 6: Overflow
Итак, продолжаем наши уроки Паскаль для начинающих. В прошлом уроке мы разобрали , но там мы упомянули про символы, поэтому прежде чем глубоко изучать тип данных , мы узнаем о типе Char. Символьный тип данных Char — тип данных, значениями которого являются одиночные символы. Данный тип может содержать всего один любой символ (Например: «*», «/», «.», «!» и другие). Каждый такой символ занимает 8 бит памяти, всего существует 256 восьмибитовых символов. Все символы, используемые символьным типом Char записаны в таблице символов ASCII (American Standart Code for Information Interchange) или Американский стандарт кода для обмена информацией.
Символьные константы заключаются в апострофы, например ".", "*", "7", "s". Также символьную константу можно записать с помощью символа — «решетки», например #185 — выведет символ под номером 185 из таблицы ASCII (это символ "№").
К символьному типу применимы 5 функций: Ord, Chr, Pred, Succ и Upcase.
Функция Ord преобразовывает символ в её числовой код из таблицы ASCII . Например для символа "№" она возвратит значение 185. Функция Chr обратна функции Ord. Функция Chr преобразует числовой код символа в сам символ, например, если взять числовой код 64, то функция Chr (64) возвратит символ "@".
Пример программы на Паскаль с использованием функции Ord:
Begin //Начало программы
writeln (ord (x)); //Вывод номера в таблице ASCII
end. //Конец программы
Пример программы на Паскаль с использованием функции Chr:
Var x:integer; // Описание переменных (x - целочисленный тип)
Begin //Начало программы
readln (x); //Считывание переменной
writeln (chr (x)); //Вывод символа по номеру в таблице ASCII
end. //Конец программы
Функция Pred возвращает значение предыдущего символа из таблицы ASCII, например для символа "P" (Pred (P)) эта функция возвратит символ "O". Функция Succ обратная функции Pred. Для символа "P" функция Succ (P) возвратит символ "Q", то есть следующий символ из вышеописанной таблицы ASCII.
Пример программы на Паскаль с использованием функций Pred и Succ:
Var x:char; // Описание переменных (x - символьный тип)
Begin //Начало программы
readln (x); //Считывание переменной
writeln (pred (x)); //Вывод предыдущего символа в таблице ASCII
writeln (succ (x)); //Вывод следующего символа в таблице ASCII
end. //Конец программы
Функция UpCase применима только для строчных букв английского алфавита. Данная функция преобразует строчные английские буквы в заглавные.
Пример программы на Паскаль с использованием функции UpCase:
Приложение к уроку - таблицы символов ASCII:
На сегодня урок окончен. Помните, что программирование на паскале просто и является основой для многих языков программирования.
Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать "неполадки" в работе программы.
В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim . Следует иметь ввиду, что эти функции на самом деле не изменяют исходную строку, а возвращают копию строки с удаленными лишними пробелами.
Определение длины строки
Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len . В приведенным ниже листинге между знаками круглых скобок и словом присутствует по два пробела.
Следует быть внимательными со строками фиксированной длины. Поскольку строка фиксированной длины имеет всегда одну и ту же длину, функция Len всегда возвращает объявленную длину строки, независимо от фактической длины строки. Например, если в строковой переменной фиксированной длины StrokeName, имеющей длину 15 символов, фактически находится слово "солнце", то функция Len(StrokeName) возвратит результат 15. Чтобы в таком случае узнать фактическую длину строки (в нашем случае - 6), необходимо использовать следующую комбинацию функций: Len(Trim(StrokeName)) .
Сравнение и поиск строк
В VBA имеются две функции, помогающих сравнивать строки: StrComp, InStr .
Функция StrComp
Синтаксис
StrComp (String1, String2 [, Compare])
String1, String2 - любые два строковых выражения, которые необходимо сравнивать.
При выполнении StrComp возвращается одно из следующих значений:
- -1, если String1 меньше String2;
- 0, если String1 и String2 равны;
- 1, если String1 больше String2.
В вышеприведенном листинге в текстовом режиме сравниваются две строки: "Строка по умолчанию" и " Строка по умолчанию". Результат сравнения = 1, т.е. "Строка по умолчанию" больше, чем " Строка по умолчанию".
Поэкспериментируйте с разнообразными строками для лучшего понимания работы функции StrComp.
Функция InStr
Функция InStr дает возможность определить, содержит ли одна строка другую строку.
Синтаксис
StrComp ( String1, String2 [, Compare])
String1, String2 - любые допустимые строковые выражения. Функция проверяет содержится ли String1 в String2.
Compare - необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare):
- vbBinaryCompare - бинарное сравнение двух строк;
- vbTextCompare - текстовое сравнение двух строк;
- vbDatabaseCompare - используется только в Microsoft Access.
Start - необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка.
InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. Если InStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null, то функция также возвращает Null.
Разбиение строки
Иногда возникает необходимость разбиения строки на составляющие части. В VBA эту задачу решают три функции: Left, Right, Mid .
Функция Left
Синтаксис
Left (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, то возвращается пустая строка.
Символы, которые нельзя ввести с клавиатуры
Зачастую случается, что надо ввести какой-либо символ, для которого отсутствует клавиша на клавиатуре (например, символ копирайта). Другая ситуация - когда надо в строку включить служебный символ VBA (самый распространенный случай - включение двойных кавычек).
Чтобы включить в строку символы, которые невозможно ввести с клавиатуры, или которые имеют особое значение для VBA, используется функция Chr .
Синтаксис
Chr (Charcode)
Charcode - любое численное выражение, являющееся допустимым кодом для набора символов, используемого компьютером. Должен быть целым числом от 0 до 255.
Функция Chr принимает код отдельного символа в качестве аргумента и возвращает строку, содержащую соответствующий этому коду символ. Данная функция использована в вышеприведенных листингах для перевода строки при выводе сообщения на экран Chr (13).
Поскольку символы, используемые для начала новой строки, являются очень важными при форматировании сообщений и других строковых данных, которыми манипулируют VBA-процедуры, имеется несколько предопределенных констант для этих символов, чтобы не было необходимости использовать функцию Chr:
- vbCr - символ возврата каретки. Эквивалент Chr(13)
- vbLf - символ смещения на одну строку. Эквивалент Chr(10)
- vbCrLf - символ возврата каретки+смещения на одну строку. Эквивалент Chr(13)+ Chr(10)
- vbTab - символ табуляции. Эквивалент Chr(9)
Для просмотра списка код-символ надо открыть справочную систему VBA и по запросу "character sets" будет представлена соответствующая таблица.
Форматирование значений данных
Очень часто формат данных на выходе программы по тем или иным причинам нас не совсем устраивает. Эту задачу решает функция Format .
VBA-функция Format идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.
Синтаксис
Format (Expression [, Format[, Firstdayofweek [, Firstweekofyear]]])
Expression - любое допустимое выражение (обязательный аргумент).
Format - допустимое выражение именованного или определенного пользователем формата.
Firstdayofweek - константа, которая определяет первый день недели.
Firstweekofyear - константа, которая определяет первую неделю года.
Чтобы использовать функцию Format, надо либо задать предопределенный формат , либо создать образ определенного формата , используя символы-заполнители.
Именованные форматы для использования с функцией Format
Именованный формат | Действие |
General Date | Форматирует информацию о дате и времени в последовательное число даты, используя установки формата даты и времени для данного компьютера. |
Long Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Long-формата даты. |
Medium Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Medium-формата даты. |
Short Date | Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Short-формата даты. |
Long Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Long-формата времени. |
Medium Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Medium -формата времени. |
Short Time | Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Short -формата времени. |
General Number | Форматирует число в строку без каких-либо особых символов. |
Currency | Форматирует число с символом денежной единицы, разделителем тысяч и только двумя десятичными разрядами. |
Fixed | Форматирует число так, чтобы всегда была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него. |
Standart | Форматирует число с разделителем тысяч так, чтобы была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него. |
Percent | Форматирует число как процентное отношение, умножая его на 100 и добавляя символ процента. |
Scientific | Форматирует число в обычный экспоненциальный формат. |
Yes/No | Возвращается строка "Да" если форматируемое число ненулевое, иначе - "Нет". |
True/False | Возвращается строка "Истина" если форматируемое число ненулевое, иначе - "Ложь". |
On/Off | Возвращается строка "Вкл" если форматируемое число ненулевое, иначе - "Выкл". |
Символы-заполнители для создания пользовательских форматов
Символ-заполнитель | Действие (в качестве примера используется число 1234.45) |
0 | Цифровой символ, отображает цифру, если таковая находится в этой позиции, или 0, если - нет. Можно использовать символ 0 для отображения начальных нулей для целых чисел и конечных нулей в десятичных дробях: 00000.000 отображает 01234.450 |
# | Цифровой символ, отображает цифру, если таковая находится в этой позиции, иначе - не отображает ничего. Символ-заполнитель # эквивалентен 0, кроме того, что начальные и конечные нули не отображаются: #####.### отображает 1234.45 |
$ | Отображает знак доллара: $###,###.00 отображает $1 234,45 |
. | Десятичный символ-заполнитель, отображает десятичную точку в обозначенной позиции в строке символов-заполнителей 0: #.##.## отображает 1234.45 |
% | Символ процента, умножает значение на 100 и добавляет знак процента в позицию, указанную символами-заполнителями 0:#.#0.00% отображает число 0.12345 как 12.35% (происходит округление) |
, | Разделитель тысяч, добавляет запятые как разделители тысяч в строках символов-заполнителей 0 и #: ###,###,###.00 отображает 1 234,45 |
E- e- | Отображает значение в экспоненциальном формате со знаком порядка только для отрицательных значений: #.####E-00 отображает 1.23445Е03 |
E+ e+ | Отображает значение в экспоненциальном формате со знаком порядка как для отрицательных, так и для положительных значений: #.####E+00 отображает 1.23445Е+03 |
/ | Отделяет день, месяц и год для форматирования значений дат. |
m | Указывает, как отображать месяцы в датах: m отображает 1, mm - 01, mmm - янв, mmmm - Январь |
d | Указывает, как отображать дни в датах: d отображает 1, dd - 01, ddd - Вс, dddd - воскресенье |
y | Отображает день года как число от 1 до 366 |
yy | Указывает, как отображать годы в датах: yy - 66, yyyy - 1966 |
q | Отображает квартал года как число от 1 до 4 |
w | Отображает день недели как число (1 - воскресенье) |
ww | Отображает неделю года как число от 1 до 54 |
: | Отделяет часы, минуты и секунды в значениях формата времени: hh:mm:ss - 01:01:01, h:m:s - 1:1:1 |
h | Указывает, как отображать часы: hh - 01, h - 1 |
m | Указывает, как отображать минуты: mm - 01, m - 1 |
s | Указывает, как отображать секунды: ss - 01, s - 1 |
AM/PM | Отображает время в 12-часовом формате времени с добавленными АМ или РМ |
@ | Символьный заполнитель, отображает пробел, если не имеется соответствующего символа в форматируемой строке. |
Отображает все символы в верхнем регистре. | |
> | Отображает все символы в нижнем регистре. |