Вычисление значения функции с двумя переменными в функции VBA

#excel #vba #function #variables

#преуспеть #vba #функция #переменные

Вопрос:

У меня есть функция f(x,y) = e^(x y) и функция в VBA, как это:

 Function Test(n As Integer, x0 As Double, xk As Double, y0 As Double, yk As Double) As Double()

Dim i As Integer
Dim j As Integer
Dim Tablica() As Double
ReDim Tablica(0 To n, 0 To n)
For i = 0 To n
    For j = 0 To n
        Tablica(j, i) = Exp(x0   i * (xk - x0) / n   y0   j * (yk - y0) / n)
    Next j
Next i
Test = Tablica

End Function
 

Есть ли какой-нибудь способ переписать этот код для работы с любой функцией, такой как f(x,y) = x y etc.?

Комментарии:

1. Не совсем ясно. Вы спрашиваете, как использовать функцию в качестве входных данных для другой функции?

Ответ №1:

Я интерпретирую ваш вопрос как то , как сделать математическую функцию входным параметром функции test . В VBA нет очень хорошего способа сделать это, но что вы можете сделать, так это определить функцию в модуле code, а затем использовать Application.Run для вызова функции по имени изнутри test .

Доказательство концепции:

 Function test(f As String, n As Integer, x0 As Double, xk As Double, y0 As Double, yk As Double) As Double()
    Dim i As Long, j As Long
    Dim Tablica() As Double
    ReDim Tablica(0 To n, 0 To n)
    
    For i = 0 To n
        For j = 0 To n
            Tablica(j, i) = Application.Run(f, x0   i * (xk - x0) / n, y0   j * (yk - y0) / n)
        Next j
    Next i
    test = Tablica
End Function

'used like:

Function g(x As Double, y As Double) As Double
    g = x - y
End Function

Sub test2()
    Range("A1:D4").Value = test("g", 3, 0, 1, 3, 4)
End Sub
 

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