I have understood what you are talking about.

Look closely at what I said.

"Assuming there's only going to be one value returned"

And you've now added something that you omitted originally "I want to return **values** that do not match exactly, but they are within a tolerance of the reference value."

So this wont work for your problem.

"You put My lookup value as 1!"

Correct.

This is an array formula as specified earlier.

If A1*95%<=B1:B20 and A1*105%>=B1:B20 then a TRUE(1) is returned

This is then MATCHed against the lookup value of 1 (which I why it has to be 1). This results in a 1 in the array against the row number.

An INDEX is then performed in column C to return a value on that row.

Tested thus:

In a blank sheet put 100 in A1

in B1:B4 put the numbers 94, 95, 106, 107

in C1:C4 put the letters a, b, c, d

The only number that is within +-5% of A1 is 95 which is in row B2 so we want 2 returned, we can then INDEX() that on column C to return the value b.

If you put the formula

=MATCH(1,(A1*95%<=B1:B20)*(A1*105%>=B1:B20),0)

**as an array formula**

in a blank cell

it returns 2 - the correct row number.

So you just need to INDEX () column C with that formula get the b

The formula works perfectly but is based on returning **only one value**

You never specified in your original formula that you wanted to return more than one value.

You added that later.

The formula will only work for one value being returned.

So you cannot use this formula due to the additional information you provided after.