如何将字符串公式转换为"真实"公式

Clo*_*aky 67 string excel formula evaluate

我有0,4*A1一个单元格(作为字符串).如何将这个"字符串公式"转换为实际公式并在另一个单元格中计算其值?

Fio*_*ala 52

Evaluate 可能适合:

http://www.mrexcel.com/forum/showthread.php?t=62067

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function
Run Code Online (Sandbox Code Playgroud)

  • **使用这种方法时要小心**:`默认情况下,Evaluate()`将在活动表*的上下文中运行*,因此`Eval("0.4*A1")`的输出将根据工作表是活动的.您可以使用(例如)`Application.ThisCell.Parent.Evaluate(Ref)`来约束包含对"Eval"调用的工作表的上下文 (20认同)

小智 37

我串接我的公式是正常的,但在一开始我'=不是=.

然后我将文本复制并粘贴到我需要它的位置.然后我突出显示保存为文本的部分,然后按ctrl+ H查找并替换.
我替换'==,我的所有功能都是活跃的.

它有几个阶段,但它避免了VBA.

我希望这有帮助,

  • 你没有事件需要撇号:它足以用自己替换`=` (9认同)
  • 这是一个胜利者!我使用@因为'是我公式中的一个字符 (4认同)

Pat*_*rez 12

只是为了好玩,我在这里发现了一篇有趣的文章,使用Excel中存在的某种隐藏的评估函数.诀窍是将它分配给一个名称,并在单元格中使用该名称,因为如果直接在单元格中使用,EVALUATE()会给出错误信息.我试过了,它的确有效!如果要在工作表中复制跨行,则可以将其与相对名称一起使用.

  • 如果它有效,没有什么是"过时的"!4.0宏语言提供了一些巧妙的技巧. (2认同)

war*_*123 11

更新这曾经工作(在2007年,我相信),但不在Excel 2013中.

EXCEL 2013:

这不完全相同,但是如果可以将0.4放在一个单元格(B1,比方说)中,而文本值A1放在另一个单元格(C1,比如说)中,则在单元格D1中,可以使用= B1*INDIRECT( C1),这导致计算0.4*A1的值.

所以,如果A1 = 10,你将进入0.4*10 = 4单元格D1.如果我能找到更好的2013解决方案,我会再次更新,对不起,微软破坏了INDIRECT的原始功能!

EXCEL 2007版:

对于非VBA解决方案,请使用该INDIRECT公式.它将字符串作为参数并将其转换为单元格引用.

例如,=0.4*INDIRECT("A1")将返回该工作表的单元格A1中的值0.4*.

如果单元格A1是10,那么=0.4*INDIRECT("A1")将返回4.

  • 我对16个上选票感兴趣 - 从我对'间接'功能的理解,这是永远不会起作用的.我可以看到你怎么做`= INDIRECT("A"&(0.4*5))`即使用数学来计算单元格的引用,但我很确定间接不会计算除了参考. (9认同)
  • 在2010年不起作用,返回#REF (7认同)
  • 而且在2013年也不起作用!! ?? (4认同)
  • 这种方法不起作用 - 我们如何解决这个问题呢? (3认同)
  • 它不起作用的原因是因为公式使用错误.正确的公式是`= 0.4*INDIRECT(A1)` (2认同)

DrM*_*use 5

对于专业解决方案,我更喜欢 VBA 解决方案。

对于问题 search 中的替换过程部分 并仅替换整个单词,我使用以下 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
Run Code Online (Sandbox Code Playgroud)

该过程在 Excel 工作表中的用法如下所示:

excel工作表中的用法