This post considers several aspects about improving the speed of spreadsheets in both MS Excel 2003 and 2007. It has significant effects on animations in MS Excel.

In this first part, a “stopwatch” macro is described which, when incorporated in any of calculation loop, can measure the frequency your loop is executed.

In this first part of the tutorial the macro was used to estimate the number of single formula calculations (as an array of “rand()” functions) executed per second by small, medium and large spreadsheets benchmarked for both 2003 and 2007 versions of MS Excel.

## About the speed of animated models in MS Excel – part #1

by George Lungu

– This is a presentation about speed benchmarking for Excel workbooks. Though it focuses mostly on

measuring the speed of loop based Excel animated models, some of the principles outlined here can be

applied to any standard Excel worksheet.

### My personal take on MS Excel:

– For my models I prefer to use older versions of Excel (2003), yet I believe I can bring some value to

the “canonic” or “orthodox” Excel users by talking about the factors that affect spreadsheet speed.

– As an engineer I’ve always loathed expensive fashionable software, software controlled by command

line, software that crashes and locks up, software that has no built in graphical display interface,

software that has no real time parameter control during the simulation run (most are like this) and

software that cannot be stopped, saved and restarted later to simulate from the same point (I haven’t

met any that would do that yet).

– I also hate software that enforce a slow learning curve and it has too many options. As a conclusion I

hate almost any software sold as a black box, usually for a hefty price and often for an additional

periodic license fee.

– Besides the all aforementioned drawbacks I see in common packages,

what I hate the most is sluggish software. In my industry (electronics

design) it can take a hours and sometimes a whole week to model a

trivial, Mickey Mouse type of circuit. And this is done on software

costing well into six digits licensing fee per person, per year.

– Excel is nothing more than a glorified abacus or a slide ruler. The

animated and fully interactive models an average Joe can build in Excel

(with a certain personal time effort of course) can fit very particular

needs and avoid all the problems mentioned in the first paragraphs.

– I’ve been using spreadsheets to replace an hour of simulation time with a second of simulation

time, for almost no cost (Excel) and most often with a significant but acceptable drop in precision.

– Creating animated models in Excel allows the average Joe to focus on engineering and science

rather on syntax and this is because 99% or more of any model can be developed using built in

worksheet formulas.

### Benchmarking Excel speed – the stopwatch macro “speed_test_1”:

– The speeds attained in the modern competitive swimming are well over any estimate made

just a few of decades ago.

– This is in because of better coaching helped by two important tools, the stop watch and the

video camera. A swimmer can now measure his performance more precisely and can also see

himself with his own eyes during practice. This is much more efficient in correcting his swimming

technique than listening to coaches alone.

– The first tool we need for improving speed in Excel is a stopwatch.

– Let’s look at the following VBA code =>>>>>

– It is essentially an infinite loop which prints

Dim p As Double

in cell B4 the value of the number of loop

Dim Measurement_Start As Double

iterations per second.

-The VBA time function “Timer” retrieves

Sub speed_test_1()

precisely the number of seconds since midnight.

p = 0

-The variable “Measurement_Start” is initia- Measurement_Start = Timer

lized at the start of the loop and during each Do

[B4] = p / (Timer – Measurement_Start + 0.001)

loop cycle the macro will print in cell [B4]

p = p + 1

the loop iteration speed which is the number

Loop

of loop cycles divided by the time passed since

End Sub

the start of the loop.

– In the formula for cell [B4] I arbitrarily added the 0.001 residue in the denominator in order to

avoid the dreaded division by zero during the first iteration of the macro

### Speed results using the macro “speed_test_1()” – small window:

– We used a completely blank workbook with only two cells filled [A4:B4] and one button (text box)

to which we assigned the “speed_test_1()” macro. We have no formulas yet in the sheet.

– Start the macro by clicking the green button and let it run 30-60 seconds, then stop it by

holding the “Esc” key down (this is an integrative measurement so the longer it runs the more

precise the measurement).

– We did this measurement with a small size window to later show the speed loss associated with

the window size.

Excel 2003: Excel 2007:

Loop speed: 6389 iterations/sec Loop speed: 3762 iterations/sec

### Lets repeat the measurement with the window expanded

– In this case, due to the lack of data there is minimum speed degradation when the window is

maximized.

Excel 2003: Excel 2007:

Loop speed: 6027 iterations/sec Loop speed: 3688 iterations/sec

Lets create an array of formulas within the worksheet:

– In order to test the calculation speed on a large

Sub clear_array()

number of formulas let’s introduce the following two

new macros in Module1. [A10:IV65536].Clear

– The first macro will clear the worksheet of any old End Sub

formulas and the second macro will create a 200 x

5000 array of random number generator formulas

Sub generate_array()

(1000,000 formulas), the result of this array being

[A11:GR5010].Formula = “=rand()”

updated during every cycle of the “speed_test_1()”

End Sub

macro.

– The speed results for calculating an array of 1000,000 numbers using the “rand()” built-in function

is shown below:

Excel 2003 – small window: Excel 2007 – small window:

Loop speed: 8.07 iterations/sec Loop speed: 11.38 iterations/sec

Excel 2003 – large window: Excel 2007 – large window:

Loop speed: 7.71 iterations/sec Loop speed: 9.79 iterations/sec

### How does the speed scale with the number of formulas?

Sub generate_array_1K()

[A10:GR65536].Clear

– In this section, the previous test is being run on both, a reduced size [A11:GR15].Formula = “=rand()”

End Sub

window and a full screen window for the following series of formula sizes:

1000 formulas, 10,000, 100,000, 1000,000 and 10 million formulas.

Sub generate_array_4k()

To the right you can see the various macros used for generating the arrays

[A10:GR65536].Clear

of formulas. [A11:GR30].Formula = “=rand()”

End Sub

Medium

Small worksheets Large worksheets

worksheets

Sub generate_array_10k()

15 [A10:GR65536].Clear

Excel Computation Speed [A11:GR60].Formula = “=rand()”

End Sub

Hardware: Gateway SX2840-01 Sub generate_array_40k()

[A10:GR65536].Clear

Monitor resolution: 1280 x 1024

[A11:GR210].Formula = “=rand()”

End Sub

Sub generate_array_100k()

[A10:GR65536].Clear

2003

[A11:GR510].Formula = “=rand()”

2003 End Sub

Sub generate_array_400k()

[A10:GR65536].Clear

[A11:GR2010].Formula = “=rand()”

End Sub

Sub generate_array_1M()

[A10:GR65536].Clear

[A11:GR5010].Formula = “=rand()”

End Sub

Number of kilo-formulas in the worksheet

Sub generate_array_10M()

[A10:GR65536].Clear

1 10 100 1000 10000

[A11:GR50010].Formula = “=rand()”

End Sub

to be continued …