web-dev-qa-db-ja.com

文字列式を「実際の」式に変換する方法

(文字列として)セルに0,4*A1があります。この「文字列式」を実際の式に変換し、その値を別のセルで計算するにはどうすればよいですか?

63
Cloaky

Evaluateは次のように適合します。

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

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

数式を通常どおりに連結しましたが、最初は'=ではなく=を使用していました。

次に、必要な場所にテキストとしてコピーして貼り付けます。次に、テキストとして保存されたセクションを強調表示して、 ctrl + H 見つけて交換します。
'==に置き換え、すべての機能がアクティブになりました。

そのいくつかの段階が、それはVBAを回避します。

これがお役に立てば幸いです、

ロブ

34
Robbie

ちょうどおもしろいのですが、Excelに存在する何らかの隠された評価関数を使用する 興味深い記事 を見つけました。 EVALUATE()は、セルで直接使用するとエラーメッセージを表示するため、名前に割り当てて、セルで名前を使用するのがコツです。私は試しましたが、うまくいきます!シートの行をまたいでコピーする場合は、相対名で使用できます。

12
Patrick Honorez

UPDATEこれは動作していました(2007年、私は信じています)が、Excel 2013では動作しません。

Excel 2013:

これはまったく同じではありませんが、0.4を1つのセル(B1、たとえば)に入れ、テキスト値A1を別のセル(C1、たとえば)、セルD1に入れることができる場合、= B1 * INDIRECT( C1)、0.4 * A1の値の計算になります。

したがって、A1 = 10の場合、セルD1に0.4*10 = 4が表示されます。より良い2013年の解決策を見つけることができれば、もう一度更新します。MicrosoftがINDIRECTの元の機能を破壊して申し訳ありません。

Excel 2007バージョン:

非VBAソリューションの場合は、INDIRECT式を使用します。引数として文字列を受け取り、セル参照に変換します。

たとえば、=0.4*INDIRECT("A1")は値0.4 *そのワークシートのセルA1にある値を返します。

セルA1がたとえば10だった場合、=0.4*INDIRECT("A1")は4を返します。

10
wardw123

プロのソリューションにはVBAソリューションが好きです。

完全な単語のみを検索して置換 の質問のreplace-procedureパートでは、次の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

4
DrMarbuse

私の意見では、最良の解決策はこのリンクにあります: 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
mountainclimber