VBA でできるもう 1 つの大きなことは、Option Explicit を使用し、可能な限りバリアントを避けることです。バリアントは VBA で 100% 回避できるわけではありませんが、インタープリターは実行時により多くの作業を行い、メモリを浪費します。
Excel で VBA を使い始めたときに、この記事は非常に役に立ちました。
http://www.ozgrid.com/VBA/SpeedingUpVBACode.htm
そしてこの本
http://www.amazon.com/VB-VBA-Nutshell-Language-OReilly/dp/1565923588
に似ている
app.ScreenUpdates = false //and
app.Calculation = xlCalculationManual
設定することもできます
app.EnableEvents = false //Prevent Excel events
app.Interactive = false //Prevent user clicks and keystrokes
ただし、最初の 2 つほど大きな違いはないようです。
範囲値を配列に設定するのと同様に、列のすべての行に同じ数式を持つほとんどがテーブルであるデータを操作している場合、数式に R1C1 数式表記を使用して、列全体を数式文字列に等しく設定することができます。すべてを 1 回の呼び出しで。
app.ReferenceStyle = xlR1C1
app.ActiveSheet.Columns(2) = "=SUBSTITUTE(C[-1],"foo","bar")"
また、ExcelDNA と .NET を使用して XLL アドインを作成すること (または C の難しい方法) も、UDF を複数のスレッドで実行する唯一の方法です。(Excel DNA の ExcelFunction 属性の IsThreadSafe プロパティを参照してください。)
Excel DNA に完全に移行する前に、.NET で COM 可視ライブラリを作成して VBA プロジェクトで参照することも試しました。大量のテキスト処理は、VBA の Collection の代わりにラップされた .NET List クラスを使用するため、VBA よりも少し高速ですが、Excel DNA の方が優れています。