У меня есть функция 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
и т. д.?
Я интерпретирую ваш вопрос как сделать математическую функцию входным параметром для функции test
. В VBA нет очень хорошего способа сделать это, но вы можете определить функцию в модуле кода, а затем использовать 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 (или написать собственный синтаксический анализатор).
Не совсем понятно. Вы спрашиваете, как использовать функцию в качестве входных данных для другой функции?