2010-12-17 142 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