François M.
François M.

Reputation: 4278

Maximum of column 1 where value of column 2 matches some condition

Let's say I have the following in a table :

     A   |  B  |  desired_output
   ----------------------------
1 |  10  |  1  |  0
2 |  20  |  7  |  0
3 |  30  |  3  |  0
4 |  20  |  2  |  0
5 |  30  |  5  |  1

I'd like to find a formula for each of the cells in the desired_output column which looks at the max of B1:B5 but only for rows for which A = max(A1:A5)

If that's not clear, I'll try to put it another way :

for all the rows in A1:A5 that are equal to max(A1:A5) // so that's rows 3 and 5
    find the one which has the max value on B // so between B3 and B5, that's B5
        output 1 for this one, 0 for the other

I'd say there would be a where somewhere if such a function existed, something like = if(B=(max(B1:B5) where A = max(A1:A5)), 1, 0) but I can't find how to do it...


I can do it in two columns with a trick :

     A   |  B  |  C  | D
   ----------------------------
1 |  10  |  1  |     |  0
2 |  20  |  7  |     |  0
3 |  30  |  3  |  3  |  0
4 |  20  |  2  |     |  0
5 |  30  |  5  |  5  |  1

With Cn = if(An=max(A$1:A$5),Bn,"") and Dn = if(Cn = max(C$1:C$5), 1, 0)

But I still can't find how to do it in one column

Upvotes: 1

Views: 102

Answers (3)

player0
player0

Reputation: 1

=ARRAYFORMULA(IF(LEN(A1:A), IF(IFERROR(VLOOKUP(CONCAT(A1:A&"×", B1:B),
 JOIN("×", QUERY(A1:B, "order by A desc, B desc limit 1")), 1, 0), )<>"", 1, 0), ))

0

or shorter:

=ARRAYFORMULA(IF(A:A<>"",N(A:A&"×"&B:B=JOIN("×",SORTN(A:B,1,,1,0,2,0))),)) 

=ARRAYFORMULA(IF(A:A<>"",N(A:A&B:B=JOIN(,SORTN(A:B,1,,1,0,2,0))),))

Upvotes: 2

user11138753
user11138753

Reputation:

For systems without MAXIFS, put this in C1 and fill down.

=--(B1=MAX(INDEX(B$1:B$5-(A$1:A$5<>MAX(A$1:A$5))*1E+99, , )))

Upvotes: 2

BigBen
BigBen

Reputation: 49998

How about the following:

=--AND(A5=MAX($A$1:$A$5),B5=MAXIFS($B$1:$B$5,$A$1:$A$5,MAX($A$1:$A$5)))

enter image description here

Upvotes: 1

Related Questions