如何把一个string公式转换成一个“真实”的公式
我在单元格中有0,4*A1
(作为string)。 怎样才能把这个“string公式”转换成一个真实的公式,并在另一个单元格中计算它的值?
评估可能适合:
– http://www.mrexcel.com/forum/showthread.php?t=62067
Function Eval(Ref As String) Application.Volatile Eval = Evaluate(Ref) End Function
我连接我的公式是正常的,但在一开始我有'=
而不是=
。
然后,我将文本复制并粘贴到需要的位置。 然后突出显示保存为文本的部分,然后按ctrl + H查找并replace。
我replace'=
=
和我的所有function都是活动的。
它的几个阶段,但它避免了VBA。
我希望这有帮助,
抢
只是为了好玩,我在这里find了一篇有趣的文章 ,用一个隐藏的评估函数,它存在于Excel中。 诀窍是将它分配给一个名称,并在你的单元格中使用该名称,因为如果直接在单元格中使用EVALUATE()会给你一个错误信息。 我试过,它的工作原理! 如果要在工作表中跨行复制,可以使用相对名称。
更新这用于工作(在2007年,我相信),但不在Excel 2013。
EXCEL 2013:这是不完全相同的,但是如果可以将0.4放入一个单元格(B1,比如说),并且在D1单元格中的另一个单元格(例如C1)中的文本值A1,则可以使用= B1 *间接(C1),导致计算0.4 * A1的值。 所以,如果A1 = 10,D1的单元格就是0.4 * 10 = 4。 如果我能find一个更好的2013年解决scheme,我会再次更新,并对不起微软摧毁了间接的原始function!
EXCEL 2007版本:对于非VBA解决scheme,请使用INDIRECT公式。 它将一个string作为参数并将其转换为单元格引用。
例如,= 0.4 * INDIRECT(“A1”)将返回值0.4 *的值在该工作表的单元格A1中。
如果单元格A1是10,那么= 0.4 *间接(“A1”)将返回4。
我优先考虑vba解决scheme的专业解决scheme。
部分replace过程有问题的search和replace全文 ,我使用以下vba过程:
'' ' 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
在Excel工作表中使用该过程如下所示:
在我看来,最好的解决scheme是在这个链接: http : //www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function
这里是一个总结:1)在单元格A1中input1,2)在单元格A2中input2,3)在单元格A3中input+,4)创build一个命名范围,在“= Evaluate(A1&A3&A2)指创build指定范围时的字段。 让我们调用这个命名范围“testEval”,5)在单元格A4中input= testEval,
单元格A4的值应该是3。
注意事项:a)不需要编程/ vba。 b)我在Excel 2013中这样做,它的工作原理。
最好的,非VBA的方法是使用TEXT公式。 它将一个string作为参数并将其转换为一个值。
例如,= TEXT(“0.4 * A1”,“##”)将返回0.4 *该值在该工作表的单元格A1中的值。