Функции преобразования форматов



Преобразование строки в число и обратно осуществляют следующими функциями (Таблица 11).

Таблица 11. Строковые функции преобразования форматов.

Функция Возвращаемое значение
Val (строка) Возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа
Str (число) Возвращает значение типа variant (String), являющееся строковым представлением числа. В качестве допустимого десятичного разделителя функция Str воспринимает только точку. При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию cstr, описанную ниже.

Кроме функций vai и str в VBA имеются другие функции преобразования типов (Таблица 12).


Таблица 12. Функции преобразования типов.

Функция Тип, в который преобразуется выражение
CBool (Выражение) Boolean
CByte (Выражение) Byte
CCur (Выражение) Currency
CDate (Выражение) Date
CDbl (Выражение) Double
CDec (Выражение) Decimal
CInt (Выражение) Integer
CLng (Выражение) Long
CSng (Выражение) Single
CVar (Выражение) Variant
CStr (Выражение) String

Чтобы представить числовое значение как дату, время, денежное значение или в специальном формате, следует использовать функцию Format.

Синтаксис:

Format (Выражение [, Формат [, ПервыйДеньНедели [, ПерваяНеделяГода]]])

 

Возвращает значение типа variant (string), содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата.

Аргументы:

Выражение — любое допустимое выражение

Формат — любое допустимое именованное или определяемое пользователем выражение формата. Примером именованного формата является Fixed — формат действительного числа с двумя значащими цифрами после десятичной точки

ПервыйДеньНедели — постоянная, определяющая первый день недели

ПерваяНеделяГода — постоянная, определяющая первую неделю года

При построении пользовательского формата возможно использование специальных символов (Таблица 13).

Таблица 13. Символы для построения пользовательского формата.

Символ Назначение
0 Резервирует позицию цифрового разряда. Отображает цифру или нуль. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, где в строке формата находится 0, функция отображает эту цифру аргумента, если нет — в этой позиции отображается нуль
# Резервирует позицию цифрового разряда. Отображает цифру или ничего не отображает. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, где в строке формата находится #, функция отображает эту цифру аргумента, если нет — в исходной позиции не отображается ничего. Действие данного символа аналогично действию 0, за исключением того, что лидирующие нули не отображаются
. Резервирует позицию десятичного разделителя. Указание точки в строке формата определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки
% Резервирует процентное отображение числа
, Разделитель разряда сотен от тысяч
: Разделитель часов, минут и секунд в категории форматов Время (Time)
/ Разделитель дня, месяца и года в категории форматов Дата (Date)
E+, E-, e+, e- Разделитель мантиссы и порядка в экспоненциальном формате

Функции обработки строк

В VBA имеются следующие функции обработки строковых выражений (Таблица 14).


Таблица 14. Функции обработки строк

Функция Результат Синтаксис:
1 2 3
Asc Возвращает ASCII-код начальной буквы строки. Asc (Строка)
Chr Преобразует ASCII-код в строку. Chr(Код) Например, Chr(13) - переход на новую строку, Chr(97)="а"
Lease Преобразует строку к нижнему регистру. Lease (Строка)
Ucase Преобразует строку к верхнему регистру. Ucase (Строка)
Left Возвращает подстроку, состоящую из заданного числа первых символов исходной строки. Left (string, length) Аргументы: length — число символов string — исходная строка
Right Возвращает строку, состоящую из заданного числа последних символов исходной строки. Right (string, length) Аргументы: length — число символов string — исходная строка
Mid Возвращает подстроку строки, содержащую указанное число символов. Mid (string, start [, length]) Аргументы: string - строковое выражение, из которого извлекается подстрока start - позиция символа в строке string, с которого начинается нужная подстрока length - число возвращаемых символов подстроки.
Len Возвращает число символов строки. Len (Строка)

Таблица 14, продолжение

