<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://excelusergroup.org/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Dermot&amp;#39;s Blog</title><subtitle type="html" /><id>http://excelusergroup.org/blogs/dermot/atom.aspx</id><link rel="alternate" type="text/html" href="http://excelusergroup.org/blogs/dermot/default.aspx" /><link rel="self" type="application/atom+xml" href="http://excelusergroup.org/blogs/dermot/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2008-01-12T03:10:00Z</updated><entry><title>Safer business spreadsheets - a practical approach that works</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/02/11/safer-business-spreadsheets-a-practical-approach-that-works.aspx" /><id>/blogs/dermot/archive/2008/02/11/safer-business-spreadsheets-a-practical-approach-that-works.aspx</id><published>2008-02-11T08:17:00Z</published><updated>2008-02-11T08:17:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If, like me, you&amp;#39;ve worked in organisations where the quality of
many spreadsheets is terrible, you&amp;#39;ll want to make them safer to reduce
business risk caused by errors or misuse.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I believe there is a practical and simple&amp;nbsp;approach which can greatly
reduce risk&amp;nbsp;- an approach that is much more human than technical -
which&amp;nbsp;came out of&amp;nbsp;research carried out within my previous consulting
firm a few years ago, to improve its own spreadsheets. &lt;/p&gt;
&lt;p&gt;I&amp;#39;d like to stress that this approach is aimed at ordinary business users, and &lt;u&gt;not&lt;/u&gt; professional Excel developers, whose needs can be completely different.&lt;/p&gt;
&lt;p&gt;But before laying it out for you,&amp;nbsp;I need to share some of the
research findings, because they are important. I&amp;#39;ve tried to include
references where I can, but I can&amp;#39;t remember where everything came
from. This post is a bit long, but it&amp;#39;s an important subject.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Understanding errors&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;1. Everyone makes mistakes&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;There is some spreadsheet-specific research. Ray Panko has spent many years&amp;nbsp;working on &lt;a href="http://panko.shidler.hawaii.edu/SSR/index.htm" target="_blank"&gt;spreadsheet errors&lt;/a&gt;, and the &lt;a href="http://www.eusprig.org/" target="_blank"&gt;EUSPRIG&lt;/a&gt;&amp;nbsp;group
has put a lot of effort into how errors occur, and how to prevent them.
There has also been a lot of work published&amp;nbsp;on errors in general
computer programming, testing programs, etc.&lt;/p&gt;
&lt;p&gt;This research shows that everyone makes mistakes, at about the rate
of 2-5%, whether they are experts or beginners. I&amp;#39;ll say that again - &lt;i&gt;&lt;b&gt;everyone&lt;/b&gt; makes mistakes&lt;/i&gt;. &lt;/p&gt;
&lt;p&gt;What this means in a professional business organisation is that&amp;nbsp;no
work can be trusted, so it all needs to be properly checked. This
sounds obvious, but it is absolutely crucial to the approach
suggested&amp;nbsp;below, because checking is too often given a low priority in
time and effort. &lt;/p&gt;
&lt;p&gt;As one illustration of how bad&amp;nbsp;checking is in practice, &lt;a href="http://www.actuaries.asn.au/IAA/upload/public/fsfpaper2004-jasminandlee.pdf" class=""&gt;here&lt;/a&gt;
is a paper on project finance models - you know, for projects like
airports and tollways for millions of dollars - spreadsheets that need
to be right. Look at&amp;nbsp;the last page&amp;nbsp;for the error rates on a number of
actual models - it&amp;#39;s scary.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;2. Checking is hard&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;While some errors, like linking to the wrong cell, are relatively
common, research has shown that there is a very wide variety of errors
in Excel. I think this is&amp;nbsp;the flipside of Excel&amp;#39;s flexibility - just as
there are many ways to build a spreadsheet, there are many, many ways
to go wrong somewhere. What this means for business is that a standard
set of checking rules is not going to cover all the bases.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s worse to come. General research on programming errors&amp;nbsp;shows
that checking your own work is ineffective, and even checking by
colleagues only picks up about 80% of errors. When I read this, I
wondered why we didn&amp;#39;t see more disasters in business spreadsheets, and
I decided it was probably that most users use common sense to tell them
when a spreadsheet gives crazy answers, and this is our main
protection. Where we are most at risk is with a spreadsheet which is so
complex that we can&amp;#39;t estimate the right answer, and so we don&amp;#39;t know
if it looks wrong.&lt;/p&gt;
&lt;p&gt;So, we all make mistakes, Excel gives us many ways to make them, and
it&amp;#39;s hard to find them all&amp;nbsp;through checking. That&amp;#39;s not an encouraging
start.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The user&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It doesn&amp;#39;t get any better when we look at typical
users. It may be different&amp;nbsp;for you, but I see new graduates starting
work with very poor spreadsheet skills. They are taught the basics
(enough to do&amp;nbsp;the&amp;nbsp;work due today, anyway) by the person who was in
their job before them, rather than by a senior person with experience
and understanding of risk control. To me, this is like getting 18 year
olds to teach 17 year olds to drive - do that for a few years and see
what you get. &lt;/p&gt;
&lt;p&gt;I also remember seeing research that showed that
spreadsheet users typically over estimated their skills. It&amp;#39;s no wonder
we have problems.&lt;/p&gt;
&lt;p&gt;This happens even in highly professional firms with
excellent training programs. I suspect it&amp;#39;s partly because many senior
managers&amp;nbsp;can&amp;#39;t mentor youngsters because they never had the opportunity
to develop strong spreadsheet skills themselves; partly because
training programs focus on technical skills and not risk control; and
also because spreadsheet issues fall between two stools - managers
think they are an IT problem, and IT thinks they are a problem for the
business units.&lt;/p&gt;
&lt;p&gt;So on top of the difficulties in preventing errors,
we often have relatively untrained and over confident users, often
working without much guidance. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;A practical approach to risk control&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;So what can we do to improve quality and reduce risk, given these formidable obstacles? &lt;/p&gt;
&lt;p&gt;When&amp;nbsp;we started researching, I expected that quality
would correlate strongly with high skill levels and discipline, ie that
it had a strong technical bias. Expert programmers would produce the
best stuff, so what we need most is lots of technical training. Oh, and
quite strong controls to keep people in line.&lt;/p&gt;
&lt;p&gt;I was very wrong.&lt;/p&gt;
&lt;p&gt;Instead,&amp;nbsp;we found that quality came from
understanding the truism that spreadsheets don&amp;#39;t make mistakes - humans
do - and that minimising the opportunity to make mistakes is the most
effective way to reduce error. Think of how we try to prevent road
accidents. Yes, we train and license drivers to give them technical
skills, but skills are not enough. We also provide a number of tools
and guides to make driving safer - cats eyes, road signs, traffic
lights, speed limits, enforcement and penalties, etc. The authorities
also try to change our attitude with ads and publicity campaigns, to
prevent us taking risks like speeding and drinking.&lt;/p&gt;
&lt;p&gt;In a similar way, spreadsheet users need more than just&amp;nbsp;technical
skills.&amp;nbsp;Of course, this is widely recognised, and we discovered several
good practice guides which&amp;nbsp;provided lists of things to do (or not to
do), but lists are...well, lists. It&amp;#39;s hard to really put a list into
practice, even if you memorise it or hang it on your wall. We needed
something that our users could &amp;quot;get&amp;quot; more intuitively,&amp;nbsp;to help them
know what was good and what was bad.&lt;/p&gt;
&lt;p&gt;For us, a big clue came from reading&amp;nbsp;the advice of various well
known professional software developers, who singled out complexity as
the biggest enemy of good code.&amp;nbsp;We thought about this. Clearly,
checking is easier if the spreadsheet is simpler.&lt;/p&gt;
&lt;p&gt;And then we thought about checking again, and we&amp;nbsp;had the
crucial&amp;nbsp;insight&amp;nbsp;that in business you don&amp;#39;t build spreadsheets for
yourself - &lt;i&gt;you build them for&lt;/i&gt;&amp;nbsp;&lt;i&gt;other people&lt;/i&gt; - the checker, and&amp;nbsp;other users. These other people are critical, because&amp;nbsp;the real business&amp;nbsp;risk is&amp;nbsp;that&amp;nbsp;&lt;u&gt;they&lt;/u&gt; may miss an error or abuse the spreadsheet.&lt;/p&gt;
&lt;p&gt;And&amp;nbsp;so&amp;nbsp;we found a single objective that - for us -&amp;nbsp;brought everything together.&amp;nbsp;And here it is: &lt;br /&gt;&lt;font color="blue"&gt;&lt;b&gt;Spreadsheets should be&amp;nbsp;easy to check, and safe to use&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;&lt;font color="blue"&gt;Easy to check&lt;/font&gt;&amp;quot; means anything that helps
the checker to&amp;nbsp;understand the design, check the factual details, follow
the logic of the more complex parts of the spreadsheet, etc. Examples
include&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;laying out the spreadsheet clearly, logically&amp;nbsp;and simply&lt;/li&gt;&lt;li&gt;using&amp;nbsp;a sensible and mutually agreed colour&amp;nbsp;scheme&amp;nbsp;to highlight key parts&lt;/li&gt;&lt;li&gt;being consistent, eg in the choice of functions, or in sheet
layout, to make the spreadsheet feel familiar to the checker. Teams
often develop their own accepted ways of doing things, and even if
there may sometimes be a better approach, this consistency makes things
easier&lt;/li&gt;&lt;li&gt;including explanations in cell notes, textboxes, etc&lt;/li&gt;&lt;li&gt;pasting in extracts of other documents, or hyperlinks, to&amp;nbsp;make it easy for&amp;nbsp;the checker to confirm things&lt;/li&gt;&lt;li&gt;anticipating what the checker will need and providing it as far as
possible&amp;nbsp;- eg if you have struggled to build a difficult part of the
spreadsheet, the checker will probably also struggle with it, so it is
worth spending a little time thinking about how to make it easier&lt;/li&gt;&lt;li&gt;not being &amp;quot;clever&amp;quot;&amp;nbsp;-&amp;nbsp;eg where you have put together an ingenious
but&amp;nbsp;complex long formula in a cell, with about 10 functions, it might
be much better to break it into several different cells with a clear
explanation of each part&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;What I find interesting is how many of these guidelines are about
people rather than about spreadsheets, and&amp;nbsp;they could be summarised as
&amp;quot;don&amp;#39;t make the checker think&amp;quot;&amp;nbsp;about things that are not central to
checking,&amp;nbsp;such as&amp;nbsp;that obscure function you used, or&amp;nbsp;your weird
formatting. It&amp;#39;s crucial&amp;nbsp;for&amp;nbsp;the checker&amp;nbsp;to focus fully on what matters.&lt;/p&gt;
&lt;p&gt;&amp;quot;&lt;font color="blue"&gt;Safe to use&lt;/font&gt;&amp;quot; means protecting the spreadsheet user from error. This includes things like&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;data validation to check for invalid or&amp;nbsp;strange inputs&lt;/li&gt;&lt;li&gt;VERY&amp;nbsp;clear labelling throughout&lt;/li&gt;&lt;li&gt;removal of any ambiguities&lt;/li&gt;&lt;li&gt;anomaly and/or reasonableness&amp;nbsp;checks to highlight unusual results&lt;/li&gt;&lt;li&gt;protection of key formulae where applicable&lt;/li&gt;&lt;li&gt;including identifying information such as dates or version numbers on results sheets that may be printed&lt;/li&gt;&lt;li&gt;anticipation of&amp;nbsp;ongoing maintenance - eg if you have tables of data
that may need to be extended, think about how this can be done and put
a note in the spreadsheet, or&amp;nbsp;even better, leave some room for new
data. Maintenance can also mean changing formulae, so if you&amp;#39;ve had to
use more than one formula in a column, mark it clearly so that nobody
will change the top cell and&amp;nbsp;mistakenly copy down all the rows&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;(Please note that all of this does &lt;b&gt;&lt;u&gt;not&lt;/u&gt;&lt;/b&gt; mean dumbing everything down to a beginner level - it means simplifying and clarifying to
the level that makes life easy for &lt;u&gt;your&lt;/u&gt; particular checkers). &lt;/p&gt;
&lt;p&gt;Once you have a simple goal like the one above, you
can revisit the various lists of good practices and weigh them up - do
they make things &lt;i&gt;easier &lt;/i&gt;or &lt;i&gt;safer&lt;/i&gt;? They are no longer mantras to be followed blindly, but sensible suggestions which&amp;nbsp;you can weigh, and accept or reject. I&amp;#39;m
not going to try to give you my own best practices &amp;quot;list&amp;quot;, because it
is specific to my business needs, and I think it is best for each team
to develop its own guidelines, with individuals feeling involved and
actively participating. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;User attitudes&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I believe the most important attitude change here is for users to
realise that they are building the spreadsheet for someone else,&amp;nbsp;and
that needs to be constantly in their mind. &lt;/p&gt;
&lt;p&gt;Back in the days when we thought the answer lay in imposing
guidelines, I once had a young user say &amp;quot;The guidelines&amp;nbsp;take all the
enjoyment out of my work. Excel was the one&amp;nbsp;place where I could express
myself at work&amp;quot;. To me, that reaction says two things about users (and
especially inexperienced users)&lt;br /&gt;
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;users need guidance, because spreadsheets are not artistic
creations where you can experiment with colours, layouts, exotic
functions and show off how clever you are&amp;nbsp;- they are business tools
which need to give the right answer. Period. &lt;/li&gt;&lt;li&gt;users need to feel challenged and involved, rather than just told
to follow orders, otherwise they are going to fight you all the way.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Does it work?&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I had a taste of the results even before we did this research. I was
working with an office in another city,&amp;nbsp;and we found we had to document
and comment&amp;nbsp;our emailed spreadsheets more fully because we couldn&amp;#39;t
explain them in person. Even that one step on its own made a big
difference to quality, and what impressed me was how quickly the
younger users came on board and did really good documentation and
suggested better ideas. So that was a good sign.&lt;/p&gt;
&lt;p&gt;Since we did the research a few years ago, I&amp;#39;ve eaten my own dog
food, applying the &amp;quot;easy to check and safe to use&amp;quot; approach to
everything I do, and spreading the message to younger users. To my
surprise, I find it has &lt;i&gt;&lt;u&gt;increased&lt;/u&gt;&lt;/i&gt; my own enjoyment&amp;nbsp;in
building spreadsheets, because it gives me a&amp;nbsp;constant challenge to keep
making things simpler, more checkable, and clearer. It&amp;#39;s also made my
own work much, much safer. &lt;/p&gt;
&lt;p&gt;I&amp;#39;ve&amp;nbsp;found young users to be very receptive, because the goal
doesn&amp;#39;t necessarily mean dull boring spreadsheets, but&amp;nbsp;involves colours
and design and user needs and other non-technical issues, and when they
see all the design choices open to them, and they have a clear purpose,
they find it stimulating and challenging. As I said above, I&amp;nbsp;think the
key to gaining user acceptance&amp;nbsp;is changing it from an instruction into
a challenge, which is to keep finding better ways to make checkable and
safe spreadsheets. We all love challenges...&lt;/p&gt;
&lt;p&gt;I also like that when I sit down with younger users and review their
spreadsheets, I never have to say &amp;quot;I know better than you&amp;quot;. Instead, I
put our goal on the whiteboard, and I remind them that everything we do
is aimed at meeting it. I find&amp;nbsp;I can discuss different options freely
without intimidating them, and they&amp;nbsp;can often improve on my suggestions.&lt;/p&gt;
&lt;p&gt;Another advantage of a simple goal is that it can be understood by
people at all levels, even managers with little spreadsheet knowledge.
We may not all know how to build a good spreadsheet, but we should know
a bad one when we see it. Managers are important because the goal needs
to become part of a team&amp;#39;s way of doing things (what some call
&amp;quot;culture&amp;quot;), so that people are actively rewarded and singled out when
they do something that promotes safety or checkability, and so that
people know where management&amp;#39;s priorities lie. &lt;/p&gt;
&lt;p&gt;What about skills training? We found it was still important, but it
was no longer necessary to&amp;nbsp;aim for very high levels of expertise for
everyone. What matters is that everyone has sufficient skills for the
job, and given the aim of simplicity, the barrier is not excessively
high. It also matters that the whole team uses the same techniques as
far as possible, for consistency, and this needs to be embedded in the
training, as well as the realisation that you don&amp;#39;t build spreadsheets
for yourself, but for other people, so you need to understand their
limits and their expectations.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Finally..&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I found this research fascinating, because it opened up a new way of
looking at spreadsheet quality&amp;nbsp;- a surprisingly human approach for such
a technical tool. &lt;/p&gt;
&lt;p&gt;And on a personal note, I found it gave me a new and different
enthusiasm. Whereas before, I was always trying to do new &amp;quot;clever&amp;quot;
things with Excel, now I try to find simpler and safer ways to do
things, which is equally challenging. &lt;/p&gt;
&lt;p&gt;For example, I used to write a lot of VBA code, but now I have a
rule that business rules and logic (eg industry specific pricing
formulae or financial projections) don&amp;#39;t go in code, because it is a
black box which few people can check. I reserve code for automation and
generic utility functions,and the rest has to go in the spreadsheet -
and stay simple. This has not been easy in some cases, but it has been
a lot of fun. And the quality is definitely better.&lt;/p&gt;
&lt;p&gt;I&amp;#39;d be interested in hearing from anyone who has similar or
different experiences in improving spreadsheet quality in a business
environment. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=876" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>More advanced Excel automation &amp; simplification</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/28/more-advanced-excel-automation-amp-simplification.aspx" /><id>/blogs/dermot/archive/2008/01/28/more-advanced-excel-automation-amp-simplification.aspx</id><published>2008-01-28T13:26:00Z</published><updated>2008-01-28T13:26:00Z</updated><content type="html">&lt;p&gt;In a previous &lt;a href="http://excelusergroup.org/blogs/dermot/archive/2008/01/22/an-awesome-powertool-buried-in-excel.aspx" class="" target="_blank"&gt;post&lt;/a&gt;,
I showed a way of automating and/or simplifying Excel&amp;nbsp;by processing
many data records through a single sheet using data tables, rather like
a merge.&amp;nbsp;If you liked that, you should love this&amp;nbsp;more advanced tool,
written in VBA. &lt;/p&gt;
&lt;p&gt;It&amp;nbsp;is generic enough to be used on a wide range of projects without
modification, so I&amp;#39;ll call it an automation &amp;quot;engine&amp;quot; below. If you find
it useful, it is free to use and modify, providing you don&amp;#39;t claim
undue credit or sell it. &lt;/p&gt;
&lt;p&gt;It&amp;nbsp;was built&amp;nbsp;to power an actuarial valuation system which can be
extremely complex, because each client implementation is unique and has
to be configured separately. The complexity and non-standard
configurations make checking very difficult, so this has been a good
test of the software. &lt;/p&gt;
&lt;p&gt;Importantly, the engine allows every single formula to be laid out
clearly and simply on worksheets, and checked step by step at every
level, from the lowest level to the highest. So if you want, you can
see all the calculations for product X, in a specific future year Y,
laid out in detail across a whole sheet. It also means non-experts can
configure the system entirely in worksheets, because the engine only
provides automation and doesn&amp;#39;t contain any business logic or client
details.&lt;/p&gt;
&lt;p&gt;The engine also allows us to&amp;nbsp;nest as many calculation loops as we
like, eg we can run 6 scenarios, each involving processing 1,000
products, each of which requires 15 future years of calculations, each
of which requires several calculations - all by pressing one button.&lt;/p&gt;
&lt;p&gt;All of this made our system simpler, much safer, more accessible and
highly flexible, which is exactly what we needed. The only downside is
that it isn&amp;#39;t as fast as a pure VBA program, but it&amp;#39;s still fast enough
for us, and a small price to pay.&lt;/p&gt;&lt;b&gt;How it works&lt;/b&gt; 
&lt;p&gt;I&amp;#39;m going to pitch&amp;nbsp;this explanation at the level of experienced
business spreadsheet users who, like myself,&amp;nbsp;work with nasty
spreadsheets and who&amp;nbsp;are motivated to&amp;nbsp;automate or simplify them.
The&amp;nbsp;section below introduces the engine, then I have a workbook which
explores its features step by step.&lt;/p&gt;
&lt;p&gt;The engine is like a souped up data table. It&amp;nbsp;puts a sequence of
numbers in a cell (ie 1, 2, 3,..), calculates, and stores results
chosen by the user. However, it&amp;nbsp;can nest calculation loops, so that&amp;nbsp;for
example, each time sheet A calculates, sheet B will calculate&amp;nbsp;Y times,
and each time sheet B calculates, sheet C calculates&amp;nbsp;Z times. This
means that sheet C will calculate&amp;nbsp;Y x Z&amp;nbsp;times as often as sheet A. If
you are familiar with programming, we are talking about nested
For...Next loops and subroutines, within worksheets, which is something
I&amp;#39;ve always wanted in Excel.&lt;/p&gt;
&lt;p&gt;Each calculation loop requires its own&amp;nbsp;worksheet,
which has special range names that tell&amp;nbsp;the engine&amp;nbsp;what to do on that
sheet. For example, there are range names that tell the engine&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
&lt;div&gt;how many times to loop through this sheet (can be a formula)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;
&lt;div&gt;the name of the child sheet, if any, which should
be run every time this sheet runs (that child sheet will then have its
own fields which tell it how many times to run, etc) - this is how the
loops are nested&lt;/div&gt;&lt;/li&gt;&lt;li&gt;
&lt;div&gt;what results to store &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;and more. It can also keep running totals of results, and copy hardcoded results to separate sheets.&lt;/p&gt;
&lt;p&gt;The code engine comes with a worksheet template with
about 10&amp;nbsp;named&amp;nbsp;cells which are all you need to configure your system.
You should not have to touch or even look at the code.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s hard to explain it in much more detail without looking at it, so I suggest you do that now. I&amp;#39;ve provided 3 files&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;explanation of the features with several examples using a simple financial model (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Engine%20Demo.xls"&gt;Engine Demo.xls&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;a non-financial example showing how to solve a word puzzle game (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/WordPuzzle.zip"&gt;WordPuzzle.zip&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;the template for your own use (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Template.xls"&gt;Template.xls&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The documentation is not as complete as I&amp;#39;d like, but&amp;nbsp;please bear in
mind this is all done in my spare time. Comments and suggestions are
welcome.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=660" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>An awesome powertool buried in Excel</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/22/an-awesome-powertool-buried-in-excel.aspx" /><id>/blogs/dermot/archive/2008/01/22/an-awesome-powertool-buried-in-excel.aspx</id><published>2008-01-22T03:19:00Z</published><updated>2008-01-22T03:19:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I build complex spreadsheets, and I often have trouble fitting everything into Excel tables - I&amp;#39;d really like a way of &lt;font color="blue"&gt;simplifying&lt;/font&gt; things.&amp;nbsp;At other times, I want to run a set of different scenarios through a spreadsheet, and I&amp;#39;d like to &lt;font color="blue"&gt;automate&lt;/font&gt;&amp;nbsp;them&amp;nbsp;to be&amp;nbsp;self-updating.&lt;/p&gt;
&lt;p&gt;There is a code-free solution to both these
problems&amp;nbsp;which has been there all along, but I didn&amp;#39;t see it until a
few years ago. It exploits data tables, an almost forgotten&amp;nbsp;feature of
Excel. &lt;/p&gt;
&lt;p&gt;If you have the same problems as me, or if you
simply want to learn new techniques, please read on. This has become
one of my most important tools, so&amp;nbsp;I&amp;#39;m going to take a little time and
space to explain, and of course I have a demo for you.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Data tables - in brief&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Data tables offer basic automation. Suppose we have
a simple calculator, and we want to test the effect of different
interest rates.&amp;nbsp;We set up a data table, giving it&amp;nbsp;our list of different
rates,&amp;nbsp;the cell we want Excel to put them into, and the results we want
to store.&amp;nbsp;Excel puts the rates&amp;nbsp;into the&amp;nbsp;interest rate&amp;nbsp;cell one at a
time, calculates the results, and&amp;nbsp;copies them&amp;nbsp;into a table with one row
for each rate.&amp;nbsp;Importantly, data tables recalculate every time Excel
calculates, so you don&amp;#39;t need to do this manually. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Automating&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Data tables could be great for automating scenarios,
except they may have 10-20 variables, not just one. If we could get the
data table to update more than one variable, it could be very useful. &lt;/p&gt;
&lt;p&gt;And there is a simple way.&lt;/p&gt;
&lt;p&gt;We&amp;nbsp;put all our scenario variables in a table, with one row per scenario, and one column per variable, like so. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://excelusergroup.org/blogs/dermot/DataTables1.PNG"&gt;&lt;img src="http://excelusergroup.org/blogs/dermot/DataTables1.PNG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;&lt;font color="blue"&gt;scenario selector&lt;/font&gt;&amp;nbsp;cell
in our calculation section tells us which row to use in the
scenario&amp;nbsp;table, ie it can be 1, 2, 3,&amp;nbsp; up to the number of scenarios.
We can use the OFFSET command to read in each variable from the correct
row in&amp;nbsp;its column - you can see the formulae in blue next to the green
cells above. &lt;/p&gt;
&lt;p&gt;What this means is that we can change all the
scenario variables - as many as we like -&amp;nbsp;by changing&amp;nbsp;just one
(scenario&amp;nbsp;selector) cell -&amp;nbsp;so now we can use a data table to&amp;nbsp;run
through all the scenarios by putting 1, 2, 3... in the scenario cell,
calculating, and pulling out the chosen results.&lt;/p&gt;
&lt;p&gt;If this explanation isn&amp;#39;t clear, see the demo workbook&amp;nbsp;below.&lt;/p&gt;
&lt;p&gt;But there&amp;#39;s an even better use for data tables.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Simplifying complex spreadsheets using by calculating &amp;#39;one at a time&amp;#39;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A big limitation of Excel is that it only offers
2-way row/column&amp;nbsp;tables. I might have 1,000&amp;nbsp;product records, and for
each product, I need to forecast 10 years of revenue, and each year&amp;#39;s
figures require 15 different calculations. What I really need is a 1000
x 10 x 15 table, ie a 3-way or even 4-way table.&lt;/p&gt;
&lt;p&gt;Usually, people try to cram everything into the same
rows as the data records,&amp;nbsp;eg a table of 1,000 rows&amp;nbsp;x many columns,
which can get very messy. &lt;/p&gt;
&lt;p&gt;However, data tables give us a neat way to add a
third dimension.&amp;nbsp;I&amp;#39;ll illustrate with my example above. Suppose I set
up a sheet which does the calculations for just &lt;u&gt;one&lt;/u&gt; product. I can quite easily&amp;nbsp;lay out my 10 years of 15 calculations each, in a table.&lt;/p&gt;
&lt;p&gt;I put a record selector cell at the top. I use this
cell to read in all the data for the selected product, using the OFFSET
command as already illustrated above. So now I can calculate any
product simply by putting its row number in the selector cell.&lt;/p&gt;
&lt;p&gt;Then I use a data table to automatically run all
the&amp;nbsp;row numbers&amp;nbsp;one by one&amp;nbsp;through this cell, in a similar way to the
scenarios above, storing the results, one row per product,&amp;nbsp;on another
sheet. (I call this - not very imaginatively - calculating &amp;#39;one at a
time&amp;#39;). Not only is it much, much simpler to understand and check, but
it is also safer, in that &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
&lt;div&gt;I have a whole sheet to do the calculations for a data record, rather than one row&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;
&lt;div&gt;the same single&amp;nbsp;set of calculation cells is used
for every data record - there is no need to copy formulae down all the
data rows and maybe get them wrong&lt;/div&gt;&lt;/li&gt;&lt;li&gt;
&lt;div&gt;the data, calculations and results can all be on
different sheets, avoiding the problems that happen when they are
mingled together&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Effectively we&amp;#39;ve added an extra dimension to Excel
by giving&amp;nbsp;ourselves a whole sheet to do each product calculation,
rather than a single row.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;If you&amp;#39;ve read this far..&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;..try the demos here (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Data%20Tables.xls"&gt;&lt;font color="blue"&gt;Data Tables.xls&lt;/font&gt;&lt;/a&gt;). You may think it&amp;#39;s only a toy, so I built a full size example here (&lt;a href="http://excelusergroup.org/blogs/dermot/Data%20Tables%20In%20Use.xls"&gt;&lt;font color="blue"&gt;Data Tables In Use.xls&lt;/font&gt;&lt;/a&gt;), which has a couple of useful tips.&lt;/p&gt;
&lt;p&gt;Is this worth exploring?&amp;nbsp;All I can say is that I&amp;#39;m
an actuary who does financial projections and who lives&amp;nbsp;in Excel all
day long. The technique above has made a huge difference to my work,
making&amp;nbsp;it simpler, safer and allowing me to build much more powerful
models.&amp;nbsp;I thoroughly recommend it as an essential tool for professional
modelling in Excel.&lt;/p&gt;
&lt;p&gt;Finally, VBA code can do the same as data
tables,&amp;nbsp;but more efficiently and with extra features, so you can build
even more amazing models, but that&amp;#39;s for another post.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=482" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>Dynamic user interfaces</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/19/dynamic-user-interfaces-2.aspx" /><id>/blogs/dermot/archive/2008/01/19/dynamic-user-interfaces-2.aspx</id><published>2008-01-19T10:32:00Z</published><updated>2008-01-19T10:32:00Z</updated><content type="html">&lt;p&gt;When I present spreadsheet results to clients, there are always several variables that I know the clients will want to play with (&amp;quot;What if this was higher, or if that was lower, or if I could see just those 3 items...&amp;quot;). This means I need to give the client choices and options, but I need to make them simple to use and have the model respond immediately.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;I&amp;#39;ve put together a collection of some techniques which you may find useful for this. Specifically, how to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;make charts or lists dynamically adjust to the amount of data provided&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;allow users to choose how many items to show, how to sort them, even which items to show (from a list), all without any code&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;make multi-select listboxes work (this requires a little code, which I&amp;nbsp;have written&amp;nbsp;for you)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Please have a look at the workbook here (&lt;a href="http://excelusergroup.org/blogs/dermot/Dynamic%20User%20Selection.xls"&gt;Dynamic User Selection.xls&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;&lt;em&gt;For the people who are wary of any workbook containing code,&amp;nbsp;I will declare in advance&amp;nbsp;that it contains two code modules, one containing the listbox code, and another to&amp;nbsp;copy the listbox code to your own workbook, when you press a button in the workbook -&amp;nbsp;this is for people with no VBA experience&amp;nbsp;who would&amp;nbsp;find it difficult&amp;nbsp;to&amp;nbsp;copy the code manually.&lt;/em&gt; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Comments, suggestions and improvements are welcome.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=438" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>A little library of gems for VBA</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/18/a-little-library-of-gems-for-vba.aspx" /><id>/blogs/dermot/archive/2008/01/18/a-little-library-of-gems-for-vba.aspx</id><published>2008-01-17T22:07:00Z</published><updated>2008-01-17T22:07:00Z</updated><content type="html">&lt;p&gt;Did you know that VBA can get the user&amp;#39;s login name, tell you where My Documents lives (and other folders), talk to the Windows registry, handle regular expressions (eg search for words of 5-8 characters starting with G), create file shortcuts, and more?&lt;/p&gt;
&lt;p&gt;Nor did I, until I read a forum post showing how to use regular expressions in Excel, by setting a reference to the Microsoft Scripting Runtime in VBA (Tools, References from the menu). I was intrigued, and I had a look at what else this Scripting library could do. I was amazed by the range of functions it provides, including those above. You can of course use the Windows API to do most of them (although creating file shortcuts is notoriously difficult), but the Scripting library just makes them so easy. It also has some database functions.&lt;/p&gt;
&lt;p&gt;I created a demo workbook (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Scripting.xls"&gt;Scripting.xls&lt;/a&gt;) to demonstrate. There is no user interface, just go straight to the code (I suggest you start with the TEST_CODE module).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;PS If you don&amp;#39;t know any VBA, and if you desperately want any of these functions, let me know and I&amp;#39;ll help you use them.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=387" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>How to build an awesome user interface for results</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/16/how-to-build-an-awesome-user-interface-for-results.aspx" /><id>/blogs/dermot/archive/2008/01/16/how-to-build-an-awesome-user-interface-for-results.aspx</id><published>2008-01-16T03:10:00Z</published><updated>2008-01-16T03:10:00Z</updated><content type="html">&lt;p&gt;The best work in the world is undervalued if presented badly. &lt;/p&gt;&lt;p&gt;Suppose you&amp;#39;ve built a big model with lots of results to show. Imagine having a single Results sheet, with&amp;nbsp;a&amp;nbsp;list of charts and tables. Each time you select one, it appears like magic on the screen, replacing the one that was there before. Best of all, it needs no VBA code whatsoever!&lt;/p&gt;&lt;p&gt;&lt;a href="http://excelusergroup.org/blogs/dermot/Dynamic_UI.gif"&gt;&lt;img src="http://excelusergroup.org/blogs/dermot/Dynamic_UI.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;There are two ways I know of&amp;nbsp;to do it. Both are demonstrated in this file (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Dynamic%20UI.xls"&gt;Dynamic UI.xls&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Hyperlinks&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A simple method is simply to create a hyperlink for each item, and link it to the range for that item, so Excel scrolls to the selected range. If you freeze the window so that the hyperlinks are always showing at the top (or left), then it will appear to the user that charts/tables are being swapped in and out of the middle of the screen, whereas in fact Excel is just scrolling up and down (or left and right).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Picture box&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This method is awesome, amazing and truly magical, in my opinion and almost nobody knows about&amp;nbsp;it. Stay with me on this. It&amp;#39;s a little hard to explain in words (I need to draw diagrams), but it&amp;#39;s easy to use once you get it.&lt;/p&gt;
&lt;p&gt;Excel allows you to use a picture box (eg any picture you paste into Excel) to act as a kind of web cam onto a named range of cells on any sheet. Suppose we have set up a range called Table1, for a table of figures. If we select (ie click) our picture box, and type =Table1 into the address bar (where you normally type your cell formula) and press Enter, hey presto, the picturebox suddenly shows the contents of Table1, even if Table1 is on another sheet.&lt;/p&gt;
&lt;p&gt;Excel calls this a camera tool, and it behaves like one, because if there is a chart on top of the selected cell range, the picture box will show the chart. In fact, if you had (say) a chart, a table, and some explanatory text all in one place, and you define a range of cells that encloses all these things, the picture box will show all of them. It is still a picture box, but it can show all this stuff from anywhere else in the workbook.&lt;/p&gt;
&lt;p&gt;So suppose we set up our Results sheet with a dropdown list of all the charts and tables we offer, and we put a picture box in the middle of the screen. We can make our picture box show any one of the charts or tables without having to go to the sheet where they actually live. There&amp;#39;s only one problem - how do we tell the picturebox to change the range it is looking at, when the user makes a choice?&lt;/p&gt;
&lt;p&gt;When I first tried to do this, I nearly went mad trying to figure it out, but the solution is quite simple.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. we make a&amp;nbsp;list in a table&amp;nbsp;of the range names for each chart and table we want to offer, and when the user selects an item from the dropdown list, we look up the range name we want to use and put it in a cell, say C43. So it might be &amp;quot;Table_1&amp;quot;,for example.&lt;br /&gt; &lt;/p&gt;
&lt;p&gt;2. we define a special range name (we&amp;#39;ll call it PicRange, say) with a formula like this = INDIRECT(Results!$C$43).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. we select the picture box and put = PicRange in the address bar&lt;/p&gt;
&lt;p&gt;Now,&amp;nbsp;suppose the user selects one of the tables. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C43 looks up the range name in the list&lt;/li&gt;
&lt;li&gt;the range PicWindow turns this name&amp;nbsp;from text, into an actual range of cells, and &lt;/li&gt;
&lt;li&gt;the picture box displays what is in that range&lt;/li&gt;&lt;li&gt;automatically, no code required.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;See it all in action here (&lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Dynamic%20UI.xls"&gt;Dynamic UI.xls&lt;/a&gt;), and then tell me if this isn&amp;#39;t just the coolest thing for presenting a bunch of results. &lt;/p&gt;
&lt;p&gt;The beauty of it is that the actual charts and tables can be on other sheets, so if, for example, you need to widen the cells for one table, it won&amp;#39;t affect the width of the cells in another table on a different sheet. If you had to put all the results on one sheet, as in the hyperlink solution above, then you can quickly run into problems with conflicting cell width and height between different tables. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=327" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author></entry><entry><title>Creating Word reports from Excel</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/14/creating-word-reports-from-excel.aspx" /><id>/blogs/dermot/archive/2008/01/14/creating-word-reports-from-excel.aspx</id><published>2008-01-14T03:58:00Z</published><updated>2008-01-14T03:58:00Z</updated><content type="html">&lt;p&gt;If you create regular Word reports from Excel, how would you like to be able to produce each report with just one click, instead of manually copying and pasting all the tables and charts from Excel to Word?&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve written an Excel&amp;nbsp;utility to do this automatically. The principle is quite simple - the program looks at all the bookmarks in the Word document. If any of their names start with &amp;quot;tag_&amp;quot;, the program looks for the range or chart in Excel with a similar name, and copies it across.&lt;/p&gt;
&lt;p&gt;This means that you can set up a Word report and an Excel spreadsheet with matching names, then run this utility, and hey presto!&amp;nbsp;A nice thing about it is that if you need to re-create the report later, eg because you found an error, you can simply run the utility again and it will copy over the previous charts and tables.&lt;/p&gt;
&lt;p&gt;You will find the utility, with instructions and an example Word document, here &amp;gt; &lt;a href="http://excelusergroup.org/blogs/dermot/Examples/Reporting.zip"&gt;Reporting.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you bother to read the code, I apologise if it doesn&amp;#39;t meet world best standards, but in the real world, we don&amp;#39;t have time. You&amp;#39;ll see it does provide several different ways of pasting charts, because this can sometimes be a problem.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=256" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author><category term="automation" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/automation/default.aspx" /><category term="reporting" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/reporting/default.aspx" /><category term="Word" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/Word/default.aspx" /><category term="utility" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/utility/default.aspx" /></entry><entry><title>Using hyperlinks for navigation in Excel</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/12/using-hyperlinks-for-navigation-in-excel.aspx" /><id>/blogs/dermot/archive/2008/01/12/using-hyperlinks-for-navigation-in-excel.aspx</id><published>2008-01-12T03:29:00Z</published><updated>2008-01-12T03:29:00Z</updated><content type="html">&lt;p&gt;So your new workbook needs some navigation links. You may want to use hyperlinks, because most people are familiar with them, thanks to the internet, but they create a couple of little problems we need to solve. The example workbook here (&lt;a href="http://excelusergroup.org/blogs/dermot/Hyperlinks.xls"&gt;Hyperlinks.xls&lt;/a&gt;) illustrates these problems and their solutions.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;First - creating a hyperlink&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;First, to create a hyperlink, select the cell containing the link text, select Insert, Hyperlink, choose &amp;quot;Place in this document&amp;quot; on the leftof the dialog, and then choose the sheet and enter the cell reference.&lt;/p&gt;&lt;p&gt;You can also use a textbox,which lets you put the hyperlink anywhere,and not just in a cell. Right click on the textbox and chooseHyperlink. You&amp;#39;ll need to format it, to remove the border,and change the text to underlined blue, so it looks like a hyperlink.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Problem - hyperlinks break easily&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Suppose you point your hyperlink at cell C25, and later, you insert a row higher up. You would expect the hyperlink to now point at A26, but it still points at C25, *sigh*.&lt;/p&gt;&lt;p&gt;The answer is to create a range name for C25, and point the hyperlink at the range name. Then it will update correctly.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Problem - Excel shows the wrong cells&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Suppose we want to link to a table starting at C25 onwards. The hyperlink will show you C25, but it may be at the bottom of the screen,with most of the table hidden. What happens depends on whether you were above, below, to the left or the right of the linked cell.&lt;/p&gt;&lt;p&gt;So how do you get Excel to show the right cells, every time? The simple answer is to link to more than one cell. Suppose you have a set of tables down the sheet,so we are navigating up and down between them.&lt;/p&gt;&lt;p&gt;I insert a new column (A) at the left and then hide it. Suppose I am linking to a table starting at row 25. I point the hyperlink to A25:A200 (say), so that Excel can&amp;#39;t fit them all on the screen. What it does is put the top left linked cell, ie A25, at top left of screen, and you will get the full table showing. It will do this regardless of whether you were above or below the table when you clicked the link. Note that I hide the new column A so the user doesn&amp;#39;t see all the cells being selected.&lt;/p&gt;&lt;p&gt;You can do this with rows as well, if you are navigating from left to right. (Don&amp;#39;t ask me about navigating both across &lt;u&gt;and&lt;/u&gt; down in one sheet - I don&amp;#39;t mix them). &lt;/p&gt;&lt;p&gt;&lt;b&gt;Problem- you need a dynamic (changing) link&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Suppose you want a link to go to different places depending on what the user has chosen. You can do this dynamically, as the example file above shows.&lt;/p&gt;&lt;p&gt;&lt;b&gt;What I use&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;I started programming way back,when we used buttons for everything, including navigation. Now, however, buttons are used on the internet for actions (eg submitting forms) and hyperlinks are used for navigation. So I use hyperlinks, mostly.&lt;/p&gt;&lt;p&gt;Finally, please look at the example file: &lt;a href="http://excelusergroup.org/blogs/dermot/Hyperlinks.xls"&gt;Hyperlinks.xls&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=208" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author><category term="business" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/business/default.aspx" /><category term="hyperlinks" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/hyperlinks/default.aspx" /></entry><entry><title>A blog for Excel users rather than developers</title><link rel="alternate" type="text/html" href="/blogs/dermot/archive/2008/01/12/introduction-this-blog-is-for-users-rather-than-developers.aspx" /><id>/blogs/dermot/archive/2008/01/12/introduction-this-blog-is-for-users-rather-than-developers.aspx</id><published>2008-01-12T00:10:00Z</published><updated>2008-01-12T00:10:00Z</updated><content type="html">&lt;p&gt;I&amp;#39;m interested in practical techniques and tools which can be used
every day to make business users more effective, and that&amp;#39;s what this
blog will be about. The topics will not just be technical (eg the best
use of worksheet functions), but will also cover things like creating a
professional looking chart or user interface. &lt;/p&gt;&lt;p&gt;Wherever
possible, there will be actual examples (in Excel 2003 - business
hasn&amp;#39;t got to Excel 2007 yet) so you can get started right away. &lt;/p&gt;&lt;p&gt;My background is that I&amp;#39;ve been working heavily with Excel for over 15 years in my role as an actuary for a large professional consulting firm. In that time, I&amp;#39;ve explored many options for making Excel more flexible and powerful, as well as safer - because mistakes cost money and put business at risk.&lt;/p&gt;Comments and suggestions are most welcome.  &lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=206" width="1" height="1"&gt;</content><author><name>dermot</name><uri>http://excelusergroup.org/members/dermot/default.aspx</uri></author><category term="introduction" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/introduction/default.aspx" /><category term="business" scheme="http://excelusergroup.org/blogs/dermot/archive/tags/business/default.aspx" /></entry></feed>