0

他のブックが閉じている場合、Excel SUMIFS 関数は実行できません。したがって、ワークブックを開き、「for」ループを介して反復し、合計変数に値列を追加する必要があるかどうかを確認する SUMIFS 関数を実行しました。

「for」ループを削除し、「WorksheetFunction.SumIfs(...)」を使用する別の関数を実行しました。私の新しい関数は、古い関数よりも速く実行されました。

Excel 関数と VBA イテレーションの背後にある魔法は何ですか?

4

2 に答える 2

2

から: http://msdn.microsoft.com/en-us/library/ff726673.aspx#xlUsingFuncts

(強調追加)

ユーザー定義関数

C または C++ でプログラミングされ、C API を使用するユーザー定義関数 (XLL アドイン関数) は、通常、VBA またはオートメーション (XLA またはオートメーション アドイン) を使用して開発されたユーザー定義関数よりも高速に実行されます。詳細については、「Excel 2010 XLL の開発」を参照してください。

XLM 関数は、C XLL アドイン関数と同じ密結合 API を使用するため、高速にすることもできます。VBA ユーザー定義関数のパフォーマンスは、それらをどのようにプログラミングして呼び出すかに左右されます。

VBA ユーザー定義関数の高速化

通常、VBA ユーザー定義関数を使用するよりも、Excel の数式計算とワークシート関数を使用する方が高速です。これは、ユーザー定義関数呼び出しごとにわずかなオーバーヘッドがあり、Excel からユーザー定義関数に情報を転送する際に大きなオーバーヘッドがあるためです。しかし、適切に設計されて呼び出されたユーザー定義関数は、複雑な配列数式よりもはるかに高速です。

于 2012-07-16T14:49:20.833 に答える
0

より多くの洞察を得る 1 つの方法は、さまざまな入力サイズでパフォーマンス比がどのように変化するかをテストすることです。たとえば、入力サイズが 100 倍に増加してもパフォーマンスの比率がほぼ同じである場合は、VBA 抽象化のオーバーヘッドが原因である可能性があります。

于 2012-07-16T15:24:16.267 に答える