私は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を押して検索して置換します。
I を置き換える'=
と=
、すべての機能がアクティブになります。
数ステップですが、VBA を回避します。
更新これは以前は機能していましたが (2007 年には機能していたと思います)、Excel 2013 では機能しません。
エクセル 2013:
これはまったく同じではありませんが、あるセル (B1 など) に 0.4 を入力し、別のセル (C1 など) にテキスト値 A1 を入力できる場合、セル D1 では =B1*INDIRECT( を使用できます。 C1)、これは 0.4 * A1 の値の計算になります。
したがって、A1 = 10 の場合0.4*10 = 4
、セル D1 に入ります。2013 年のより良い解決策が見つかったら、もう一度更新します。申し訳ありませんが、Microsoft は INDIRECT の元の機能を破壊しました。
エクセル2007版:
非 VBA ソリューションの場合は、INDIRECT
式を使用します。文字列を引数として取り、それをセル参照に変換します。
たとえば、=0.4*INDIRECT("A1")
0.4 * そのワークシートのセル A1 にある値の値を返します。
セル A1 が 10 の場合、=0.4*INDIRECT("A1")
4 が返されます。
ちょっとした楽しみとして、Excel に存在する何らかの形で隠された評価関数を使用する興味深い記事を見つけました。EVALUATE() をセルで直接使用するとエラーメッセージが表示されるため、名前に割り当ててセルでその名前を使用するのがコツです。私は試してみましたが、うまくいきます!シートの場合に行全体にコピーする場合は、相対名で使用できます。
私は、プロフェッショナルなソリューションには VBA ソリューションを好みます。
質問 検索の置換手順部分と置換 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
そして、すべての膨大な数の行で。
行が少ない場合 - 目的のセルを (RMB 単位で) 値として
最も近い列にコピーし、各行で次のEnter キーG
を押しながらF2を押すだけで十分です。
ただし、大量の行の場合は不可能です...
だから、VBAはありません。余分な数式はありません。F&Rなし
ミスもタイプミスもありませんが、愚かな機械的アクションだけではなく、
フォードのコンベアのように。そしてほんの数秒で:
- [関連するすべての列が「一般」形式であると仮定します。]
- メモ帳++を開く
- 列全体を選択
D
- Ctrl+C
- NPP でCtrl+V
- NPP でCtrl+A
- 目的の列の最初の行のセルを選択します
G1
- Ctrl+V
- 楽しみ :) 。