VB - Evaluer et matematisk uttrykk for en streng

Intro

I VBA tar evalueringsfunksjonen som argument en formel angitt i en alfanumerisk variabel og returnerer resultatet i en alfanumerisk variabel.

I VB mangler denne funksjonen, og du må implementere den selv.

Denne demoen støtter enkle beregninger +, -, *, og / og parenteser.

Demoen fungerer på samme måte som evalueringsfunksjonen.

Denne delen brukes kun til testing ..

 Sub TestCalcul () Dim A Som String Dim Ret As String A = "(((3, 2 (12, 223 + 15)) - 7) * 21) / 7" Ret = Evaluer (A) 'Debug.Print Ret' = 224.007 A = "(123.32 / 2.67) * 6) +2127.34" Ret = Evaluer (A) '= 2404.46359550562' Debug.Print Ret End Sub 

Koden

 Funksjon Evaluer (ByVal Txt As String) Som String Dim I Som Integer, ONB Som Integer, FNB Som Integer Dim P1 Som Heltal, P2 Som Integer Dim Buff Som String Dim T Som String 'Pour les kalkulerer y faut un point à la place de la virgule Txt = Erstatt (Txt, ", ", ".") Voir s'il ya des (For i = 1 Til Len (Txt) Hvis Midt (Txt, I, 1) = "(" Deretter oNB = oNB + 1 Neste Jeg er Siv (eller eldre), hvis jeg er sertifisert) (fermantes) Hvis oNB> 0 Så For I = 1 Til Len (Txt) Hvis Mid (Txt, I, 1) = ")" FNB = FNB + 1 Neste jeg Else 'Pas de parenthèse, Evalue directement le kalkulator Evaluer = EvalueExpression (Txt) Avslutt Funksjon End Hvis Hvis oNB fNB Deretter Les parenthèses ne sont pas concordantes, måre melding erreur parenthèse Exit Function End Hvis du er i 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 'uttrykksformål parenteser Buff = EvalueExpression (Mid (Txt, P1 + 1, P2 - 1)) 'Remplacer l'expression par le résultat et supprimer les parenthèses Txt = Venstre (Txt, P1 - 1) & Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend' pluss parenthèse, evaluer la dernière uttrykk Evaluer = EvalueExpression (Txt) End Funksjon Funksjon EvalueExpression (A As String) Som String Dim T Som Integer, S Som Integer Dim B Som String, Jeg Som Integer, C Som Boolean Dim c1 Som Dobbel, C2 Som Dobbel, Signe Som Integer Dim R som streng, Fin som boolsk, z Som helhet 'enlever les espace A = Erstatt (A, "", "") Mens ikke fin For I = 1 Til Len (A) T = Asc (Mid (A, I, 1 )) Hvis T <48 og T 46 eller i = Len (A) Så hvis C deretter 'évalue Hvis jeg = Len (A) Så c2 = Val (Mid (A, S)) Ellen c2 = Val S, i - S)) Slutt Hvis R = Str (CalculSimple (c1, c2, Signe)) Hvis jeg = Len (A) Så Fin = Sann Else A = Trim (R & Mid (A, I)) C = False Endre Hvis Avslutt For Else 'sépare le 1er chiffre c1 = Val (Venstre (A, i - 1)) Signe = TS = i + 1 C = True End Hvis End Hvis Neste Jeg Vend' remplacer l'expression par le résultat EvalueExpression = Trim (R) End funksjon 

Du kan legge til forskjellige typer beregninger i underfunksjonen:

 Funksjon CalculSimple (n1 Som Dobbel, N2 Som Dobbel, Signe Som Integer) Som Dobbel Velg Veske Signe Veske 43 '+ CalculSimple = n1 + n2 Veske 45' - CalculSimple = n1 - n2 Veske 42 '* CalculSimple = n1 * n2 Veske 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre kalkulator ... End Velg End Function 
  • Merk: For at den skal være helt konsistent med en kalkulator, må du først evaluere * adn / funksjonen og bare da + og - de.
  • Eksempel 3 + 5 * 7
  • En kalkulator behandler det som følger 5 * 7 = 35 + 3 = 38
  • Men med denne funksjonen: 3 + 5 = 8 * 7 = 56
  • Du kan endre "EvalueExpression" eller angi beregningen som 3+ (5 * 7)

Forrige Artikkel Neste Artikkel

Beste Tips