Match function

F

fireflyrt

The Match function seems to work only on 1 dimensional arrays. Is there any
such function that returns the cell reference for a match in a 2d array?

For example, I am trying to find the cell location of a max number in a
1000x1000 array of data - is there a function that will do that?
 
J

Jacob Skaria

Try the below. Enter a text 'findme' somewhere in the range A1:J20. and try
the below array formula..which will retrive the value..Adjust to suit...your
requirement

(all in one line)
=INDIRECT(ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),""))))

If this post helps click Yes
 
F

fireflyrt

Not likely, but if there are finding the first one would suffice. FYI I've
had to split up the array into 250x4000 to allow it to fit within the 256
column limit
 
T

T. Valko

With that many cells to check this will be *SLOW* plus it's volatile. You'd
probably be better off using a UDF.

This will return the cell address using duplicate precedence of top to
bottom, left to right.

Use a helper cell to get the max value:

tbl = your range

=MAX(tbl)

Assume that formula is entered in cell A1.

For the cell address for the max value...

Array entered** :

=CELL("address",INDEX(tbl,MIN(IF(tbl=A1,ROW(tbl)-MIN(ROW(tbl))+1)),MATCH(A1,INDEX(tbl,MIN(IF(tbl=A1,ROW(tbl)-MIN(ROW(tbl))+1)),0),0)))

** 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.
 
T

T. Valko

Enter a text 'findme' somewhere in the range
=INDIRECT(ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),""))))

That doesn't make any sense. What's the point of telling the formula to find
something and then having the result of the formula being what it is you're
trying to find? You probalby didn't mean to include INDIRECT.
 
J

Jacob Skaria

No TV. I intended to put INDIRECT() for the below reason..

To retrieve a value from the same row from subsequent columns; the formula
will have to be adjusted like the below...It is true that I have made an
assumption that the OP is reasonably well with formulas (from the
query)...and hence this way..

(all in one line)
=INDIRECT(ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),"")))+<column increment>)


If this post helps click Yes
 
J

Jacob Skaria

(Correction) To retrieve value from the next column to the right

=INDIRECT(ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),""))+1))


If this post helps click Yes
 
T

T. Valko

One of us is "out to lunch"! <g>

......A.....B.....C
1...z......y......g
2...o.....x......r

=INDIRECT(ADDRESS(
MIN(IF(A1:C2="x",ROW(A1:C2),"")),
MIN(IF(A1:C2="x",COLUMN(A1:C2),""))))

Result = x

What did that formula accomplish?

If just want to know if "x" is present then use COUNTIF.
 
T

T. Valko

Slight improvement.

Array entered:

=CELL("address",INDEX(tbl,MIN(IF(tbl=A1,ROW(tbl)))-MIN(ROW(tbl))+1,MATCH(A1,INDEX(tbl,MIN(IF(tbl=A1,ROW(tbl)))-MIN(ROW(tbl))+1,0),0)))

That will make it a little bit more efficient.
 
J

Jacob Skaria

Not sure whether you have read the previous post...

------------

"No TV. I intended to put INDIRECT() for the below reason..

To retrieve a value from the same row from subsequent columns; the formula
will have to be adjusted like the below...It is true that I have made an
assumption that the OP is reasonably well with formulas (from the
query)...and hence this way.."

(all in one line)
=INDIRECT(ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),""))+<column increment>))

If this post helps click Yes
 
T

T. Valko

Not sure whether you have read the previous post...

I did, but what does it have to do with what the OP is wanting to do?

The OP wants the cell address of the max value in the range. There may or
may not be duplicate max values. So, if there are duplicate max values then
you have to decide which max value appears first:

......A.....B
1...5.....7
2...7.....3

Which max value appears first?
 
J

Jacob Skaria

You are right. Again...(as more often)...I have missed the key point
here..The below will do...

=ADDRESS(
MIN(IF($A$1:$J$20="findme",ROW($A$1:$J$20),"")),
MIN(IF($A$1:$J$20="findme",COLUMN($A$1:$J$20),"")))

If this post helps click Yes
 
L

Lori

Biff is correct (as usual!) this will not work in his example above.

If the OP just wants to identify a cell containing a value,
one could make use of the INDIRECT formula by giving it a name.
eg define "M" to be:

=INDIRECT(TEXT(MIN(IF($A$1:$H$9=MAX($A$1:$H$9),1000*ROW($A$1:$H$9)+COLUMN($A$1:$H$9))),"r0c000"),0)

Then just enter "M" in the Name Box (next to formula bar) to go
to the first cell containing the Max value.

You could also enter the formula directly into the Edit>Goto box
(without the leading =).
 

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