Solved

Use of VLOOKUP versus more efficient alternative

Posted on 2011-09-14
5
395 Views
Last Modified: 2013-11-05
All,

I am putting together a Sales and Cost fo Sales forecasting model and am currently using lots (thousands!!) of VLOOKUP to calculate various values.

Tables of data:

Volume - 120+ rows by 68 columns, indexed by Product Code - Dynamic Defined Range "Volume"
Selling Price - same dimensions as Volume, dynamic range "Prices"
Cost of Sales - 24000 rows (all products) by 22 columns, indexed by product code. Defined Range - COS

Tables of calculations, dimensions - 120 Rows x 68 Columns:
Sales - Volume * Selling Price = VLOOKUP(ProdCode,Volume,COLUMN(),False)*VLOOKUP(ProdCode,Prices,COLUMN(),False)
Cost of Sales - Volume * Cost/Kg = VLOOKUP(ProdCode,Volume,COLUMN(),False)*VLOOKUP(ProdCode,COS,n,False)
Cost of Sales is repeated on 3 sheets for Meat, Labour & Packaging

The file is already at 12Mb and is taking a noticeable (20-30secs) time to calculate.

I am using VLOOKUP because its possible that the order of the sheets could change and extra rows could be added so don't want to link the sheets purely on row number.

I need to add the following further calculation tables which will be the same dimensions as the others (120 x 68) and am looking to see if there is a more efficient formula that I can use eg INDEX/MATCH before this becomes an immense beast for our limited laptops (Windows XP, Excel 2003 on Dell Latitude E5400 with 2526Mhz processor and 2Gb of RAM)

Total Cost of Sales - Addition of Meat, Labour & Packaging sheets
Total Margin - Sales less Total Cost of Sales
Summaries of each of the calculation sheets, probably pivot tables.

I realise the Cost of Sales data sheet with 24k rows will be contributing to the file size and doing lookups on this will be contributing to the calculation time. Added complication is that this sheet has the ProdCode as text so having to allow for this in the other sheets.

Any suggestions??? I don't have MS Access so can't transfer it to Access.

I do have Lotus 97 and Approach 97 if that helps but don't have much experience with either. My colleagues that would be looking at it have even less.

Thanks
Rob H
0
Comment
Question by:Rob Henson
  • 3
  • 2
5 Comments
 
LVL 11

Expert Comment

by:jkpieterse
ID: 36536492
If the lookup table is sorted on the lookup index, then you can use something like this:

=IF(INDEX(ListOfProdCodes,MATCH(ProdCode,ListOfProdCodes,1))=ProdCode,INDEX(COS,MATCH(ProdCode,ListOfProdCodes,1),ColumnNumberFromCOS),NA())

The trick being that you use the non-exact match function (last argument = 1), which is very fast, and then check whether it does return an exact match.
0
 
LVL 32

Author Comment

by:Rob Henson
ID: 36536520
Would just LOOKUP be more efficient as its not having to look at the whole array?

This would only look at one column and return the value from another column, the layout of all the sheets is the same. In case you were wondering the 68 columns are 18 months worth of weekly forecasting.

Thanks
Rob H
0
 
LVL 11

Accepted Solution

by:
jkpieterse earned 500 total points
ID: 36536625
Hmm, dunno really.
If there are lots of lookups, I'd have just one column using MATCH (using a similar -non-exact-match technique as I show above) to get the proper index from the lookup table and have all subsequent columns use the INDEX function which points to that one MATCH column for its index numbers.
0
 
LVL 32

Author Closing Comment

by:Rob Henson
ID: 36537097
jkpieterse

Combination of INDEX and MATCH works wonderfully!

Each sheet now has a couple of MATCH formulae on each row pulling the row number from the sheets where its needs to get its data from. Each individual calculation now uses an INDEX formula on named ranges for each sheet with the row number from the MATCH formulas.

File size still 13.4Mb but calculation time minimal!

Result!!
0
 
LVL 11

Expert Comment

by:jkpieterse
ID: 36538051
Great!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INDEX and MATCH can be used to great effect to replace HLOOKUP and VLOOKUP as it does not have the limitation of needing the data to be sorted so that the reference value is in the first column or row. It also has the ability to perform a bi-directi…
This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
This Micro Tutorial will demonstrate how to use longer labels with horizontal bar charts instead of the vertical column chart.
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now