(文字列として)セルに0,4*A1
があります。この「文字列式」を実際の式に変換し、その値を別のセルで計算するにはどうすればよいですか?
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を回避します。
これがお役に立てば幸いです、
ロブ
ちょうどおもしろいのですが、Excelに存在する何らかの隠された評価関数を使用する 興味深い記事 を見つけました。 EVALUATE()は、セルで直接使用するとエラーメッセージを表示するため、名前に割り当てて、セルで名前を使用するのがコツです。私は試しましたが、うまくいきます!シートの行をまたいでコピーする場合は、相対名で使用できます。
UPDATEこれは動作していました(2007年、私は信じています)が、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の元の機能を破壊して申し訳ありません。
非VBAソリューションの場合は、INDIRECT
式を使用します。引数として文字列を受け取り、セル参照に変換します。
たとえば、=0.4*INDIRECT("A1")
は値0.4 *そのワークシートのセルA1にある値を返します。
セルA1がたとえば10だった場合、=0.4*INDIRECT("A1")
は4を返します。
プロのソリューションには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シートでのプロシージャの使用法は次のようになります。
私の意見では、最良の解決策はこのリンクにあります: 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でこれを行いましたが、動作します。