1 2 3
LTrim Возвращает копию строки без пробелов в начале. LTrim (Строка)
RTrim Возвращает копию строки без пробелов в конце. RTrim (Строка)
Trim Возвращает копию строки без пробелов в начале и в конце Trim (Строка)
Space Возвращает строку, состоящую из указанного числа пробелов. Space (Число)
String Возвращает строку, состоящую из указанного числа повторений одного и того же символа. String (number, character) Аргументы: number - число повторений символа О character - повторяемый символ
StrComp Возвращает результат сравнения двух строк. StrComp (string1, string2 [, compare]) Аргументы: string1 и string2 - два любых строковых выражения compare - указывает способ сравнения строк. Допустимые значения: 0 (двоичное сравнение), 1 (посимвольное сравнение без учета регистра) Возвращаемые значения: string1 <, чем string2, то -1 string1 = string2, то 0 string1 >, чем string2, то 1

Таблица 14, окончание

1 2 3
InStr Возвращает позицию первого вхождения одной строки внутри другой строки. InStr ([start,] string1, string2 [, compare]) Аргументы: start - числовое выражение, задающее позицию, с которой начинается каждый поиск. Если этот аргумент опущен, поиск начинается с первого символа строки string1 - строковое выражение, в котором выполняется поиск string2 - искомое строковое выражение compare - указывает способ сравнения строк. Допустимые значения: 0 (для двоичного сравнения), 1 (посимвольное сравнение без учета регистра)

Функции времени и даты

Функции обработки времени и даты перечислены в таблице (Таблица 15).

Таблица 15. Функции времени и даты

Функция Результат Синтаксис:
1 2  
Date Возвращает значение типа Variant (Date) , содержащее текущую системную дату Date()
Time Возвращает значение типа Variant (Date) , содержащее текущее время по системным часам компьютера Time()
Now Возвращает значение типа Variant (Date) , содержащее текущую дату и время по системному календарю и часам компьютера Now()

Таблица 15, продолжение

1 2 3
Hour, Minute, Second Возвращают значения типа variant (integer), содержащее целое число, которое представляет часы, минуты, и секунды в значении времени. Hour (время) Minute (время) Second (время) время - значение времени или выражение, его определяющее В следующем примере переменной Час присваивается 16, Минута - 35, Секунда - 17: Время = #4:35:17 РМ# Час = Hour (Время) Минута = Minute (Время) Секунда = Second (Время)
Day, Month, Year Возвращает значение типа Variant (Integer), содержащее целое число, которое представляет день, месяц, год в значении даты. Day (дата) Month (дата) Year (дата) дата - значение даты или выражение, ее определяющее В следующем примере переменной день присваивается 17, Месяц — May, Год— I960: ДеньРож = #May 17, 1960# День = Day (ДеньРож) Месяц = Month (ДеньРож) Год = Year (ДеньРож)
Weekday Возвращает значение типа Variant (integer), содержащее целое число, представляющее день недели. Weekday (date, [firstdayofweek]) date - дата firstdayofweek - указывает первый день недели. Если этот аргумент опущен, подразумевается vbSunday (воскресенье). Допустимы также значения: vbMonday (понедельник), vbTuesday (вторник), vbWednesday (среда), vbThursday (четверг), vbFriday (пятница) и vbSaturday (суббота) В примере переменной ДеньНед присваивается 3, то есть вторник: ДеньРож = #May 17, 1960# ДеньНед = Weekday (ДеньРож)

Таблица 15, продолжение

