Need help with INDEX lookup

V

Vegas Sara

This formula works, but of course it only gives the first instance:
=INDEX($A$2:$A$100,MATCH(1,($L$2:$L$100<>"")*($L$2:$L$100<>"Resolved"),0)).

So I tried created this formula as an array:
=INDEX($A$2:$A$100, SMALL(AND(IF(($L$2:$L$100<>""),(
$L$2:$L$100<>"Resolved")), ROW($A$2:$A$100)),ROW(1:1)))
I receive #N/A. Any suggestions on how to fix the formula? Column A has the
information I'd like returned if the conditions are met in column L. Column L
is the result of a VLOOKUP you all helped me with previously. Eventually I'll
evolve the formula to do the look up from another worksheet. Is this enough
information or do you need more?

Thank in advance.
 
T

T. Valko

Try it like this:

=INDEX($A$2:$A$100,SMALL(IF(($L$2:$L$100<>"")*(
$L$2:$L$100<>"Resolved"),ROW($A$2:$A$100)),ROWS(A$1:A1))-ROW(A$2)+1)

Don't forget: array entered!
 
V

Vegas Sara

Thank you, but I still get #N/A. I copied the formula exactly. was I supposed
to make some customizations?
 
V

Vegas Sara

Col L uses the following formula:
=IF(AND($G4<>"Resolved",$C4="SAP-SECURITY"),VLOOKUP($A4,'25'!$A$2:$J$100,7,0),"")
From what I can tell, when the # being looked up on the next worksheet isn't
there, it returns the #N/A error. Which was fine until the INDEX formula
wouldn't work. When I tried putting ISNA in there, I received a blank - which
I don't want. Any suggestions?
 
T

T. Valko

What type of data does the VLOOKUP return? Is it text, numeric or could it
be either? What version of Excel are you using?
 
V

Vegas Sara

I'm not sure how to tell if column A is brought in as text or number, is
there a way to be sure? Is it just formating the cells? It looks like a
number. I have no problem with it being text as it won't be used in any
calculations. I'm using 2003 SP2. Over the weekend I thought to use an extra
column with: =IF(AND($L$2:$L$100<>"", $L$2:$L$100<>"Resolved"), "Yes",""),
then just changing the previous formula to look for the yes, but it too is
returning #N/A when that is in in the lookup cell...
 
T

T. Valko

Col L uses the following formula:
=IF(AND($G4<>"Resolved",$C4="SAP-SECURITY"),VLOOKUP($A4,'25'!$A$2:$J$100,7,0),"")

Try changing that formula to:

=IF(AND($G4<>"Resolved",$C4="SAP-SECURITY",ISNUMBER(MATCH($A4,'25'!$A$2:$A$100,0))),VLOOKUP($A4,'25'!$A$2:$J$100,7,0),"")
 
V

Vegas Sara

I appreciate you helping me with this. The problem is, that when there is no
match in the look up it gives me a blank cell. The error is actuall
preferable as it lets me know there's no match since thats part of what we're
tracking.
 
T

T. Valko

We'll get this sorted out sooner or later! <g>

The "no match" of the lookup is a separate condition from $G4<>"Resolved"
and $C4="SAP-SECURITY".

You can do this for the "no match":

=IF(ISNA(MATCH($A4,'25'!$A$2:$A$100,0)),"No Match",.........

The rest of the formula would be:

...IF(AND($G4<>"Resolved",$C4="SAP-SECURITY"),VLOOKUP($A4,'25'!$A$2:$J$100,7,0),*what
should go here*))

*what should go here* = what result do you want if/when $G4<>"Resolved" and
$C4="SAP-SECURITY" if FALSE?
 
T

T. Valko

Ok, this should work...

Array entered** :

=INDEX($A$2:$A$100,SMALL(IF(ISTEXT($L$2:$L$100),IF(($L$2:$L$100<>"")*($L$2:$L$100<>"Resolved"),ROW(A$2:A$100))),ROWS(A$1:A1))-ROW(A$2)+1)

