#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 (или написать свой собственный синтаксический анализатор).