Еще одна важная вещь, которую вы можете сделать в VBA, - это использовать Option Explicit и по возможности избегать вариантов. В VBA нельзя избежать на 100% вариантов, но они заставляют интерпретатора выполнять больше работы во время выполнения и тратить память.
Эта статья показалась мне очень полезной, когда я начинал с VBA в Excel.
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
хотя они, кажется, не имеют такого большого значения, как первые два.
Аналогично установке значений Range для массивов, если вы работаете с данными, которые в большинстве случаев представляют собой таблицы с одинаковой формулой в каждой строке столбца, вы можете использовать формулу R1C1 для своей формулы и установить весь столбец, равный формуле Строка, чтобы установить все это в одном вызове.
app.ReferenceStyle = xlR1C1
app.ActiveSheet.Columns(2) = "=SUBSTITUTE(C[-1],"foo","bar")"
Кроме того, создание надстроек XLL с использованием ExcelDNA & .NET (или сложного способа в C) также является единственным способом заставить UDF работать в нескольких потоках. (См. Свойство IsThreadSafe атрибута ExcelFunction в ДНК ДНК.)
Прежде чем полностью перейти на Excel ДНК, я также экспериментировал с созданием видимых COM-библиотек в .NET для использования в проектах VBA. Обработка тяжелого текста в этом случае немного быстрее, чем в VBA, так как вместо коллекции VBA используются обернутые классы .NET List, но Excel ДНК лучше.