如:a+b(c+d*f)+e-g= 计算结果(包括四则运算)----我用来对EXCEL表格的列进行计算(也就是公式)如仅实现普通数字的运算,我也会结帖给分 ,谢谢 !:》 
reallirui:
QQ:975744288
msn:[email protected]

解决方案 »

  1.   


    Option Explicit Private Function Eval(ByVal s As String) As Variant 
            Dim Lb As Long, Rb As Long 
            Lb = InStrRev(s, "(") 
            While Lb <> 0 
                    Rb = InStr(Lb, s, ")") 
                    s = Replace(s, Mid$(s, Lb, Rb - Lb + 1), CStr(Eval(Mid$(s, Lb + 1, Rb - Lb - 1)))) 
                    Lb = InStrRev(s, "(") 
            Wend 
            If IsNumeric(s) Then 
                    Eval = Val(s) 
            Else 
                    Dim High As Long 
                    High = InStr(s, "+") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) + Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "-") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) - Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStr(s, "*") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) * Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "/") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) / Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "%") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) Mod Eval(Right$(s, Len(s) - High)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "!=") 
                    If High <> 0 Then 
                            Eval = Eval(Left$(s, High - 1)) <> Eval(Right$(s, Len(s) - High - 1)) 
                            Exit Function 
                    End If 
                    High = InStrRev(s, "==") 
                    If High <> 0 Then 
                            Eval = (Eval(Left$(s, High - 1)) = Eval(Right$(s, Len(s) - High - 1))) 
                            Exit Function 
                    End If 
            End If 
    End Function '主函数 
    Public Sub main() 
            Dim Expression As String 
            Expression = "149.5+((100+(6+(90-5*2*2)*4+(1-1))+202)%441)*2*2+0.88+150.5" 
            MsgBox Eval(Expression) 
    End Sub 
      

  2.   

    还有一种方式:引用 MS Script Control 1.0 Dim Evals As New ScriptControl 
    Evals.Language = "VBScript" 
    MsgBox Evals.Eval("1+2*(3+1)") 
      

  3.   

    更正一下:例如用户输入:a+b+(c+d*f)+e-g 。说明:其中字母是EXCEL的列号<也可以是数字,如:a+3+b/2+(c+d*f)+e-g*2> ,我要实现的功能就是让用户输入计算公式,代码按照用户输入的计算公式对相应列进行计算。
      

  4.   

     fvflove大哥 是不是老师呀 放假了 ~~