VB - Vyhodnoťte matematické vyjadrenie reťazca

intro

V VBA funkcia Vyhodnotiť berie ako argument vzorec uvedený v alfanumerickej premennej a výsledok vracia v alfanumerickej premennej.

V VB chýba táto funkcia a musíte ju sami implementovať.

Toto demo podporuje jednoduché výpočty +, -, * a / a zátvorky.

Demo funguje rovnako ako funkcia Vyhodnotiť.

Táto podložka sa používa len na testovanie.

 Sub TestCalcul () Dim A ako reťazec Dim Ret ako reťazec A = "((((3 * (12.223+ 15)) - 7) * 21) / 7" Ret = Hodnotiteľ (A) 'Debug.Print Ret' = 224.007 A = "((123, 32 / 2, 67) * 6) +2127, 34" Ret = hodnotiteľ (A) "= 2404, 46359550562 'Debug.Print Ret End Sub 

Kód

 Funkcia Vyhodnotenie (ByVal Txt As String) Ako String Dim i Integer, oNB Ako Integer, fNB ako celé číslo Dim P1 ako celé číslo, P2 ako celé číslo Dim Buff As String Dim T As String 'Pour les calculs y faut un point à la place de la virgule Txt = Nahradiť (Txt, ", ", ".") 'Voir s'il ya des (Pre i = 1 To Len (Txt) Ak Mid (Txt, i, 1) = "(" Potom oNB = oNB + 1 Ďalej i 'S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Ak oNB> 0 Potom Pre i = 1 To Len (Txt) Ak Mid (Txt, i, 1) = ")" Potom fNB = fNB + 1 Nasledujúci i Else 'Pas de parenthèse, Evalue directement le calcul Evaluer = EvalueExpression (Txt) Koniec Funkcia Koniec If Ak je oNB fNB Potom' Les parenthèses ne sont pas concordantes, mettre message erreur parenthèse Koniec Funkcia End Ak Kým oNB> 0 'recherche la dernière parenthèse ouvrante P1 = InStrRev (Txt, "(")' Recherche la parenthèse fermante de l'expression P2 = InStr (Mid (Txt, P1 + 1), ")") 'Evalue l 'výraz que est entre parenthèses Buff = EvalueExpression (Stred (Txt, P1 + 1, P2 - 1)) 'Remplacer l'expression par le résultat et supprimer les parentèèses Txt = Ľavý (Txt, P1 - 1) & Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend' plus de parenthèse, évaluer la dernière expression Evaluer = EvalueExpression (Txt) Koniec Funkcia Funkcia EvalueExpression (A ako reťazec) Ako reťazec Dim T ako celé číslo, S ako celé číslo Dim B ako reťazec, ako ako celé číslo, C ako logický Dim c1 ako dvojitý, c2 ako dvojitý, Signe ako celé číslo Dim R As String, Fin As Boolean, z Ako Integer 'enlever les espace A = Nahradiť (A, "", "") Kým nie Fin Pre i = 1 To Len (A) T = Asc (Stred (A, i, 1) )) Ak T <48 A T 46 Alebo i = Len (A) Potom Ak C Potom 'évalue Ak i = Len (A) Potom c2 = Val (Stred (A, S)) Else c2 = Val (Stred (A, S, i - S)) Koniec Ak R = Str (CalculSimple (c1, c2, Signe)) Ak i = Len (A) Potom Fin = True Else A = Trim (R & Mid (A, i)) C = False Koniec Ak Koniec Pre Else 'sépare le 1er chiffre c1 = Val (Vľavo (A, i - 1)) Signe = TS = i + 1 C = Skutočný Koniec Ak Koniec Ak Ďalej i Wend' remplacer l'expression par le résultat EvalueExpression = Trim (R) Koniec funkcie 

Do nižšie uvedenej funkcie môžete pridať rôzne typy výpočtov:

 Funkcia CalculSimple (n1 ako dvojitý, n2 ako dvojitý, Signe ako celé číslo) Ako prípad dvojitého výberu Signe Case 43 '+ CalculSimple = n1 + n2 Prípad 45' - CalculSimple = n1 - n2 Prípad 42 '* CalculSimple = n1 * n2 Prípad 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre calcul ... End Select End Function 
  • Poznámka: Aby bola úplne konzistentná s kalkulačkou, musíte najprv vyhodnotiť * adn / function a len potom tie + a -.
  • Príklad 3 + 5 * 7
  • Kalkulačka ho spracuje takto 5 * 7 = 35 + 3 = 38
  • Ale s touto funkciou: 3 + 5 = 8 * 7 = 56
  • "EvalueExpression" môžete upraviť alebo zadať výpočet ako 3+ (5 * 7)

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy