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

时间:2010-12-17 15:17:28

标签: string excel formula evaluate

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

9 个答案:

答案 0 :(得分:49)

Evaluate可能适合:

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

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

答案 1 :(得分:32)

我正常连接我的公式,但在开始时我有'=而不是=

然后我将文本复制并粘贴到我需要的地方。然后我突出显示保存为文本的部分,然后按 ctrl + H 进行查找和替换。
我将'=替换为=,我的所有功能都处于活动状态。

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

我希望这有帮助,

罗布

答案 2 :(得分:12)

为了好玩,我找到了一个interesting article here,以使用Excel中确实存在的隐藏评估功能。诀窍是将它分配给一个名称,并在单元格中使用该名称,因为如果直接在单元格中使用,EVALUATE()会给出错误信息。我试过了,它的确有效!如果要在工作表中复制行,则可以将其与相对名称一起使用。

答案 3 :(得分:10)

更新这曾经有用(2007年,我相信),但在Excel 2013中没有。

EXCEL 2013:

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

因此,如果A1 = 10,您将在单元格D1中获得0.4*10 = 4。如果我能找到更好的2013解决方案,我会再次更新,对不起微软破坏了INDIRECT的原始功能!

EXCEL 2007版本:

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

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

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

答案 4 :(得分:4)

我更喜欢专业解决方案的VBA解决方案。

在问题中使用替换程序部分 search and replace WHOLE WORDS ONLY,我使用以下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表中使用该过程如下:

usage in excel-sheet

答案 5 :(得分:2)

在我看来,最佳解决方案是在这个链接: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

以下是摘要: 1)在单元格A1中输入1, 2)在单元格A2中输入2, 3)在单元格A3中输入+, 4)创建命名范围,在引用字段中使用“= Evaluate(A1&amp; A3&amp; A2)”,同时创建命名范围。让我们称这个命名范围为“testEval”, 5)在单元格A4中输入= testEval,

单元格A4的值应为3。

注意: a)不需要编程/ vba。 b)我在Excel 2013中做到了这一点并且有效。

答案 6 :(得分:0)

说,让我们在E列中填充返回字符串的公式,例如:

= " = " & D7

其中D7单元格由更复杂的公式组成,该公式组成最终所需的结果,例如:

= 3.02 * 1024 * 1024 * 1024

所以在所有巨大的行数中。

当行很少时-只需复制所需的单元格作为值(按人民币)
到最近的列,例如G,然后在每行中按 Enter 并按 F2
但是,如果存在大量行,则不可能...

因此,没有VBA。没有额外的公式。没有F&R

没有错误,没有错别字,只是愚蠢的机械动作,

就像在福特传送带上一样。而且仅需几秒钟

  1. [假设所有涉及的列均为“常规”格式。]
  2. 打开记事本++
  3. 选择整个列D
  4. Ctrl + C
  5. NPP中的
  6. Ctrl + V
  7. NPP中的
  8. Ctrl + A
  9. 在所需列G1的第一行中选择单元格
  10. Ctrl + V
  11. 享受:) 。

答案 7 :(得分:0)

Excel 2019 在这里。 EVALUATE 无效。

evaluate isn't valid

如果我们从中创建一个命名范围,它会起作用:
edit name dialog

但在这种情况下,我们提供了一个绝对引用,这并不好:

  1. 每次要重复使用公式时,我们都必须修改它。
  2. 当 A1 中的值发生变化时,评估结果不会发生变化。

解决方案:

=EVALUATE(GET.CELL(5,OFFSET(INDIRECT("RC",FALSE),0,-1)))

edit name dialog

result EVAL_ON_LEFT

答案 8 :(得分:-3)

最好的非VBA方法是使用TEXT公式。它将一个字符串作为参数并将其转换为值。

例如,= TEXT(&#34; 0.4 * A1&#34;,&#39; ##&#39;)将返回0.4 *的值,即单元格A1中的值工作表。