Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Инф_11-12.docx
Скачиваний:
14
Добавлен:
25.12.2018
Размер:
6.65 Mб
Скачать

Обращение к функции

Описание функции задает формальную схему обработки информации, в то время как оператор вызова функции осуществляет настройку этой формальной схемы на конкретную обработку фактических данных.

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

Пример: Пусть дана функция F(x)=x2+2. Необходимо вычислить таблицу значений y=F(z+2)+F(z)+3 для z=0(1)5

В разделе General:

Function F (ByVal x As Integer) As Integer

F=x^2+2

End Function

Для командной кнопки «Таблица значений»:

Private Sub CommandButton1_Click()

Dim y As Integer, z As Integer

for z=0 To 5

y=F(z+2)+F(z)+3

MsgBox ("Значение y=" & Format(y, "##.####"))

Next z

End Sub

Пример. Вычислить m!+n!

Function f(a As Integer)

f = 1

For i = 1 To a

f = f * i

Next

End Function

Private Sub CommandButton1_Click()

Dim m As Integer, n As Integer

m = Val(InputBox("Введите m"))

n = Val(InputBox("Введите n"))

s = f(m) + f(n)

MsgBox (s)

End Sub

Пользовательская функция листа

Пользовательская функция листа – это функция, которая используются в формулах ячеек рабочего листа так же, как встроенные функции Excel.

Для того чтобы использовать эту функцию, ее нужно вызвать, поместив ее имя со списком фактических параметров в формулу на рабочем листе. В этом случае она будет называться пользовательской функцией листа.

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

Для создания нового модульного листа необходимо:

  • вызвать редактор VBA (Alt+F11);

  • выполнить команду Insert/Module

Например, для функции F:

Function F(X As Single,Y As Single) As Single

Dim Z As Single

Z=X^2+Y^2

F=Sqr(Z)

End Function

A43

B44

C4 =F(A4;B4) 5

На Рабочем листе:

После записи функции в модульном листе в списке «Категории функций» в окне Мастера функций появится раздел «Определенные пользователем». Внутри этого раздела появится функция с именем F.

Пример: Решить квадратное уравнение:

Для его решения создадим следующие функции:

Вычисления дискриминанта

Function Fdisc(a As Single, b As Single, c As Single) As Single

Fdisc = b ^ 2 - 4 * a * c

End Function

Вычисления первого (положительного) корня:

Function Fplus(a As Single, b As Single, c As Single) As Variant

Dim D As Single

D = b ^ 2 - 4 * a * c

If D >= 0 Then

Fplus = (-b + Sqr(D)) / (2 * a)

Else

Fplus = "D<0!"

End If

End Function

Вычисления второго (отрицательного) корня:

Function Fminus(a As Single, b As Single, c As Single) As Variant

Dim D As Single

D = b ^ 2 - 4 * a * c

If D >= 0 Then

Fminus = (-b - Sqr(D)) / (2 * a)

Else

Fminus = "D<0!"

End If

End Function

Пример: Для d=5 и y=1(0,5)3 вычислить , где

в разделе General:

Function f(x As Single)

Dim d As Single

d = 5.2

f = Sqr(x ^ 3 + x ^ 2 + x + d)

End Function

Для кнопки «Вычислить»:

Dim b As Single, y As Single

i = 22

y1 = Worksheets("Функции ").Range("c23")

yk = Worksheets("Функции ").Range("c25")

dy = Worksheets("Функции ").Range("c27")

For y = y1 To yk Step dy

b = f(y) + Sin(f(2)) - f(Abs(2 * y))

Worksheets("Функции ").Cells(i, 7) = b

i = i + 1

Next y

End Sub

В редакторе VBA добавляем модульный лист:

InsertModule

Копируем в него функцию пользователя:

Function f(x As Single)

Dim d As Single

d = 5.2

f = Sqr(x ^ 3 + x ^ 2 + x + d)

End Function

В ячейку H22 вводим формулу:

=f(F22)+SIN(f(2))-f(ABS(2*F22))

И копируем ее во все остальные ячейки данного столбца.

Решим эту же задачу, только с другими исходными данными:

Пример: Для d=5 и y={1,5;8,2;-2,5;3;7} вычислить , где

Для кнопки «Вычислить»:

Dim b As Single, y As Single

For i = 22 To 26

i = Worksheets("Функции "). Cells(i, 6)

b = f(y) + Sin(f(2)) - f(Abs(2 * y))

Worksheets("Функции ").Cells(i, 7) = b

Next i

End Sub