Используйте входное значение математического уравнения для вычисления математики в 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
Другие вопросы по тегам