我0,4*A1
在一个单元格中(作为字符串)。如何将此“字符串公式”转换为真实公式并在另一个单元格中计算其值?
9 回答
Evaluate
可能适合:
http://www.mrexcel.com/forum/showthread.php?t=62067
Function Eval(Ref As String)
Application.Volatile
Eval = Evaluate(Ref)
End Function
我像往常一样连接我的公式,但一开始我有'=
而不是=
.
然后我将其作为文本复制并粘贴到我需要的地方。然后我突出显示保存为文本的部分,然后按ctrl+H查找和替换。
我替换'=
为=
并且我的所有功能都处于活动状态。
这是几个步骤,但它避免了 VBA。
更新这曾经有效(我相信在 2007 年),但在 Excel 2013 中无效。
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")
将返回值 0.4 * 该工作表的单元格 A1 中的值。
如果单元格 A1 是 10,那么=0.4*INDIRECT("A1")
将返回 4。
只是为了好玩,我在这里找到了一篇有趣的文章,使用 Excel 中确实存在的某种隐藏的评估函数。诀窍是将它分配给一个名称,并在您的单元格中使用该名称,因为如果直接在单元格中使用 EVALUATE() 会给您一个错误消息。我试过了,它有效!如果要跨行复制工作表,则可以将其与相对名称一起使用。
我更喜欢专业解决方案的 VBA 解决方案。
使用问题搜索中的 replace-procedure 部分 并替换 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 工作表中的用法如下所示:
我认为最好的解决方案在这个链接中: http ://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function
这是一个摘要:
- 在单元格 A1 中输入
1
, - 在单元格 A2 中输入
2
, - 在单元格 A3 中输入
+
, - 创建命名范围,在创建命名范围时
=Evaluate(A1 & A3 & A2)
在引用字段中。让我们称这个命名范围为“testEval”, - 在单元格 A4 中输入
=testEval
,
单元格 A4 中的值应为 3。
注意:
a) 不需要编程/VBA。
b)我在 Excel 2013 中做了这个并且它有效。
说,让我们E
用返回字符串的公式填充列,例如:
= " = " & D7
其中D7
单元格包含更复杂的公式,构成最终所需的结果,例如:
= 3.02 * 1024 * 1024 * 1024
所以在所有大量的行中。
当行有点少时 - 只需将所需的单元格作为值(按人民币)复制
到最近的列,例如G
,然后在每一行中按F2并按Enter 键。
但是,如果行数很大,这是不可能的......
所以,没有VBA。没有额外的公式。没有 F&R
没有错误,没有错字,只有愚蠢的机械动作,
就像在福特输送机上一样。只需几秒钟:
- [假设所有涉及的列都是“常规”格式。]
- 打开记事本++
- 选择整列
D
- Ctrl+C
- NPP 中的Ctrl+V
- NPP 中的 Ctrl+A
- 选择所需列第一行中的单元格
G1
- Ctrl+V
- 享受 :) 。
最好的非 VBA 方法是使用 TEXT 公式。它将一个字符串作为参数并将其转换为一个值。
例如,=TEXT ("0.4*A1",'##') 将返回 0.4 * 该工作表单元格 A1 中的值。