** array formulas need to be entered using the key combination of
CTRL,SHIFT,ENTER (not just ENTER). Hold down both the CTRL key and the SHIFT
key then hit ENTER.
 
V

Vegas Sara

Almost perfect. 2 more questions: Is there a way to include a similar lookup
when I'm, receiving the #N/A error? (If not I'll do it manually, but its a 31
sheet workbook). Also, when I change the index array below to lookup on
another sheet does every array reference need the 'sheetname'! added or just
in a strategic spot or too.
 
T

T. Valko

Almost perfect.

So, we're making progress!
Is there a way to include a similar lookup when I'm, receiving the #N/A
error?

In other words, you want to do the same thing but this time return the data
from col A where col L = #N/A. This one is actually easier since it's just a
single condition to deal with.

Array entered:

=INDEX($A$2:$A$100,SMALL(IF(ISNA($L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1)
when I change the index array below to lookup
on another sheet does every array reference
need the 'sheetname'! added or just in a strategic
spot or too

Technically, if all the data was on a different sheet you need to include
the sheet name in "spots". For example, using the above formula with the
data on Sheet1:

=INDEX(Sheet1!$A$2:$A$100,SMALL(IF(ISNA(Sheet1!$L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1)

You'll notice I didn't include the sheet name in any of the ROW functions.
In both the ROW and ROWS functions the sheet name is irrelavent as to how
these functions work. **However**, including the sheet name doesn't hurt
anything and makes it easier to understand what the formula is doing.

=INDEX(Sheet1!$A$2:$A$100,SMALL(IF(ISNA(Sheet1!$L$2:$L$100),ROW(Sheet1!A$2:A$100)),ROWS(A$1:A1))-ROW(Sheet1!A$2)+1)
 
V

Vegas Sara

You are so awesome. let me know if you come to Vegas- I owe you a homemade
thank you cake. When I do the look up, some pages naturally have more items
in the look up than others. How do I make the #NUM! error disappear? I'm
guessing I use ISERR but I don't know where to plug it in. thanks.
 
T

T. Valko

There are a few ways to do this and the best option to use depends on the
type of data the lookup formula is returning and how complex the lookup
formula is.

The generic method that works in all applications is to wrap the portion of
the formula that actually generates the error in an ISERROR function. The
drawback to this method is that it's not very efficient and it effectively
makes the formula twice as long. For example, using this formula:

=INDEX($A$2:$A$100,SMALL(IF(ISNA($L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1)

Trapping the errors:

=IF(ISERROR(SMALL(IF(ISNA($L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1),"",INDEX($A$2:$A$100,SMALL(IF(ISNA($L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1))

And if you have to include sheet names then that makes it even longer!
(which is one reason to use the shortest most concise sheet names you can
think of!)

A more efficient method is to use a formula in another cell to count how
many records meet the condition and then compare that result to the number
of cells the formula is copied to. For example:

In the above formula the condition is if there's a #N/A error in the range.
So, we use a separate cell with a formula that counts how many #N/A errors
are in the range:

=SUMPRODUCT(--(ISNA(L2:L100)))

Then we compare that number to the number of cells the formula is copied to.
For every cell the formula is copied to this expression returns that count:
ROWS(A$1:A1). So, we compare ROWS(A$1:A1) to =SUMPRODUCT(--(ISNA(L2:L100))).
Here's how that's done:

Let's assume:

B1 holds the formula: =SUMPRODUCT(--(ISNA(L2:L100)))

To incorporate that into the error trap:

=IF(ROWS(A$1:A1)>B$1,"",INDEX($A$2:$A$100,SMALL(IF(ISNA($L$2:$L$100),ROW(A$2:A$100)),ROWS(A$1:A1))-ROW(A$2)+1))

As you can see that's significantly shorter than the generic method and it's
much more efficient overall.

Just remember, all of the lookup formulas are array formulas so they need to
be array entered!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top