Your use of match() is relevant but index() is better suited than address() and together they make for a flexible lookup tool. Essentially, match() finds the row with your SKU while index() fetches the corresponding discount. We also can use if() and iserror() to handle unmatched SKUs. Your images don't lend themselves to solving this concisely so I'll use a smaller layout (plus I'm not really sure what should go where). This formula should go in cell C5 of table 1: `IF(ISERROR(MATCH(A5,SKU,0)),0,INDEX(Table 2::C$1:C$7,MATCH(A5,SKU,0),1,area-index))` Then, in cell D5, put this: `Price CL8016 SG OPT 01−(Price CL8016 SG OPT 01×MD CL8016 SG OPT 01)` An easier rendering would be: D5 = `B5 - (B5 * C5)` What they do: ------------- C5 first checks to see if there is a matching SKU in table 2 with `MATCH(A5,SKU,0)`. If not it generates an error, if yes it generates a table 2 row number. The if() function takes the results of iserror() then returns a 0 discount if an error or (via index function) the corresponding discount from table 2 column C. D5 subtracts the discount amount from the price. E5 shows how iserror() works with `ISERROR(MATCH(A5,SKU,0))`. Note, for some bleeping reason, I can't upload a stupid image and of course, the help/search here is worse than useless. I've seen this before but I can't remember how to get around this miserable failure. Hopefully, my explanation suffices. What a headache.