Вычисление значения функции с двумя переменными в функции 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 и т. д.?

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

John Coleman 10.12.2020 13:52
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я интерпретирую ваш вопрос как сделать математическую функцию входным параметром для функции 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 (или написать собственный синтаксический анализатор).

Другие вопросы по теме