セルにテキスト文字列があり"11+5"
、さらに"=11+5"
はセルに格納されているとします。その文字列を数式であるかのように実際に評価できる関数がExcelにありますか?
これは、Excelで「動的」数式を記述できるようにする別のプロジェクトに役立ちます。
セルにテキスト文字列があり"11+5"
、さらに"=11+5"
はセルに格納されているとします。その文字列を数式であるかのように実際に評価できる関数がExcelにありますか?
これは、Excelで「動的」数式を記述できるようにする別のプロジェクトに役立ちます。
回答:
EVALUATE
現在のすべてのバージョンのVBAで利用可能
VBAコードに含めるか、単純なUDFにラップして、ワークシート関数として使用可能にすることができます。
Function ev(r As Range) As Variant
ev = Evaluate(r.Value)
End Function
基本的に、渡されたパラメーターの値は、セルに入力された場合と同じように、Excelの数式として扱われます。
"11+5"
そして"=11+5"
、同じ結果を生成します
=evaluate(put_reference[s]_here)
これは半機能です-Name Managerでのみ使用できます。
これはあなたがそれを使用する方法です:
セルをポイントして、[名前マネージャー]を開きます([式]タブから、またはCTRL + F3をクリックして)
=evaluate(
目的のセルを記述してクリックします(相対参照を維持するのが最善です)。
)
eva
)。 ここで、B1を選択し、これがすべてA1を参照するようにしたとします。A1に「1 + 1」を入力し、B1に書き込む=eva
ことができます。ENTERを押すと、B1の値はになります2
。Name Managerの参照は相対的である=eva
ため、使用して、希望する場所から1セル離れた任意のセルの評価を取得できます。(例:B2では=eva
、セルA2の結果を返します)
=auswerten(...)
@karelと@Laurentiu Miricaからのすばらしい回答には重要な注意点があります。参照セルが変更されない限り、評価関数は再計算されません。たとえば、セルC1にはテキスト"A1+B1"
が含まれ、D1には関数が含まれます=eval
。A1またはB1の値が変更された場合、セルD1 は再計算されません。
これは、文字列または評価セルに揮発性関数を導入することで修正できます。これにより、ワークシートが再計算されるたびに再計算が強制されます。たとえば、セルC1をに置き換えることができます=if(today(),"A1+B1",)
。または、D1をに置き換えることもできます=if(today(),eval,)
。任意の揮発性関数が行う必要があります。
3番目の、おそらく最も簡単な解決策は、名前マネージャーの半機能を =if(today(),evaluate(c1),)