1

私は VBA の初心者で、現在、速度が絶対にすべてであるプロジェクトに取り組んでいます。コードを書いているときに、シート内の多くのセルが名前付き範囲であり、次のように関数で明示的に参照されていることに気付きました。

function a() 

    if range("x") > range("y") then

    end if

    ... (just imagine a lot of named ranges)

end function

私の質問は、これらの名前付き範囲の値が次のようなパラメーターとして渡されるように、これらの関数を変更する必要があるかどうかです。

'i can pass in the correct cells when i call the function
function a(x as int, y as int) 

    if x > y then

    end if

    ...

end function

それは物事を少しスピードアップしますか?これらの関数は、RTD サーバーと通信するために、(プロセスが意図的にスリープ状態になっている場合を除いて) ほぼ常に呼び出されます。

4

1 に答える 1

0

VBAは、ワークシートへの「接続」を行う際に、それ自体の変数を処理する場合よりもはるかに低速です。関数が同じセル(または範囲)を複数回参照している場合は、VBAがそれらと対話する前にそれらをメモリにロードすると有利です。たとえば、関数内でまたはが参照される唯一の時間である場合、range("x")>range("y")それは重要ではありません。などがある場合は、関数を次のように開始する方がはるかに良いでしょう。xyif range("x")>range("a")if range("x")>range("b")

varX=range("x")
varY=range("y") 

次に、VBA変数を操作します。

2番目の例が示すように関数をパラメーター化することで、私の推奨事項を達成しているように見えるかもしれません。Excelはこれらの変数を値としてではなくワークシートへの参照として扱う可能性があるため、これが当てはまる場合とそうでない場合があります(わかりません)。安全のために、関数の最初に新しい変数を明確に定義してから、関数の残りの部分でそれらの変数のみを参照する必要があります。

上記のテキストの壁を要約すると、目標はVBAがワークシートに「接続」する回数を最小限に抑えることです。

于 2013-02-03T22:45:12.570 に答える