2

私のVBAコードは

Function yEval(entry As String)
yEval = Evaluate(entry)
Application.Volatile
End Function

シート1のセルf4に数式=yEval(Sheet2!E19) セルd4があり、シート1に数値12が含まれていますSheet2!I19に文字列$ Qが含まれています

Sheet2!e19 に文字列 INDIRECT("pries!"&Sheet2!I19&12) または INDIRECT("pries!"&Sheet2!I19&Sheet1!d4) または INDIRECT("pries!"&Sheet2!I19&"Sheet1!D"&row()+12) がある場合数式は、シート pries から結果を返します!$Q12

Sheet2!e19 に文字列 INDIRECT("pries!"&Sheet2!I19&address(row(),4)) または INDIRECT("pries!"&Sheet2!I19&"Sheet1!D"&row()) がある場合、式は結果 0 を返します。 row() 関数を無視する

この式を機能させて、行番号に応じて d4 部分を変更する方法、行が 5 の場合は d5

INDIRECT("pries!"&Sheet2!I19&Sheet1!d4)
4

1 に答える 1

1

興味深い問題...問題の詳細については、即時ウィンドウまたはウォッチウィンドウからこれらを試してください。

?[indirect("rc",0)]
?[index(a:a,row())]
?[offset(a1,row()-1,column()-1)]

不思議なことに、それらはすべて、A1どのセルがアクティブであるかに関係なく評価されます。Evaluate戻り値が範囲参照である場合[]、参照がアクティブな(呼び出し元の)セルではなくA1を基準にして扱われるのは奇妙なことです。A1に対して評価されたRC表記row()と同等と考えることができます。row(RC)

ただし、上記の3つの式でに変更]する&""]と、最初の式ではエラーが発生しますが、最後の2つの式では予想される結果になるためrow()、アクティブセルに対して評価されることに注意してください。したがって、戻り値が範囲参照でない場合、Evaluateの機能は異なるようです。

アップデート

これらの観察に基づいて、行参照にINDEXを使用し、INDIRECTを外部に移動できます。

Sheet1!F4:=INDIRECT(yEval(Sheet2!E19))
Sheet2!E19:"pries!"&Sheet2!I19&INDEX(Sheet1!D:D,Row())

...またはUDFを必要とせずにRCスタイルの参照を使用する:

=INDIRECT("pries!"&Sheet2!I19&INDIRECT("RC4",0))
于 2012-06-08T12:04:19.143 に答える