We open very large excel documents over the network that take between 7 - 10 minutes to calculate formulas or save the document on average. I wouldnt think that updating the formulas would have anything to due with the network since its working in a temp file; however, I could be wrong. When the document opens with automatic calculation the document takes a while to load, if it has manual calculation opens right away. The desktop we're opening them on runs Windows 7 Professional with 8GB of memory with an Intel Core 2 duo E8500 3.17 GHz processor. The network is a 1Gb connection at the serve and a 100Mbps connection on the client so I'm assuming there is a small switch somewhere between. Our first solution was to run the doucments straight off the server; however, it seems to run slower. The server only has 2GB of memory and has a Intel Xeon E5310 1.60 GHz processor. The spreadsheets are about 20MB in size. We need to get these sheets running faster as they run our business. Any ideas would be greatly appreciated.
Do the documents open/calculate faster from locally-saved copies? This would at least help determine if the network is an issue.
If there is no difference, you'll want to consider replacing any formulas that return record-dependent (i.e., un-changing) values into the actual values instead. If you have unused columns with repetitive or blank data, remove those.
aikimark
Do you have settings that cause workbooks to automatically calculate on open or on save?
If you do have user-defined functions, please post that code. We might spot some performance bottlenecks and suggest alternatives.
TechGuy_007
ASKER
The user says that the OFFSET function seems to be causing some of the issue.
There are hundreds if not thousands of macros they use. It is a financial company. No large/complex calculations are occurring.
The file does seem to operate a bit faster when opened locally. Strangely enough, the CPU usage while "Calculating" is around 50%. On the server, all 4 cores are at 100%
can the formulas be rewritten to not use the Offset() function?
Rob Henson
A very general tip for improving performance. When Excel recalculates it works from top left to bottom right, therefore it is best to structure your spreadsheet such that calculations won't have to be done repeatedly.
For example, if a formula in B2 relies on the value of Z26 it will calculate B2 based on the current value of Z26 and then when it gets to Z26 and that changes, the value of B2 will have to be recalculated; effectively starting the process over.
Thanks
Rob H
Rob Brockett
hi,
There isn't much detail of the actual file design but, since any ideas are appreciated, I'll throw a few into the pot for use or consideration against a copy of the file:
- If you are using excel 2007 or newer, try saving the file using the "xlsb file format". It is a binary format & may cause quite a reduction file size.
- Change any formulae that contain full column references (eg "A:A") so that the formulae either refer to dynamic named ranges or Table range references. These ranges can be limited to the number of used rows within the file.
- Is there any setup code (other than UDF's, mentioned by Aikimark) that runs via AutoOpen or WorkbookOpen Event macros (please post it)?
- See Charles Williams' excellent website for lots of suggestions for optimising speed: http://www.decisionmodels.com/optspeed.htm
- To add to Aikimark's suggestion about removing Offset, an alternative approach to Offset is the use of Index:Index & Match.
- If vlookups are used, they could potentially be changed to Index/Match formulae: http://exceluser.com/formulas/why-index-match-is-better-than-vlookup.htm
- Remove as many volatile functions (eg Today(), Now(), Offset(...) etc) as possible & put repeatedly used functions into a single cell, which is then referenced by other formulae.
If there is no difference, you'll want to consider replacing any formulas that return record-dependent (i.e., un-changing) values into the actual values instead. If you have unused columns with repetitive or blank data, remove those.