Можно ли выполнить формулу внутри переменной? - PullRequest
0 голосов
/ 02 октября 2019

Я хочу знать, возможно ли в VBA использовать содержимое переменной в качестве «кода». Например:

x = 23

formula= "43,025*X^-0,452"

Value = ExecuteContentOf(formula)

Я использовал кривую мощности в Excel для вычисления формулы, которая представляет лучшую кривую для 4 различных значений x, y. (1,40) (7, 20) (30,10) (60,6)

В результате получается график с формулой внутри. Excel рассчитывает это автоматически. Используя VBA, я могу извлечь текст формулы из заголовка объекта.

В результате мы получим = 43,025 * C2 ^ -0,452

Теперь я хочу использовать его в VBA, меняя C2 длядругая переменная (не ячейка), поэтому y = 43,025 * x ^ -0,452. Поскольку формула находится в строке. Можно ли сказать VBA интерпретировать ее?

Я ищу ту же функциональность, что и функцию EVAL в Javascript

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Неясно, нужно ли вам извлекать формулу из заголовка объекта во время выполнения или вы можете жестко закодировать ее.

Жесткое кодирование будет тривиальным. Application.Evaluate даст вам очень похожую функциональность с функцией EVAL в Javascript.

x = 23
formula= "43,025*" & x & "^-0,452"
Value = Application.Evaluate(formula)

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

Я оставлю это задание вам. Если вам нужна помощь, пожалуйста, уточните ваши точные требования, и я обновлю свой ответ.

0 голосов
/ 02 октября 2019

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

Sub evaluate()
Dim x As Range
Dim blah As String
Set x = Sheets("Sheet1").Range("A2")
blah = Formulaz(x)
Range("A3").Formula = blah
End Sub

Public Function Formulaz(x As Range)
Formulaz = "=43.025 *" & x.Address & "^-0.452"
End Function

Чтобы изменить это, чтобы взять строку вместо этого, вы можете просто изменить следующим образом:

Dim x As String
Dim blah As String
x = Range("A2").Value
blah = Formulaz(x)
Range("A3").Formula = blah
End Sub

Public Function Formulaz(x As String)
Formulaz = "=43.025 *" & x & "^-0.452"
End Function

Это дает тот же результат (формулавставляется в ячейку, и показывается решение), но оно принимает значение ячейки в качестве аргумента.

Как указано в OP, это не то, что нужно, возможно, это работает лучше:

Sub evaluate()
Dim x As String
Dim blah As String
x = "5"
blah = Formulaz(x)
Debug.print blah
End Sub

Public Function Formulaz(x As String)
Formulaz = 43.025 * x ^ -0.452
End Function

Возвращает значение выражения с x, переданным в качестве аргумента. Выход для x = 5 будет 20,78674, сохраненным в Blah как строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...