删除不需要的字符并评估excel中剩余的字符

时间:2014-03-18 22:02:28

标签: excel vba

我希望能够评估单元格中的公式(在excel中),这些公式在值之间有描述。 例如,我在单元格中有3小时* 2ppl + 4,在这种情况下,我想在另一个单元格中评估它以返回数字答案(例如10)。

任何人都可以帮助我吗?

聚苯乙烯。我不太了解Visual Basic,但如果代码已经为我编写,可以创建宏。

3 个答案:

答案 0 :(得分:1)

试试这个vba功能。它只适用于四种基本操作。

 Function sEvalFormula(sInput As String) As String
Dim lLoop As Long, sSpecialChars As String, sTemp As String

sSpecialChars = "0123456789-+*/()=."


For lLoop = 1 To Len(sInput)
    If InStr(sSpecialChars, Mid(sInput, lLoop, 1)) > 0 Then sTemp = sTemp & Mid(sInput, lLoop, 1)
Next

sEvalFormula = Evaluate(sTemp)


End Function

答案 1 :(得分:1)

首先,在标准模块中输入以下 UDF

Public Function evall(s As String) As Variant
    l = Len(s)
    s2 = ""
    For i = 1 To l
        ch = Mid(s, i, 1)
        If ch Like "[a-z]" Then
        Else
            s2 = s2 & ch
        End If
    Next i
    evall = Evaluate(s2)
End Function

因此,如果 A1 包含:

3小时* 2ppl + 4

然后

=evall(A1)

将显示 10

UDF 会丢弃小写字母并评估剩余的表达式。

答案 2 :(得分:1)

另一种方法是使用正则表达式(Regex)。有关模式的含义的更多信息,请参阅此link

另外,请确保添加“Microsoft VBScript Regular Expressions 5.5”作为VBA模块的参考(有关如何执行此操作,请参阅此link)。

我传入一个单元格地址,删除任何字母,然后评估该功能。

Function RegExpReplace(cell As Range, _
        Optional ByVal IsGlobal As Boolean = True, _
        Optional ByVal IsCaseSensitive As Boolean = True) As Variant

    'Declaring the object
    Dim objRegExp As Object

    'Initializing an Instance
    Set objRegExp = CreateObject("vbscript.regexp")

    'Setting the Properties
    objRegExp.Global = IsGlobal
    objRegExp.pattern = "[a-zA-Z]"
    objRegExp.IgnoreCase = Not IsCaseSensitive

    'Execute the Replace Method
    RegExpReplace = Evaluate(objRegExp.Replace(cell.Text, ""))
End Function

在单元格B1中输入以下公式:=RegExpReplace(A1)


结果:

enter image description here