Используйте входное значение математического уравнения для вычисления математики в VBA Exccel
Я делаю числовую интеграцию в Excel VBA и хочу получить уравнение от пользователя, а не вставлять его в ячейку.
пример
Пользователь дает мне х ^3+ х ^2+2, который является F(X)
В A1 у меня есть номер 2, и я оцениваю F(X) в B1.
Как сказать в Excel, что уравнение ввода от пользователя =A1^3+A2^2+2. Мне просто нужно это преобразование в одну камеру.
Я использую Val(InputBox())
Спасибо за помощь
4 ответа
Sub variable_input()
Dim userFormula$
Dim myVar&
myVar = 2
userFormula = InputBox("What is the formula?")
Debug.Print userFormula
userFormula = Replace(userFormula, "x", myVar)
Debug.Print userFormula
Dim theAnswer$
theAnswer = Val(userFormula)
Debug.Print theAnswer
End Sub
Если пользователь вводит x или X и вам нужно только заменить X на A1.cell.value, используйте это:
Sub test()
formula_user = InputBox("Please type formula")
Range("B1").Formula = "=" & Replace(LCase(formula_user), "x", "A1")
End Sub
х заменить на А1 в формуле из поля ввода пользователя. Это может быть верхний или нижний регистр в пользовательском вводе
Функция Application Evaluate может разрешить формулу, полученную от пользователя, но вам нужно будет найти способ преобразовать x в ссылку на ячейку, которая может быть правильно понята. Это может потребовать имя листа.
Ваш пример x^3+x^2+2 заменяет два значения x на A1 и A2. Это может быть лучше, чем x^3+y^2+2, чтобы не было двусмысленности между тем, что является A1, и тем, что является A2.
Sub f_of_x_and_y()
Dim fmla As String, str As String
fmla = InputBox("enter formula")
With Worksheets("Sheet2")
str = Replace(Replace(fmla, "x", .Range("A1").Address(external:=True)), _
"y", .Range("A2").Address(external:=True))
.Range("A3") = Application.Evaluate(str)
End With
End Sub
Вы можете заменить все "х" на строку "А1". Не забудьте добавить "=" перед...
Sub TestUserEquation()
Dim strUserEquation As String
strUserEquation = LCase(InputBox("Please enter your equation:", "Equation InputBox"))
If strUserEquation <> "" Then
Cells(1, 2) = "=" & Replace(strUserEquation, "x", "A1")
Else
Cells(1, 2) = "No equation entered."
End If
End Sub