I am not quite sure what you are trying to do with your VLOOKUP() formula. I don't think you can use a whole column B:B as the value to be searched for. Testing B:B in VLOOKUP, B:B returns 0 (zero) whatever is in column B, and VLOOKUP searches for zero in the range on the '2006 Components ' page.
You are right about including the calculation in the formula. There is no need to refer to a cell in row 2, just hard code the values into the formula.
The following formula tests the difference between A1 and A2 for a 20% difference. If true (20% or greater difference) it uses the formula you posted, by looking up the value of B1 in the range '2006 Components '!$A$5:$A$125, (lookup is in first column of range). I changed B:B in your formula to B1 to make this work). If it finds a match it returns the value in the same row but in column X (you used 24 in your formula).
If False (less than 20% difference)it just returns the value in B1.
=IF($A$2-$A$1>=$A$1/100*20,IF(ISERROR(VLOOKUP(B1,'2006 Components '!$A$5:$Z$125,25,FALSE)),"0",VLOOKUP(B1,'2006 Components '!$A$5:$Z$125,24,FALSE)),B1)
There is one other possible result and that occurs when the difference is 20% or greater, but the value in B1 is not present in the range '2006 Components '!$A$5:$A$125 and the If(IsError returns 0. Note that you put 0 in double quotes "0" which is text rather than a number.
If you drag the formula one cell to the right it will refer to cell C1 but still test A1 & A2 for the 20% difference.
Hope this helps.