我希望能够评估单元格中的公式(在excel中),这些公式在值之间有描述。 例如,我在单元格中有3小时* 2ppl + 4,在这种情况下,我想在另一个单元格中评估它以返回数字答案(例如10)。
任何人都可以帮助我吗?
聚苯乙烯。我不太了解Visual Basic,但如果代码已经为我编写,可以创建宏。
答案 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)
结果: