2010-12-17 188 views

回答

34

评估和演示可能适合:

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

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

**如果使用这种方法,请小心**:默认情况下,Evaluate()会在活动工作表的上下文中操作*,所以像Eval(“0.4 * A1”)这样的输出将会改变取决于哪个工作表处于活动状态。您可以使用(例如)'Application.ThisCell.Parent.Evaluate(Ref)'将上下文限制为包含调用'Eval'的工作表。 – 2015-09-08 19:45:24

+0

它在Excel 2013中还能工作吗? – 2016-09-02 12:33:10

10

只是为了好玩,我发现了一个interesting article here,使用某种方式隐藏评估功能,它在Excel中存在。诀窍是将它分配给一个名称,并在您的单元格中使用该名称,因为如果直接在单元格中使用EVALUATE()会给您一个错误消息。我尝试过,它的工作原理!如果要在表格中跨行复制,则可以使用相对名称。

+0

有趣但似乎并不适用于更新版本的Excel。如果我正确地阅读它,那么访问被抑制的20世纪90年代Excel行为到2000年初的Excel,但在2010年,2013年,办公室365等过时是一种伎俩? – 2015-10-30 15:55:24

+1

在Excel 2010中为我工作... – jimbobmcgee 2016-04-04 12:00:42

+2

如果工作正常,没有任何事情是“过时的”! 4.0宏语言提供了一些巧妙的技巧。 – 2016-08-05 04:50:22

9

UPDATE这用来工作(在2007年,我相信),但不会在Excel 2013年

EXCEL 2013: 这是不太一样的,但如果有可能把0.4一个单元格(B1,比如说)以及单元格D1中另一个单元格(例如C1)中的文本值A1,可以使用= 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.

+6

它不适用于Excel 2007! – 2012-10-17 10:43:48

+0

在XL 2​​010 – gordon 2013-01-09 15:39:55

+0

中至少工作过一次,以获取更多信息和有用示例,请参阅http://www.contextures.com/xlFunctions05.html和http://www.cpearson.com/excel/indirect.htm – Frank 2013-12-04 10:00:25

24

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

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

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

我希望这有助于

罗布

+4

这是赢家!我用@是因为'是我公式中的一个字符 – Xcheque 2014-09-23 05:08:06

+5

你不需要撇号:它已经足够用自己替换'=' – 2015-08-05 14:05:45

+1

极其简单!我发现只是找到并替换了=符号,因为我在开始时没有“角色”。 – stuartm 2017-02-08 23:24:41

2

我prefere的专业解决方案的VBA的解决方案。

随着份替换-过程中的问题 search and replace WHOLE WORDS ONLY,我使用下面的VBA的过程:

在Excel工作表
'' 
' 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 

使用的程序的样子:

usage in excel-sheet

-1

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

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

+0

这不起作用,并且公式错误(“需要”而不是“##”) – wardw123 2016-12-15 19:40:35

1

在我看来,最好的解决方案是在这个环节: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

下面是一个总结: 1)在单元格A1中输入1, 2)在A2单元格中输入2, 3)在单元格A3输入+, 4)创建一个命名范围,在创建指定范围时在“指向”字段中添加“=评估(A1 & A3 & A2)”。让我们称这个命名范围为“testEval”, 5)在单元格A4中输入= testEval,

单元格A4的值应该是3。

备注: a)不需要编程/ vba。 b)我在Excel 2013中做到了这一点,它的工作原理。

+0

给出的示例不起作用,但链接示例确实起作用。 – JayJay123 2017-02-05 23:15:44