The VLOOKUP function is the most popular lookup and reference function in Excel. It is also one of the trickiest and the dreaded #N/A error message can be a common sight.
This article will look at the 6 most common reasons why your VLOOKUP is not working.
You Need an Exact Match
The last argument of the VLOOKUP function, known as range_lookup, asks if you would like an approximate or an exact match.
In most cases people are looking for a particular product, order, employee or customer and therefore require an exact match. When looking for a unique value, FALSE should be entered for the range_lookup argument.
This argument is optional, but if left empty, the TRUE value is used. The TRUE value relies on your data being sorted in ascending order to work.
The image below shows a VLOOKUP with the range_lookup argument omitted, and the incorrect value being returned.

Solution
If looking for a unique value, enter FALSE for the last argument. The VLOOKUP above should be entered as =VLOOKUP(H3,B3:F11,2,FALSE).
Lock the Table Reference
Maybe you are looking to use multiple VLOOKUPs to return different information about a record. If you are planning to copy your VLOOKUP to multiple cells, you will need to lock your table.
The image below shows a VLOOKUP entered incorrectly. The wrong cell ranges are being referenced for the lookup_value and table array.

Solution
The table that the VLOOKUP function uses to look for and return information from is known as the table_array. This will need to be referenced absolutely to copy your VLOOKUP.
Click on the references within the formula and press the F4 key on the keyboard to change the reference from relative to absolute. The formula should be entered as =VLOOKUP($H$3,$B$3:$F$11,4,FALSE).
In this example both the lookup_value and table_array references were made absolute. Typically it may be just the table_array that needs locking.
A Column Has Been Inserted
The column index number, or col_index_num, is used by the VLOOKUP function to enter what information to return about a record.
Because this is entered as an index number, it is not very durable. If a new column is inserted into the table, it could stop your VLOOKUP from working. The image below shows such a scenario.

The quantity was in column 3, but after a new column was inserted it became column 4. However the VLOOKUP has not automatically updated.
Solution 1
One solution might be to protect the worksheet so that users cannot insert columns. If users will need to be able to do this, then it is not a viable solution.
Solution 2
Another option would be to insert the MATCH function into the col_index_num argument of VLOOKUP.
The MATCH function can be used to look for and return the required column number. This makes the col_index_num dynamic so inserted columns will no longer affect the VLOOKUP.
The formula below could be entered in this example to prevent the problem demonstrated above.

The Table has got Bigger
As more rows are added to the table, the VLOOKUP may need to be updated to ensure that these extra rows are included. The image below shows a VLOOKUP that does not check the entire table for the item of fruit.

Solution
Consider formatting the range as a table (Excel 2007+), or as a dynamic range name. These techniques will ensure that your VLOOKUP function will always be checking the entire table.
To format the range as a table, select the range of cells you want to use for the table_array and click Home > Format as Table and select a style from the gallery. Click the Design tab under Table Tools and change the table name in the box provided.
The VLOOKUP below shows a table named FruitList being used.

VLOOKUP Cannot Look to its Left
A limitation of the VLOOKUP function is that it cannot look to its left. It will look down the leftmost column of a table and return information from the right.
Solution
The solution to this involves not using VLOOKUP at all. Using a combination of the INDEX and MATCH functions of Excel is a common alternative to VLOOKUP. It is far more versatile.
The example below shows it being used to return information to the left of the column you are looking in.
Your Table Contains Duplicates
The VLOOKUP function can only return one record. It will return the first record that matches the value you looked for.
If your table contains duplicates then VLOOKUP will not be up to the task.
Solution 1
Should your list have duplicates? If not consider removing them. A quick way to do this is to select the table and click the Removes Duplicates button on the Data tab.
Check out the AbleBits Duplicate Remover for a more complete tool for handling duplicates in your Excel tables.
Solution 2
Ok, so your list should have duplicates. In this case a VLOOKUP is not what you need. A PivotTable would be perfect to select a value and list the results instead.
The table below is a list of orders. Let's say you want to return all the orders for a particular fruit.

A PivotTable has been used to enable a user to select a Fruit ID from the report filter and a list of all the orders appears.

