- •Лабораторная работа №4 Основы программирования на языке vba
- •4.1 Основные этапы работы с программами на vba в Excel
- •4.2 Простейший пример программы на языке vba
- •4.3 Типы данных. Объявление переменных и констант
- •4.3.1 Типы данных
- •4.3.2 Объявление переменных
- •4.3.3 Объявление констант
- •4.3.4 Область видимости переменных
- •4.4 Оператор If
- •4.5Безусловный переход. Оператор GoTo
- •4.6Цикл до. Оператор For
- •4.7 Массивы
- •4.8 Цикл пока. Оператор DoWhile
- •4.8 Подпрограммы
- •4.9 Функции
- •4.10 Область видимости процедур
- •4.11 Варианты заданий
- •Лабораторная работа №5 операции с ячейками и рабочими листами ms excel в программах на vba
- •5.1 Основные способы ссылок на ячейки рабочего листа Excel
- •5.2 Примеры обработки данных в ячейках рабочего листа msExcel
- •5.3 Примеры операций с рабочими листами ms Excel
- •5.4 Варианты заданий
- •Лабораторная работа №6 элементы управления в программах на vba
- •6.1 Размещение элементов управления на рабочем листе Excel
- •6.2 Пример использования элементов управления: кнопки, переключатели, счетчики, флажки, текстовые поля
- •6.3 Пример использования элементов управления: списки
- •6.4 Варианты заданий
- •Лабораторная работа №7 пользовательские формы в программах на vba
- •7.1 Создание пользовательской формы в Excel
- •7.2 Кнопки, текстовые поля, списки
- •7.3 Флажки, счетчики
- •7.4 Список из нескольких колонок
- •7.5 Список с возможностью выбора нескольких элементов
- •7.6 Составление списка в программе
- •7.7 Поля выбора ячеек
- •7.8 Варианты заданий
- •Лабораторная работа №8 программЫ на vba для работы с текстовыми данными
- •8.1 Подготовка среды vba для работы с файлами
- •8.2 Ввод данных из файла
- •8.3 Вывод данных в файл
- •8.4 Обмен данными между двумя файлами
- •8.5 Функции обработки строк
- •8.6 Варианты заданий
- •Литература
- •Содержание
4.9 Функции
Функция, как и подпрограмма – это отдельная процедура, вызываемая из другой процедуры. Отличие функции от подпрограммы состоит в том, что в результате выполнения функции определяется значение одной переменной, в то время как подпрограмма может определять значения нескольких переменных. Имя переменной, определяемой в результате выполнения функции, должно совпадать с именем самой функции.
Функция, как и подпрограмма, имеет параметры, т.е. величины, передаваемые в функцию из вызывающей процедуры. Этими величинами могут быть как переменные, так и константы. Если параметрами являются переменные, то они могут изменяться при выполнении функции, но такие изменения, как правило, нежелательны, так как усложняют понимание программы.
Следует обратить внимание, что способы вызова подпрограммы и функции существенно различаются. Подпрограмма вызывается с помощью специального оператора Call. Функция обычно вызывается в правой части оператора присваивания.
Пример 4.20 – Требуется разработать функцию для вычисления среднего значения заданного столбца в двумерном массиве.
Private m As Byte
Sub primer4_20()
Dim a() As Single, n As Byte, k As Byte
‘a – двумерный массив из m строк и n столбцов
… ‘Объявление и ввод массива (см. примеры, рассмотренные выше).
k = InputBox("Введите номер столбца, для которого требуется вычислить среднее ")
s = sred_stolb(a, k)
MsgBox ("Среднее по " & k & “-му столбцу равно ” & s)
End Sub
Function sred_stolb(massiv, nomer)
sum = 0
For i = 1 To m
sum = sum + massiv(i, nomer)
Next i
sred_stolb = sum / m
End Function
Здесь sred_stolb – функция. Она вызывается в операторе присваивания s = sred_stolb(a, k). Таким образом, переменные a и k (т.е. массив и номер столбца, по которому требуется вычислить среднее) являются входными параметрами функции sred_stolb. В самой функции sred_stolb значения этих переменных присваиваются переменным massiv и nomer соответственно (можно было использовать и любые другие имена переменных). Функция вычисляет среднее по столбцу с номером nomer. Результат присваивается переменной sred_stolb. Следует обратить внимание, что имя этой переменной обязательно должно совпадать с именем самой функции. По окончании выполнения функции sred_stolb происходит возврат в основную программу: выполняется оператор, где была вызвана функция, т.е. оператор s = sred_stolb(a, k). Таким образом, значение функции sred_stolb присваивается переменной s. Затем эта переменная выводится на экран оператором MsgBox.
Примечание – В данном примере, как и в примере 4.19, переменная m объявлена как переменная уровня модуля, чтобы ее можно было использовать во всем модуле (т.е. и в подпрограмме primer4_20, и в функции sred_stolb). Вместо такого объявления можно было передать эту переменную в функцию sred_stolb в качестве одного из параметров.
Пример 4.21 – Требуется разработать программу для решения следующей задачи: найти в двумерном массиве столбец с максимальным средним значением и поменять его местами с первым столбцом.
Для решения этой задачи средние значения по столбцам массива будут вычисляться с использованием функции, разработанной в примере 4.20. Столбец с максимальным средним значением будет определяться в основной программе. Чтобы поменять местами первый столбец массива и столбец с максимальным средним значением, воспользуемся процедурой, разработанной в примере 4.19.
Private m As Byte
Sub primer4_21()
Dim a() As Single, n As Byte
‘a – двумерный массив из m строк и n столбцов
… ‘Объявление и ввод массива.
max_sred = -10000
For j=1 To n
s = sred_stolb(a, j)
If s > max_sred Then
jmax = j
max_sred = s
End If
Next j
call obmen_stolbcov(a, 1, jmax)
MsgBox(“Измененный массив”)
For i = 1 To m
For j = 1 To n
MsgBox("a(" & i & "," & j & ") = " & a(i,j)) ‘Вывод измененного массива на экран
Next j
Next i
End Sub
Function sred_stolb(massiv, j)
… ‘См. пример 20.
End Function
Sub obmen_stolbcov(massiv, k1, k2)
… ‘См. пример 19.
End Sub
Здесь переменной max_sred сначала присваивается очень большое отрицательное число. Затем в этой переменной сохраняется максимальное из вычисленных средних значений по столбцам. С этой целью перебираются все столбцы, по каждому столбцу вычисляется среднее (с помощью функции sred_stolb), и оно сравнивается с текущим значением переменной max_sred. Если выполняется условие s > max_sred (т.е. найденное среднее превышает текущее значение переменной max_sred), то значение среднего сохраняется в переменной max_sred, а номер столбца, где найдено это среднее – в переменной jmax. В результате в переменной jmax сохраняется номер столбца с максимальным средним. В подпрограмме obmen_stolbcov столбцы с номерами 1 и jmax меняются местами.