如何将字符串公式变成“真实”公式?

问题描述 投票:0回答:9

我的单元格中有

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

excel string formula worksheet-function evaluate
9个回答
59
投票

Evaluate
可能适合:

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

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

57
投票

我像平常一样连接了我的公式,但一开始我有

'=
而不是
=

然后我将其作为文本复制并粘贴到我需要的位置。然后我突出显示保存为文本的部分,然后按 ctrl + H 进行查找和替换。
我将

'=
替换为
=
,并且我的所有功能都处于活动状态。

虽然只有几步,但避免了VBA。


16
投票

更新此公式适用于 Microsoft 365,但我无法测试 2007 和 2013 的示例。 原文:这曾经有效(我相信在 2007 年),但在 Excel 2013 中无效。

Excel 微软 365

假设我们想要引用单元格

'Tab 1'!C3
,但是我们想要从列中的选项卡名称和行中的单元格名称进行引用,因此引用是由以下内容构建的:

CONCAT("'",$B2,"'!",D$1)

其中

B2
包含
Tab 1
D1
包含
C3

间接公式是这样工作的

=INDIRECT(CONCAT("'",$B2,"'!",D$1))

请注意一开始所需的

"'"

Excel 2013:

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

因此,如果 A1 = 10,您会在单元格 D1 中得到

0.4*10 = 4
。如果我能找到更好的2013解决方案,我会再次更新,很抱歉微软破坏了间接的原始功能!

EXCEL 2007版:

对于非 VBA 解决方案,请使用

INDIRECT
公式。它接受一个字符串作为参数并将其转换为单元格引用。

例如,

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

如果单元格 A1 是 10,那么

=0.4*INDIRECT("A1")
将返回 4。


12
投票

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


5
投票

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

问题中的替换过程部分 仅搜索并替换整个单词,我使用以下 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 工作表中使用该过程如下所示:


3
投票

我认为最好的解决方案是在这个链接中: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

总结如下:

  1. 在单元格 A1 中输入
    1
    ,
  2. 在单元格 A2 中输入
    2
    ,
  3. 在单元格 A3 中输入
    +
    ,
  4. 创建命名范围,在创建命名范围时在引用字段中使用
    =Evaluate(A1 & A3 & A2)
    。我们将此命名范围称为“testEval”,
  5. 在单元格 A4 中输入
    =testEval
    ,

单元格 A4 中的值应为 3。

备注:
a) 无需编程/VBA。
b) 我在 Excel 2013 中执行此操作并且有效。


2
投票

比如说,让我们用返回字符串的公式填充列

E
,例如:

= " = " & D7

其中

D7
单元格包含更复杂的公式,构成最终所需的结果,例如:

= 3.02 * 1024 * 1024 * 1024

所以在所有大量的行中。

当行数很少时 - 只需复制所需的单元格作为值(按人民币)
到最近的列,说

G
,然后按 F2,并在每行中按 Enter
然而,如果行数很大,这是不可能的......

所以,没有 VBA。没有额外的公式。无 F&R

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

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

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

2
投票

Excel 2019 在这里。

EVALUATE
无效。

如果我们从中创建一个命名范围,那就可以了:

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

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

解决方案:

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


-4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.