VB - Оценить математическое выражение строки

вступление

В VBA функция Evaluate принимает в качестве аргумента формулу, изложенную в буквенно-цифровой переменной, и возвращает результат в буквенно-цифровой переменной.

В VB эта функция отсутствует, и вы должны реализовать ее самостоятельно.

Эта демонстрация поддерживает простые вычисления +, -, * и / и круглые скобки.

Демонстрация работает так же, как и функция Evaluate.

Этот саб используется только для тестирования ..

 Sub TestCalcul () Dim A As String Dim Ret As String A = "(((3 * (12, 223+ 15)) - 7) * 21) / 7" Ret = Оценщик (A) 'Debug.Print Ret' = 224, 007 A = "((123.32 / 2.67) * 6) +2127.34" Ret = Оценщик (A) '= 2404.46359550562' Debug.Print Ret End Sub 

Код

 Функция Evaluer (ByVal Txt As String) как строка Dim i As Integer, oNB как Integer, fNB как Integer Dim P1 как Integer, P2 как Integer Dim Buff Как строка Dim T As String la virgule Txt = Replace (Txt, ", ", ".") 'Voir s'il ya des (For i = 1 To Len (Txt) Если Mid (Txt, i, 1) = "(" Тогда oNB = oNB + 1 Next i 'S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Если oNB> 0, то для i = 1 до Len (Txt), если Mid (Txt, i, 1) = ")" Тогда fNB = fNB + 1 Далее i Иначе 'Pas de parenthèse, Evalue Directement le calcul Evaluer = EvalueExpression (Txt) Выход Функция End End If Если oNB fNB Тогда' Les круглые скобки ne sont pas concordantes, сообщение о сообщении errur круглые скобки Выход Функция End Если в то время как oNB> 0 'recherche la dernière parenthèse ouvrante P1 = InStrRev (Txt, "(")' Recherche la mathèse fermante de l'expression P2 = InStr (Mid (Txt, P1 + 1), ")") 'Evalue l 'выражение должно быть в скобках' Buff = EvalueExpression (Mid (Txt, P1 + 1, P2 - 1)) Выражение «remplacer l'expar par le résultat et supprimer les круглые скобки» Txt = Left (Txt, P1 - 1) и Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend, плюс скобка, оценочное выражение Evaluer = EvalueExpression (Txt) Конечная функция Функция EvalueExpression (A в виде строки) в виде строки Dim T в виде целого числа, S в виде целого числа Dim B в виде строки, i в виде целого числа, C в виде логического значения Dim c1 в виде двойного числа, c2 в виде двойного числа, знак в виде целого числа Dim R как строка, фин как булево, z как целочисленный enlesver les espace A = Заменить (A, "", ""), в то время как не фин для i = 1 в Len (A) T = Asc (Mid (A, i, 1) )) Если T <48 и T 46 или i = Len (A), то если C, то '' значение, если i = Len (A), тогда c2 = Val (Mid (A, S)), остальное c2 = Val (Mid (A, S, i - S)) End If R = Str (CalculSimple (c1, c2, Signe)) Если i = Len (A), тогда Fin = True Остальное A = Trim (R & Mid (A, i)) C = False End If Exit For Else 'sépare le 1er chiffre c1 = Val (Left (A, i - 1)) Signe = TS = i + 1 C = True Конец If End Next, если я Wend' remplacer l'expression par le résultat EvalueExpression = Trim (R) End функция 

Вы можете добавить различные типы расчетов в функцию ниже:

 Функция CalculSimple (n1 как двойной, n2 как двойной, signe как целое) в качестве двойного Выберите регистр Signe Case 43 '+ CalculSimple = n1 + n2 Case 45' - CalculSimple = n1 - n2 Case 42 '* CalculSimple = n1 * n2 Case 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre calcul ... End Select End Function 
  • Примечание: для того, чтобы он полностью соответствовал калькулятору, вы должны сначала оценить * adn / function, а затем только + и -.
  • Пример 3 + 5 * 7
  • Калькулятор обрабатывает его следующим образом 5 * 7 = 35 + 3 = 38
  • Но с этой функцией: 3 + 5 = 8 * 7 = 56
  • Вы можете изменить «EvalueExpression» или ввести расчет как 3+ (5 * 7)

Предыдущая статья Следующая статья

Лучшие советы