2016-02-28 3 views
2

Я делаю численное интегрирование в Excel VBA, и я хочу получить уравнение от пользователя, а не вставлять его в ячейку.Использовать математическое уравнение для ввода математического расчета в VBA Exccel

Пример

Пользователь дает мне х^3 + х^2 + 2, что F (X)

В А1, у меня есть номер 2, и я оценку F (X) в B1.

Как сказать, что уравнение, введенное пользователем, равно A1 = 3 + A2^2 + 2. Мне просто нужно преобразование в одну ячейку.

Я использую Val (InputBox())

Спасибо за помощь

+0

Какой у вас код? Пожалуйста, разместите его так: а) мы не изобретаем велосипед, если у вас уже есть код, b) показывает нам, что вы пробовали, и c) может найти любые возможные ошибки. Я не вижу, как это должно быть слишком сложно, поскольку вы находитесь в VBA, просто подключите переменную к формуле, которую дает пользователь, нет? – BruceWayne

+3

Почему бы вам просто не сделать то, что каждый учитель математики говорит нам в школе, и заменить «x» на номер в «A1». Что-то вроде 'Replace (« x^3 + x^2 + 2 »,« x », Range (« A1 »). Значение). – Ralph

+2

Ничего похожего на вопрос о математических уравнениях в VBA в воскресенье утром, чтобы заставить всех людей разразиться! – BruceWayne

ответ

1

Функция Application Evaluate может решить формулу, полученные от пользователя, но вы должны найти то образом преобразовать х в ссылка на ячейку, которая может быть правильно понята. Для этого может потребоваться имя рабочего листа.

Ваш х^3 + х^2 + 2 пример заменяет два х значения с A1 и A2. Это может быть лучше, чем x^3 + y^2 + 2, так что между А1 и А2 нет никакой двусмысленности.

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 
+0

Что произойдет, если пользователь пишет exp (x) + 2 * x – Maxwell

1

Если пользователь вводит х или Х, и вам нужно только заменить X с A1.cell.value затем использовать это:

Sub test() 
formula_user = InputBox("Please type formula") 
Range("B1").Formula = "=" & Replace(LCase(formula_user), "x", "A1") 
End Sub 

х заменить А1 в формуле от пользователя InputBox , Это может быть верхний или нижний регистр в пользовательском вводе

+0

СПАСИБО МНОГО! Это помогло закончить проект «Количественные методы» jeje. Время, чтобы сделать руководство пользователя ajjaja – Maxwell

+0

Если пользователь пишет exp (x) + 2 * x, он приводит к eA1p (A1) + 2 * A1. – Maxwell

+0

Я нашел его, я расскажу пользователю/учителю, что в случае использования экспоненциальных формул напишите формулу как EXP (x) + 2 * x. В этом случае я удалил LCase, поэтому код отличает X и x – Maxwell

1
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 
+1

Спасибо! На самом деле это поможет пользователю увидеть формулу, которую он написал – Maxwell

1

Вы можете заменить все «x» на строку «A1». Не забудьте добавить «=» спереди ...

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 
+1

Спасибо Porcupine911 – Maxwell