0

要するに、UDF の入力パラメーターの 1 つではない依存関係を定義する方法はありますか?

これは私の最初の投稿です。私は Excel で VBA を学んでおり、非常に才能のあるコーダーがここに投稿しているのを多数見てきました。

セル範囲に依存する UDF を作成する方法を知りたいのですが、ユーザーはこのセル範囲を入力する必要はありません。簡単な例は、常にセル "A1" を受け取り、入力を A1 に連結して出力​​する関数です。範囲が UDF 内で静的に参照されている場合、ユーザーがセル "A1" を消去すると、範囲は "#REF" に変わりません。

A1 = "Hello" で、入力が "World" の場合、出力を "Hello World" にしたいと考えています。

関数内で関数を呼び出すことができ、それに基づいて依存関係ツリーが構築されるのではないかと考えましたが (以下を参照)、最初に呼び出された関数 (in1) の入力パラメーターを変更しない限り、テスト関数は更新されません。

テストコード:

Public Function test(in1 As String) As String
    test = testdep(in1, Sheets("Sheet1").Range("A1"))
End Function

Private Function testdep(in1 As String, rng As Range)
    testdep = rng.Value & in1
End Function

アイデア?

Edit1: より具体的には、セル A1 は入力パラメーターではありませんが、セル "A1" が変更されたときに出力値を更新する関数が必要です。たとえば、A1 を "Hello" ではなく "blah" に変更すると、値は "blah World" に更新されます。関数を揮発性にしますが、そのような関数がたくさんあり、計算速度が非常に遅くなります。

4

2 に答える 2

0

UDF 内で使用されているがパラメーター リストにないセルが変更されたときに、UDF を再計算する方法は 2 つしかありません。
- UDF を揮発性にする
- workbook.forcefullcalculation を true に設定します。

これらのソリューションは両方とも、すべての計算で udf を計算させます。force full 計算はさらに抜本的です。スマートな再計算をオフにして、すべての数式を計算させます。

于 2013-08-20T08:15:25.213 に答える
-1

パラメータとして何も指定する必要はありません。このようなものは魅力のように機能します:

Public Function CombineHelloAndWorld() As String
    CombineHelloAndWorld = Range("A1") & " " & Range("A2")
End Function

に「Hello」[A1]と に「World」があるとし[A2]ます。セル[A3]に書き込む=CombineHelloAndWorld()と、「Hello World」が表示されます。

また、Application.Calculationが に設定されている場合、 またはのいずれかを変更するとxlCalculationAutomatic自動的に変更されます。[A3][A1][A2]

于 2013-08-20T07:33:27.700 に答える