Trouble Free VLOOKUPs
This article demonstrated a solution to the 6 most common reasons a VLOOKUP function is not working. Armed with this information you should enjoy a less troublesome future with this awesome Excel function.
About the Author
Alan Murray is an IT Trainer and the founder of Computergaga. He offers online training and the latest tips and tricks in Excel, Word, PowerPoint and Project.
by 
Latest comments
And another. Your lookup table reference is larger than your table. As my lookup table gets larger, daily, I am forced to increase my lookup reference size. This created an issue. It would be nice to not have to manually change the lookup reference but......
Hi!
If your data range changes dimensions, we recommend using an structured references in Excel tables or a dynamic named range. For more information, read Excel dynamic named range: how to create and use.
Let me add a seventh reason. Your excel calculation is set to Manual rather than automatic so if you go in the search bar and type in "Calculation" you will be able to see what your setting is for that excel workbook.
You just saved my life!
Thanks a lot for this!!!!
Hi,
I have an issue with items having "~" symbol (For example, "18 KT GOLD JEWELLERY ~ GVACW"). In this case neither "VLOOKUP" nor "INDEX/MATCH" are working.
Request your suggestion on the same.
Hi!
The following tutorial should help: Excel wildcard: find and replace, filter, use in formulas.
For example, to match "abc~" use double tilde
=MATCH("abc~~",A1:A10,0)
Is it possible to use vlookup for 4+ sheets? I was following the instructions and trying to connect 4 sheets but to no luck.
Hello!
Here is the article that may be helpful to you: VLOOKUP across multiple sheets in Excel with examples. Hope this is what you need.
Hello :) I have a question. why when I search my value with VLOOKUP like this:
=VLOOKUP(E8,car_rental!$D$10:$BC$106,52,0) everything works but when I want to insert the VLOOKUP to an if statement like so:
=if(VLOOKUP(E8,car_rental!B10:E10,1,0)="",VLOOKUP(E8,car_rental!$D$8:$BC$103,52,0),"")
the very same VLOOKUP doesn't work reason: Did not find value 'value' in VLOOKUP evaluation.
what am I missing? it's the same range the vale is in column D
thanks in advance
Hello!
I'm assuming you're using a condition when the VLOOKUP function doesn't find anything. I recommend reading this guide: Nest IFERROR within VLOOKUP to always find something. I hope it’ll be helpful.
Thanks for the tips! My issue is, I kept getting "#N/A", despite ruling out all the potentials as advised above, and I think it has something to do with the format or type of the data behind and between two files, though they appear to be the same. Any advise? Thanks!
Yes, this could well be a formatting issue. They need to be the same data type. It may be that you have one column with numeric values and the other with numbers stored as text.
You can check this by selecting some of the cells and looking down at the bottom right to see if they are summed in the Status Bar.
My issue is that I work with duplicates that are needed.
Pivot table is recommended, however, the result in my case is text not a value so pivot table is not really suitable.
Is there any other function I could use?
Hello!
I recommend trying to use the combination of INDEX + MATCH functions.
I wondered why vlookup wasnt resolving - I mean it just stayed verbatim even after attempting to resolve - for example "=VLOOKUP(E3,Sheet1!$A$2:$B$2168,2,FALSE)". I discovered the cell was locked - unlocking it fixed the issue.
Excellent work Alex.
Hi Keith,
Ok yes, if that column is the first of the table array and being used as the lookup value, then the format of both must match up.
The one with the apostrophe is stored as text, the other is a number. Ignore the general along the top. One is text here and one is a number.
If this is the one working, then convert the others in the column to text also.
This could be done by selecting them as choosing Text from the menu that currently displays general.
If this does not work, you could use this formula in an adjacent column
=TEXT(A1,"0000000")
Then copy and paste values the results over the current table array cells.
Hope this helps
Alan
another tip: if you're looking up numbers, make sure they are not 'numbers formatted as text.' They'll break the formula.
Thanks Bill.
Yes to add to that... the formatting of the lookup value and the first column of the table array must match. Whether they both be numbers, or both be numbers formatted as text, they must be the same.