1 2 3
Timer Возвращает значение типа Single, представляющее число секунд, прошедших после полуночи Timer ()
DateDiff Возвращает значение типа Variant(Long) , указывающее число временных интервалов между двумя датами. DateDiff (interval, date1, date2 [, firstdayofweek [,firstweekofyear]]) Аргументы: Interval - строковое выражение, указывающее тип временного интервала, который следует использовать при вычислении разности между датами date1 и date2. Допустимые значения: уууу (год), q (квартал), m (месяц), у (день года), d (день месяца), w (день недели), ww (неделя), h (часы), m (минуты), s (секунды) date1, date2 - значения типа Variant (Date). Две даты, разность между которыми следует вычислить firstdayofweek - постоянная, указывающая первый день недели firstweekofyear - постоянная, указывающая первую неделю года В следующем примере переменной ПМ присваивается 465: ПМ = DateDiff("m",#5/17/601,Now)
DatePart Возвращает значение типа variant (Integer) , содержащее указанный компонент даты. DatePart (interval, date [, firstdayofweek[, firstweekofyear] ] )

Таблица 15, Окончание

1 2 3
DateAdd Возвращает значение типа Variant (Date) , содержащее дату, к которой добавлен указанный временной интервал. DateAdd (interval, number, date) interval - строковое выражение, указывающее тип добавляемого временного интервала number - числовое выражение, указывающее число временных интервалов, которое следует добавить. Может быть положительным (для получения более поздних дат) или отрицательным (для более ранних). date - значение типа Variant (Date) или литерал даты, представляющий дату, к которой добавляется указанный временной интервал В следующем примере переменной Д присваивается 03/17/63: Д = DateAdd("m",34,05/17/60#)
TimeSerial Возвращает значение типа Variant (Date) , содержащее значение времени, соответствующее указанным часу, минуте и секунде. TimeSerial (hour, minute, second) hour, minute и second - значения типа Variant (Integer) В данном примере переменной Время присваивается 16:35:17: Время = TimeSerial (16, 35, 17)
DateSerial Возвращает значение типа Variant (Date) , соответствующее указанному году, месяцу и дню. DateSerial (year, month, day) year, month и day - значения типа Integer В следующем примере переменной Дата присваивается 05/17/60: Дата = DateSerial (1960, 5, 17)
TimeValue Преобразует строку в формат времени TimeValue (Строка)

Функции, возвращающие строки

Некоторые функции имеют по две версии, одна из которых возвращает тип данных variant а другая — тип данных string. Первая версия является более удобной, так как при этом для значений типа variant преобразование типов данных выполняется автоматически. Вторая версия, возвращающая тип string, использует меньше памяти и может быть полезна в следующих случаях:

1. Для экономии памяти, если в программе имеется очень много переменных

2. При выполнении прямой записи данных в файлы с произвольным доступом

Перечисленные ниже функции (Таблица 16) возвращают значения типа String, если к их имени добавляется символ доллара ($). Эти функции имеют такое же применение и синтаксис, как и их эквиваленты без символа доллара, возвращающие тип Variant.

Таблица 16. Функции, возвращающие строки

Chr$ CurDir$ Date$ Dir$ Error$ Format$ Input$
InputB$ LCase$ Left$ LTrim$ MidS Right$ Rtrim$
Space$ Str$ String$ Тime $ Trim$ Ucase$  

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

В проектах VBA часто встречаются две разновидности диалоговых окон: окна сообщений и окна ввода. Они встроены в VBA, и если их возможностей достаточно, то можно обойтись без проектирования диалоговых окон. Окно сообщений (MsgBox) выводит простейшие сообщения для пользователя, а окно ввода (InputBox) обеспечивает ввод информации.

Синтаксис:

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

Возвращает введённую строку (тип Variant)

Аргументы:

prompt — строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr (10)) или комбинацию этих символов (Chr(13) & Chr(10))

title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения

default — строковое выражение, Отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым

xpos — числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали

ypos — числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана

helpfile — строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо наличие также аргумента context

context - числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо наличие также аргумента helpfile

Синтаксис:

MsgBox (prompt [, buttons] [, title] [, helpfile, context])       

Возвращает код нажатой кнопки (Целое число)

Аргументы:

prompt — строковое выражение, отображаемое как сообщение в диалоговом окне

buttons — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка и основную кнопку окна сообщения. Значение по умолчанию этого аргумента равняется 0.

title — строковое выражение, отображаемое в строке , заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения

helpfile — строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо указать также аргумент context

context — числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо указать также аргумент helpfile

Значения аргумента buttons процедуры MsgBox, определяющие отображаемые кнопки в диалоговом окне, представлены в таблице (Таблица 17)

Таблица 17. Возможные значения аргумента Buttons для кнопок.

Константа Значение Отображаются кнопки
vbOKOnly 0
vbOKCancel 1
vbAbortRetrylgnore 2
vbYesNoCancel 3
vbYesNo 4
vbRetryCancel 5

Значения аргумента buttons процедуры MsgBox, определяющие отображаемые информационные значки в диалоговом окне представлены в таблице (Таблица 18)

Таблица 18. Возможные значения аргумента Buttons для значков

Константа Значение Значок
vbCritical 16
vbQuestion 32
vbExclamation 48
vbInformation 64

Значения аргумента buttons процедуры MsgBox, определяющие основную кнопку в диалоговом окне представлены в таблице (Таблица 19)

Таблица 19. Значения аргумента Buttons для кнопки по умолчанию

Константа Значение Кнопка
VbDefaultButton1 0 1
VbDefaultButton2 256 2
VbDefaultButton3 512 3
VbDefaultButton4 768 4

При написании программ с откликом, в зависимости от того, какая кнопка диалогового окна нажата, вместо возвращаемых значений удобнее использовать константы VBA, которые делают код программы удобочитаемым и, к тому же, их легко запомнить. Эти константы перечислены в таблице (Таблица 20)

Таблица 20. Константы - возвращаемые значения MsgBox.

Константа. Значение Нажатая кнопка
vbOK 1 OK
vbCancel 2 Отмена (Cancel)
vbAbort 3 Прервать (Abort)
vbRetry 4 Повторить (Retry)
vbIgnore 5 Пропустить (Ignore)
vbYes 6 Да (Yes)
vbNo 7 Нет (No)

Схема алгоритма

Алгоритм – последовательность действий, приводящая к результату.

Схема алгоритма – точное наглядное графическое изображение последовательности действий.

Каждый блок схемы алгоритма имеет взаимно однозначно соответствующую конструкцию алгоритмического языка.

Базовые блоки схемы алгоритма:

1.  - Терминатор – обозначает начало и окончание алгоритма.

2.  - Процесс – выполнение какого-либо действия.

3.  - Ввод или вывод данных.

4.  - Ссылка на текущей странице.

5.  - Ссылка на другую страницу.

6.  - Типовой процесс (подпрограмма).

7.  - Условие.

8.  - Подготовка цикла.

Блоки 7 и 8 при организации алгоритмов линейной структуры не используются.

Задание

1. Разработать алгоритм и программу на VBA по варианту.

2. Ввести программу в редактор VBA и добиться её выполнения.

3. Подготовить отчёт.

Содержание отчёта

1. Титульный лист.

2. Индивидуальное задание.

3. Схема алгоритма.

4. Текст программы с комментариями.

5. Ответы на контрольные вопросы.

Контрольные вопросы

1. Что такое и зачем применяются переменные?

2. Что такое тип данных?

3. Почему все переменные лучше заранее описывать?

4. Зачем нужны константы?

5. Приведите тринадцать примеров недопустимых имён (по одному на каждое ограничение).

6. Какие проблемы могут возникнуть, если переменной одного типа присвоить значение другого типа?

7. Зачем нужны комментарии?

8. Что такое операция?

9. По какому признаку операции в VBA делятся на типы?

10. Какие проблемы возникли бы при отсутствии приоритетов операций?

11. Что такое функция и зачем она нужна?

12. Как определить тип аргументов и тип возвращаемого значения функции?

13. Зачем нужны функции, возвращающие строки?

14. Каким образом можно ввести данные в программу в процессе её выполнения?

15. Какие способы вывода данных, используются в VBA?

Пример выполнения работы

Задание:

По высоте и радиусу цилиндра вычислить объём цилиндра, площадь поверхности цилиндра и объём куба, площадь поверхности которого равна площади поверхности цилиндра.

Схема алгоритма:

Текст программы:

Sub Example1() ‘            Начало программы

Dim r As Single ‘          Здесь будет радиус цилиндра

Dim h As Single ‘          Здесь будет высота цилиндра

Dim v1 As Single ‘       Здесь будет объём цилиндра

Dim s1 As Single ‘Здесь будет площадь поверхности цилиндра

Dim a As Single ‘          Здесь будет сторона куба

Dim v2 As Single ‘       Здесь будет объём куба

Const Pi = 3.1415926 ‘ Здесь будет неизменяемое число Пи

r = InputBox("Введите радиус цилиндра") ‘Ввод радиуса и выс-

h = InputBox("Введите высоту цилиндра") ‘оты цилиндра

v1 = Pi * r ^ 2 * h ‘       Вычисление объёма цилиндра

s1 = 2 * Pi * r ^ 2 + 2 * Pi * r * h ‘Расчёт площади поверхности

a = Sqr(s1 / 6) ‘             Вычисление стороны куба

v2 = a ^ 3 ‘                     Вычисление объёма куба

MsgBox ("Объём цилиндра = " + Str(v1) + Chr(13) + _ ‘ Вывод в

    "Площадь поверхности цилиндра = " + Str(s1) + Chr(13) + _

    "Объём куба с такой поверхностью = " + Str(v2)) ‘ 3 строки

End Sub

Индивидуальные задания

1. Ввести два числа и вывести их сумму, разность, произведение и частное.

2. Ввести числа x и y. Вывести x в степени y и корень степени y из x.

3. Ввести два числа. Вывести результат их целочисленного деления и остаток от деления.

4. Вывести пять случайных чисел и их сумму.

5. Вывести случайное число в заданном диапазоне.

6. Ввести строку и вывести заданное число её последних символов, дополнив её пробелами слева до длины введённой строки.

7. Ввести последовательно ФИО и вывести инициалы.

8. Ввести строку. Вывести позицию заданной буквы и окончание строки, начиная с этой буквы.

9. Ввести последовательно три слова и вывести их попарно.

10. По заданной дате рождения определить возраст.

11. Ввести длины сторон треугольника и вывести его периметр, площадь и их отношение.

12. Ввести длины сторон треугольника и вывести радиус описанной окружности.

13. Ввести длины сторон треугольника и вывести радиус вписанной окружности.

14. Ввести длины катетов и вывести длину гипотенузы и углы прямоугольного треугольника.

15. Ввести длины сторон прямоугольника и вывести его периметр, площадь и их отношение.

16. Ввести радиус круга. Найти площадь круга, длину окружности и их отношение.

17. Ввести сторону правильного треугольника и вывести периметр его и эквивалентного по площади квадрата.

18. Ввести длину стороны квадрата. Вывести периметр квадрата, радиус эквивалентного по площади круга и длину окружности.

19. Ввести радиус сферы и вычислить её объём, площадь поверхности и их отношение.

20. Ввести радиус и высоту цилиндра, вычислить его объём, площадь поверхности и их отношение.

21. Ввести радиус и высоту цилиндра и вывести длину ребра и площадь поверхности куба эквивалентного объёма.

22. Ввести радиус и высоту цилиндра и вывести радиус шара эквивалентного объёма.

23. Ввести трёхзначное число и вывести его цифры по одной.

24. Ввести последовательно четыре цифры и преобразовать их в соответствующее целое четырёхзначное число.

25. Ввести вещественную и мнимую часть комплексного числа. Вывести число в тригонометрической форме.

26. Ввести модуль и аргумент комплексного числа и вывести его вещественную и мнимую части.

27. Два комплексных числа задать вещественными и мнимыми частями. Найти сумму и произведение этих чисел.

28. Два комплексных числа задать вещественными и мнимыми частями. Найти разность и частное этих чисел.

29. Комплексное число задать вещественной и мнимой частями. Возвести это число в степень n.

30. Комплексное число задать вещественной и мнимой частями. Вычислить его квадратный корень.


Дата добавления: 2018-05-12; просмотров: 382; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!