Excel VBA 使用变量将单元格中的字符串作为公式进行计算

Excel VBA 使用变量将单元格中的字符串作为公式进行计算

我花了几个小时在这上面并找到了相关的问题,但我没有找到一个可行的答案,所以我不认为这是重复的。

我在一个单元格中有一个字符串,它代表一个简单的公式和一个变量。该变量将被预定义。然后我需要评估该字符串。我无法获取要评估的单元格值。字符串本身在即时窗口中评估,但完全相同的单元格值字符串不会:

?myVar
 1 
?[M115].Value
"0.1*" & myVar & "*(0.2+0.3*" & myVar & "/.4)"
?Evaluate("0.1*" & myVar & "*(0.2+0.3*" & myVar & "/.4)")
 0.095 
?Evaluate([M115].Value)
Error 2029

我对变量的最佳猜测是没有进行评估,因为我可以将 myVar 替换为 1,并且它可以工作。我尝试了各种三重引号,但都不起作用。我该如何完成这个看似简单的事情?我尝试过像这样包装子程序和函数:

Function ev(r As Range, ByVal myVar As Double) As Variant
    Debug.Print myVar
    Debug.Print r.value
    ev = Evaluate(r.value)
End Function

?ev([M115], 1)
 1 
 "0.1*" & myVar & "*(0.2+0.3*" & myVar & "/.4)"
Error 2029

myVar=1
?Evaluate("0.1*" & myVar & "*(0.2+0.3*" & myVar & "/.4)")
0.095 

我忽略了什么?谢谢。

答案1

尝试此解决方案,如果它对您有用,请恢复。按 ALT + F11 打开 VBA 编辑器。插入模块并将以下 UDF 粘贴到其中。

Public Function test(r As Range, myvar As Double) As Double
Z = r.Formula
Z = Replace(Z, "myvar", myvar)
test = Evaluate(Z)
End Function

现在,Excel 单元格中的表达式不应包含任何不属于公式的字符,如 & " 等。它应该包含具有静态名称的简单公式,并始终保持名称不变且区分大小写。

例如 myvar + 3 此处 myvar 只是静态文本,未在任何地方声明。使用该函数并将单元格作为范围传递,将变量值作为双精度传递给它。没有进行太多验证,传递多维数组可能会导致此处出现错误。参见下面的屏幕截图。尝试一下并检查这是否符合您的要求。

在此处输入图片描述

答案2

我在超级用户上没有足够的信用来点赞,我今天才链接了我的 stackoverflow 帐户。但是,那个答案足够接近,可以摆脱困境。以下是有效的方法:

Public Function evtest(r As Range, myVar As Double) As Variant
    Dim z As Variant
    z = r.formula
    z = Replace(z, "myVar", myVar)
    Debug.Print z
    evtest = Evaluate(z)
End Function

现在我觉得我有事可做了

?[M113].Value
0.1*myVar*(0.2+0.3*myVar/.4)
?evtest([M113], 1)
0.1*1*(0.2+0.3*1/.4)
 0.095 

如果我发现需要修改的地方,我会更新此答案。非常感谢。

编辑:我让它更加通用一些:

Function evtest(r As Range, myVarName As String, myVarValue As Double) As Variant
    Dim z As Variant
    z = r.formula
    z = Replace(z, myVarName, myVarValue)
    Debug.Print z
    evtest = Evaluate(z)
End Function

现在像这样使用:

?[M113].Value
0.1*myVar*(0.2+0.3*myVar/.4)
?TEST.evtest([M113], "myVar", 1.5)
0.1*1.5*(0.2+0.3*1.5/.4)
 0.19875 

希望这对其他人有帮助。

相关内容