Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_5_Функции.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
449 Кб
Скачать
☆

Форматирование Значений данных. Функция 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 Date

Dim MyTime As Date

Dim MyVar As Single

MyDate = #3/6/2016# ' Задание даты 06.03.16

MyTime = #4:07:45 PM# ' Задание момента времени 16:07:45

MyVar = 1372.547

MsgBox 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 и проанализируйте результат выполнения.

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

Функция, определённая пользователем, называемая также процедурой-функцией, – это особый вид процедуры VBA, возвращающей результат. Пользовательские процедуры-функции, как и встроенные функции VBA, могут иметь необязательные и именованные аргументы. Для записи процедуры-функции нельзя использовать макрорекордер, хотя можно редактировать записанный рекордером макрос и превращать его в процедуру-функцию.

Формат процедуры-функции:

Function Name([Arglist]) [As Type]

‘ VBA Statements

[Name = expression]

End Function

Function – ключевое слово, объявляющее начало функции.

Name – имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.

Arglist – список аргументов данной функции, необязательный элемент.

Type – любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип Variant.

Name = expression – присваивание функции выражения, значение которого возвращает функция, необязательный элемент. Тем не менее, всегда следует включать оператор присваивания в функции-процедуры.

End Function – ключевые слова, заканчивающие функцию.

Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.

Основное различие между процедурой-функцией и другими процедурами, помимо того, что функции возвращают значение, а процедуры - нет, состоит в том, что в процедуре-функции используются ключевые слова Function и End Function.

Обычно функция предназначается для выполнения вычисления и для возвращения результата. При объявлении функции-процедуры указывается имя каждого аргумента, передаваемого функции. Имена аргументов в списке Arglist отделяются друг от друга запятой и должны следовать правилам, применяемым к любому идентификатору VBA.

Ниже приведён пример, в котором используется пользовательская функция, вычисляющая сумму комиссионных. Суть задачи состоит в следующем. В таблице Excel, приведённой ниже, требуется подсчитать суммы комиссионных и оплаты.

Суммы комиссионных подсчитываются в процедуре-функции Комиссионные, обращение к которой осуществляется в процедуре Расчёт_Комиссионных, при помощи инструкции

Cells(i, 3) = Комиссионные(Cells(i, 2)),

параметром которой, является сумма продаж, находящаяся в ячейках Excel B3÷B6 (Cells(3, 2) – это ячейка B3 и т.д.).

Подсчёт оплаты выполняется при помощи инструкции

Cells(i, 4) = Cells(i, 2) + Cells(i, 3)

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

Sub Расчёт_Комиссионных()

Sheets("Лист1").Select

Dim i As Integer

i = 3

Do While Cells(i, 1) <> ""

Cells(i, 3) = Комиссионные(Cells(i, 2))

Cells(i, 4) = Cells(i, 2) + Cells(i, 3) ‘ Оплата

i = i + 1

Loop

End Sub

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

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