The HLOOKUP()
and VLOOKUP()
functions are two of the most commonly used functions in Excel, but there are a number of pitfalls that should be avoided.
Both functions take either three or four arguments (the fourth is optional):
lookup_value
the value that you are trying to match.
table_array
the range in which you are trying to look up the value. The function will try to match your lookup_value
in the leftmost column (VLOOKUP
) or topmost row (HLOOKUP
) of this range.
col_index_num
(VLOOKUP
) or row_index_num
(HLOOKUP
) the column or row containing the corresponding values you want to find. The numbering starts at 1 for the column or row containing the values to be matched.
range_lookup
whether to perform an exact or approximate lookup. If this is TRUE
you’ll get an approximate lookup, if it is FALSE
you’ll get an exact lookup. This arrgument is optional: if no value is specified, it will be assumed to be TRUE
.
When should you use an approximate lookup, and when an exact lookup? It’s easier to decide if you understand what is going on as the lookup is performed.
Approximate lookups
If you are doing an approximate lookup, Excel will take each cell in the leftmost column (VLOOKUP
) or topmost row (HLOOKUP
) in turn, and see how it compares to the value it is looking for (lookup_value
). If the value of the current cell is the same as the lookup_value
, it stops, having found the correct row (VLOOKUP
) or column (HLOOKUP
). If the value of the current cell is less than the lookup_value
, it moves on to the next cell. If the value of the current cell is greater than the lookup_value
, it stops, and uses the previous row (VLOOKUP
) or column (HLOOKUP
). In other words, Excel returns the next largest value, as long as the lookup range is sorted in ascending order.
This provides a way of remembering the significance of the optional argument: use TRUE
when the lookup range is sorted, and FALSE
when it is not sorted.
Using TRUE
when the lookup range is not sorted will lead to unpredictable results: for VLOOKUP
, the row that will be used to provide the value will be the row above the first row whose leftmost column has a value greater than lookup_value
.
If the lookup_value
is smaller than the first value in the leftmost column (VLOOKUP
) or topmost row (HLOOKUP
), Excel will return the #N/A
value.
Exact lookups
When Excel performs an exact lookup, it will take each cell in the leftmost column (VLOOKUP
) or topmost row (HLOOKUP
) in turn, and see how it compares to the value it is looking for (lookup_value
). If the value of the current cell is the same as the lookup_value
, it stops, having found the correct row (VLOOKUP
) or column (HLOOKUP
). If it gets to the end of the column (VLOOKUP
) or row (HLOOKUP
) without finding a match, it will return the #N/A
value.
Approximate or exact?
You should always specify the optional fourth argument to these functions, so that it is obvious which sort of lookup you intend.
Whether you use an approximate or exact lookup will, of course, depend on the use to which you are going to put the values that you are looking up. However, there are some situations that you should avoid:
- Don’t use an approximate lookup if the lookup table isn’t sorted in ascending order by the values in the leftmost column (
VLOOKUP
) or topmost row (HLOOKUP
).
- Don’t use an exact lookup if your lookup values are floating point numbers (ie, any numbers with decimal points). This is because floating point numbers have to be exactly the same in order to match:
4.9999999999999999
won’t match 5
. Remember that even if a number is displayed as 5.0
, it may actually be 4.9999999999999999
.
- Be very careful when using floating point numbers even with approximate lookups.
4.9999999999999999
is less than 5
, so Excel wouldn’t find the correct row even with an approximate lookup.
Calculation speed
Lookups can take a long time to compute, if the lookup table is large or if many lookups are performed. Approximate lookups are faster, as Excel doesn’t always have to go through every row or column in the lookup table. It is often possible to use an approximate lookup, if the lookup table is sorted and is known to contain all possible values.
Many people use a formula such as =IF(ISNA(VLOOKUP(Currency,Rates,2,FALSE)),0,VLOOKUP(Currency,Rates,2,FALSE))
. Because of the way Excel works, this always does both lookups in the formula, thus doubling the calculation time. It is much more efficient to have a column (or row) to contain the raw lookup results, and then test them with the ISNA()
separately.