
- •Лекция 7. Процедуры и функции в vba
- •Процедуры, функции и макросы
- •Вставка процедур и функций
- •Процедуры
- •Определение процедуры
- •Вызов процедуры
- •Обработчики событий
- •Функции
- •Определение функции
- •Вызов функции
- •Функции, возвращающие массивы
- •Параметры
- •Необязательные параметры
- •Передача параметров по значению и по ссылке
Функции, возвращающие массивы
В качестве результата функция VBA может возвращать массив значений. Такая функция вставляется не в одну ячейку, а в диапазон, и вставка завершается нажатием клавиш Ctrl + Shift + Ввод.
Public Function GreaterThanAverage(m As Range) As Variant
Dim r() As Integer
Dim n As Integer, i As Integer, j As Integer
Dim av As Double
ReDim r(1 To m.Rows.Count, 1 To 1)
av = 0
For i = 1 To m.Rows.Count
For j = 1 To m.Columns.Count
av = av + m.Cells(i, j)
Next j
Next i
av = av / m.Rows.Count / m.Columns.Count
For i = 1 To m.Rows.Count
n = 0
For j = 1 To m.Columns.Count
If m.Cells(i, j) > av Then n = n + 1
Next j
r(i, 1) = n
Next i
GreaterThanAverage=r
EndFunction
Обратите внимание, что одномерный массив соответствует строке, поэтому в данном случае не может быть использован. Одномерный массив, который надо расположить в виде столбца, должен быть объявлен как двумерный массив с одним столбцом.
Параметры
Существуют две точки, где используется список параметров подпрограммы – заголовок процедуры или функции и вызов процедуры или функции. Параметры, записанные в заголовке, называются формальными, а параметры, записанные в вызове, –фактическими.
Между этими двумя списками существует разница, во-первых, в синтаксисе, а во-вторых, что более важно, в семантике. Список формальных параметров – это список неких условныхпеременных. Он описывает данные, которые должны быть переданы в подпрограмму, в общем виде. Например, в функциюAverageнеобходимо передавать диапазон и число.
Список фактических параметров – это список вполне конкретных значений, которые реально передаются в подпрограмму и которые она обрабатывает. Мы рассматривали примеры вызова функции Average, в которых в функцию передавались конкретные диапазоны (A1:D5,B2:F7) и конкретные числа (10, число из ячейкиE14). Формальные параметры – это, в общем-то, абстракция. Фактические параметры должны реально существовать, т.е. это должны быть конкретные диапазоны, константы, числа, содержащиеся в конкретной ячейке. Можно провести аналогию с математическим выражением, записанным в общем виде с использованием переменных, например,x2 + y2. Можно построить график функции, исследовать свойства этого выражения, оперировать с ним в общем виде, но нельзя вычислить значение этого выражения, пока мы не подставим конкретные числа вместо переменныхxиy. Формальные параметры соответствуют переменным математического выражения, а фактические параметры – конкретным числам.
Список формальных параметров определяется количество, порядок и типы параметров, которые должны быть переданы в подпрограмму при вызове.
Список фактических параметров представляет собой список выражений, разделённых запятыми. Значения этих выражений подставляются вместо формальных параметров последовательно, т.е. значение первого фактического параметра – вместо первого формального параметра, значение второго фактического параметра – вместо второго формального параметра и т.д.
Список фактических параметров должен соответствовать списку формальных параметров по следующим критериям.
По количеству.
По типу.
По порядку следования.