When you often have to add extra rows or columns
of data to your spreadsheets, you need to find a way of having
your Excel formulae automatically refer to the new data area.
You can do this by using a large range in your formulae that
extends well beyond your current data boundaries, for instance
by referring to a whole column. However this causes very inefficient
calculation.
The solution is to use Dynamic Named Ranges. By using the OFFSET
and COUNTA functions in the definition of a named range, the
area that the named range refers to can be made to dynamically
expand and contract. For example create a defined name as:
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
When you use the dynamic range name in a formula it automatically
expands to include new entries.
The benefit of this (apart from the fact that you dont
have to change all your formulae) is that Excel then only has
to calculate using exactly the right number of rows and columns.
However there is a performance hit if you use a lot of Dynamic
Ranges.
The main performance hit is because OFFSET is a volatile function
and therefore is always recalculated, and because the COUNTA
function inside the OFFSET has to look at a large number of
rows. You can minimise this performance hit by storing the COUNTA
part of the formula in a separate cell, and then referring to
the cell in the dynamic range:
Counts!z1=COUNTA(Sheet1!$A:$A)
DynamicRange=OFFSET(Sheet1!$A$1,0,0,Counts!$Z$1,1)
You can also use functions like INDIRECT to construct dynamic
ranges.
The FastExcel sample problem
makes extensive use of dynamic range names, and also shows how
to optimise them. It also contains two versions of the optimised
workbook, one with dynamic names, and one without.
FastExcel Version 4 has a Dynamic Range Wizard that makes it
easy to create dynamic range names, and a several new counting
functions that overcome the limitations of the COUNTA function.
For further explanation of Dynamic Ranges see:
|