How to turn a string formula into a “real” formula

前端 未结 8 894
情深已故
情深已故 2020-11-22 12:15

I have 0,4*A1 in a cell (as a string). How can convert this \"string formula\" into a real formula and calculate its value, in another cell?

8条回答
  •  旧时难觅i
    2020-11-22 12:51

    I prefer the VBA-solution for professional solutions.

    With the replace-procedure part in the question search and replace WHOLE WORDS ONLY, I use the following VBA-procedure:

    ''
    ' Evaluate Formula-Text in Excel
    '
    Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant
        Dim i As Long
    
        '
        ' replace strings by values
        '
        For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2
            myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1))
        Next
    
        '
        ' internationalisation
        '
        myFormula = Replace(myFormula, Application.ThousandsSeparator, "")
        myFormula = Replace(myFormula, Application.DecimalSeparator, ".")
        myFormula = Replace(myFormula, Application.International(xlListSeparator), ",")
    
        '
        ' return value
        '
        wm_Eval = Application.Evaluate(myFormula)
    End Function
    
    
    ''
    ' Replace Whole Word
    '
    ' Purpose   : replace [strFind] with [strReplace] in [strSource]
    ' Comment   : [strFind] can be plain text or a regexp pattern;
    '             all occurences of [strFind] are replaced
    Public Function RegExpReplaceWord(ByVal strSource As String, _
    ByVal strFind As String, _
    ByVal strReplace As String) As String
    
        ' early binding requires reference to Microsoft VBScript
        ' Regular Expressions:
        ' with late binding, no reference needed:
        Dim re As Object
        Set re = CreateObject("VBScript.RegExp")
    
        re.Global = True
        're.IgnoreCase = True ' <-- case insensitve
        re.Pattern = "\b" & strFind & "\b"
        RegExpReplaceWord = re.Replace(strSource, strReplace)
        Set re = Nothing
    End Function
    

    Usage of the procedure in an excel sheet looks like:

提交回复
热议问题