1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Function CalculateWithText(ParamArray args() As Variant) Dim objFormula As String Dim result As String Dim current As String Dim eachRange As Range For Each Rng In args For Each eachRange In Rng If result <> "" Then result = result + "+" End If result = result + CStr(CalculateText(eachRange.Value)) 'result = result + CalculateText(eachRange.Value) Next result = CStr(Evaluate(result)) Next Debug.Print result CalculateWithText = Evaluate(result) End Function
Function CalculateText(objFormula As String) Dim current As String Dim validSymbol As String validSymbol = "+,-,*,/,." 'Ìæ»»»»Ðзû¡¢¿Õ¸ñµÈ objFormula = Replace(objFormula, vbNewLine, "+") objFormula = Replace(objFormula, vbCr, "+") objFormula = Replace(objFormula, vbLf, "+") objFormula = Replace(objFormula, vbCrLf, "+") objFormula = Replace(objFormula, " ", "+") For n = 1 To Len(objFormula) current = Mid(objFormula, n, 1) If IsNumeric(current) Or IsInArray(current, Split(validSymbol, ",")) Then result = result + current End If Next n CalculateText = Evaluate(result) End Function
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function
|