2016-04-26 27 views
3

私はVBAでカスタム評価関数を使用しています。しかし、)(別の評価が含まれている式を評価すると、失敗した:評価の範囲内のExcel評価

=Eval(I21) 

セルI21:(式自体の動作)注:INDIRECT()doesntのワークすぎる

'=MATCH("SOME TEXT",eval($I$22),0) 

セルI22:(位置参照)

''1516Activity'!$C:$C 

VBA:

Function Eval(Ref As String) 
    Application.Volatile 
    Eval = Application.ThisCell.Parent.Evaluate(Ref) 
End Function 
+0

私はあなたが削除する必要があります "="セルI21(数式)。再帰(eval in eval)では、独自のパーサーを記述する必要があります。 – Gerfried

+0

@Gerfried Mindはそれを詳しく説明していますか?ありがとう! –

+2

'Eval = Application.Evaluate(Ref)'を使うとうまくいくはずですが、完全修飾範囲アドレスを渡す必要があります。 – Rory

答えて

1

VBA:

Eval = Application.Evaluate(Ref) 

セル参照が完全修飾の範囲のアドレスを使用する場合、このソリューションはのみ動作します。参照が呼び出し側(row()+ - およびcolumn()+ - )に依存する場合、あなたは私と同じ状況にあります。