删除不需要的字符,并评估剩余的Excel

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

谁能帮我?

PS。 我不太了解Visual Basic,但是如果代码已经写好了,可以创buildmacros。

试试这个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 

首先,在标准模块中input以下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 "[az]" Then Else s2 = s2 & ch End If Next i evall = Evaluate(s2) End Function 

所以如果A1包含:

3小时* 2ppl + 4

然后

 =evall(A1) 

将显示10

UDF丢弃小写字母并评估剩余的expression式。

另一种方法是使用正则expression式(Regex)。 请参阅此链接了解更多关于模式的含义。

此外,请确保添加“Microsoft VBScript正则expression式5.5”作为您的VBA模块的参考(请参阅此链接了解如何执行此操作)。

我正在传递一个单元格地址,删除任何字母,然后评估函数。

 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 

在单元格B1input以下公式: =RegExpReplace(A1)


结果:

在这里输入图像描述