Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 5
Default Conditional Rank (or rather, Conditional Range)

I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data

Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2

I want to be able to do this in a single-column, array-type formula:

IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)

Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)

Thanks in advance.

  #2   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 698
Default Conditional Rank (or rather, Conditional Range)

With your posted data list in A1:C7
Name Height Age Rank
Bill Short 55
Mary Short 45
Tom Tall 16
Rufus Short 21
Henrietta Tall 39
Henry Tall 38

Try this:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1
Copy that formula down through D7

Does that help?
***********
Regards,
Ron

XL2002, WinXP


" wrote:

I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data

Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2

I want to be able to do this in a single-column, array-type formula:

IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)

Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)

Thanks in advance.


  #3   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 5
Default Conditional Rank (or rather, Conditional Range)

Yes, this works. I'm trying to understand it a little better,
though... I can see how it verifies that the height is in the
appropriate group, and then evaluates the age in the C-column range
via array position, but why the less than sign in C2<B range? What
does the "--" do exactly? Why does it evaluate to 0 for first place
(necessitating the 1)?

And what if I wanted to reverse the rank?

Sorry for the detail questions, but I have to apply this to some much
more complex criteria, and my hunting hasn't dug up a good explanatory
reference on sumproduct, array, and rank thus far.

Thanks for the help.

On Apr 12, 3:06 pm, Ron Coderre
wrote:
With your posted data list in A1:C7
Name Height Age Rank
Bill Short 55
Mary Short 45
Tom Tall 16
Rufus Short 21
Henrietta Tall 39
Henry Tall 38

Try this:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1
Copy that formula down through D7

Does that help?
***********
Regards,
Ron

XL2002, WinXP

" wrote:
I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data


Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2


I want to be able to do this in a single-column, array-type formula:


IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)


Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)


Thanks in advance.



  #4   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 698
Default Conditional Rank (or rather, Conditional Range)

Hi, DW

Regarding:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1

This section: ($B$2:$B$7=B2) determines which Height categories to include
in the calculation. It returns 1 for each $B$2:$B$7 cell that matches B2.
Non-matches equate to zero. In the posted data, that section returns this
array {1,1,0,1,0,0}

(Technically, it returns boolean values (TRUE/FALSE). but when arithmetic
operations are applied to TRUE/FALSE values in Excel, they are converted to 1
and 0, respectively)

That array is multiplied times the Ages in $C$2:$C$7
So....{1,1,0,1,0,0} x {55,45,16,21,39,38}
={1,1,0,1,0,0} x {55,45,16,21,39,38}
={1x55,1x45,0x16,1x21,0x39,0x38}
={55,45,0,21,0,0}

The Age in C2 is then compared to each value in that array. Each age
greater than C2 returns 1, all others return 0.

The final array summed by SUMPRODUCT is
={0,0,0,0,0,0}
Totalling 0 (indicating that NO values are smaller than C2). 1 is added to
adjust the value.

The formula in D3 works with this net array
={1,0,0,0,0,0}
Which totals to 1......plus 1 is a rank of 2

Does that help?

(Time pressure is preventing me from addressing your Reverse Rank question
right now...sorry)

***********
Regards,
Ron

XL2002, WinXP


" wrote:

Yes, this works. I'm trying to understand it a little better,
though... I can see how it verifies that the height is in the
appropriate group, and then evaluates the age in the C-column range
via array position, but why the less than sign in C2<B range? What
does the "--" do exactly? Why does it evaluate to 0 for first place
(necessitating the 1)?

And what if I wanted to reverse the rank?

Sorry for the detail questions, but I have to apply this to some much
more complex criteria, and my hunting hasn't dug up a good explanatory
reference on sumproduct, array, and rank thus far.

Thanks for the help.

On Apr 12, 3:06 pm, Ron Coderre
wrote:
With your posted data list in A1:C7
Name Height Age Rank
Bill Short 55
Mary Short 45
Tom Tall 16
Rufus Short 21
Henrietta Tall 39
Henry Tall 38

Try this:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1
Copy that formula down through D7

Does that help?
***********
Regards,
Ron

XL2002, WinXP

" wrote:
I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data


Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2


I want to be able to do this in a single-column, array-type formula:


IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)


Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)


Thanks in advance.




  #5   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 5
Default Conditional Rank (or rather, Conditional Range)

Yes, that's a very clear and concise explanation, thank you, and I've
been puzzling through the way the function works in the meantime
myself.

A couple other helpful links on the subject, for others who might
happen along:

thorough exp. of SUMPRODUCT he http://www.xldynamic.com/source/xld.SUMPRODUCT.html

good discussion of double unary ("--") use in sumproduct:
http://www.eggheadcafe.com/software/...e-objecti.aspx
http://www.mcgimpsey.com/excel/formulae/doubleneg.html

Still chipping away at the reverse (some would say inverse) rank, any
other pointers appreciated.


On Apr 16, 12:22 pm, Ron Coderre
wrote:
Hi, DW

Regarding:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1

This section: ($B$2:$B$7=B2) determines which Height categories to include
in the calculation. It returns 1 for each $B$2:$B$7 cell that matches B2.
Non-matches equate to zero. In the posted data, that section returns this
array {1,1,0,1,0,0}

(Technically, it returns boolean values (TRUE/FALSE). but when arithmetic
operations are applied to TRUE/FALSE values in Excel, they are converted to 1
and 0, respectively)

That array is multiplied times the Ages in $C$2:$C$7
So....{1,1,0,1,0,0} x {55,45,16,21,39,38}
={1,1,0,1,0,0} x {55,45,16,21,39,38}
={1x55,1x45,0x16,1x21,0x39,0x38}
={55,45,0,21,0,0}

The Age in C2 is then compared to each value in that array. Each age
greater than C2 returns 1, all others return 0.

The final array summed by SUMPRODUCT is
={0,0,0,0,0,0}
Totalling 0 (indicating that NO values are smaller than C2). 1 is added to
adjust the value.

The formula in D3 works with this net array
={1,0,0,0,0,0}
Which totals to 1......plus 1 is a rank of 2

Does that help?

(Time pressure is preventing me from addressing your Reverse Rank question
right now...sorry)

***********
Regards,
Ron

XL2002, WinXP

" wrote:
Yes, this works. I'm trying to understand it a little better,
though... I can see how it verifies that the height is in the
appropriate group, and then evaluates the age in the C-column range
via array position, but why the less than sign in C2<B range? What
does the "--" do exactly? Why does it evaluate to 0 for first place
(necessitating the 1)?


And what if I wanted to reverse the rank?


Sorry for the detail questions, but I have to apply this to some much
more complex criteria, and my hunting hasn't dug up a good explanatory
reference on sumproduct, array, and rank thus far.


Thanks for the help.


On Apr 12, 3:06 pm, Ron Coderre
wrote:
With your posted data list in A1:C7
Name Height Age Rank
Bill Short 55
Mary Short 45
Tom Tall 16
Rufus Short 21
Henrietta Tall 39
Henry Tall 38


Try this:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1
Copy that formula down through D7


Does that help?
***********
Regards,
Ron


XL2002, WinXP


" wrote:
I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data


Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2


I want to be able to do this in a single-column, array-type formula:


IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)


Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)


Thanks in advance.





  #6   Report Post  
Posted to microsoft.public.excel.worksheet.functions
external usenet poster
 
Posts: 5
Default Conditional Rank (or rather, Conditional Range)

OK here's a reverse/inverse rank formula on the same data:

=SUMPRODUCT(--($B$2:$B$7=$B2);--($C2$C$2:$C$7))+1

Hard to read, but if col B becomes a named range called Heights, and
col C becomes a named range called Ages, it's clearer:

=SUMPRODUCT(--($B2=Heights);--($C2Ages))+1

It's very close to Ron's formula upthread, so his explanation still
applies. You can't just reverse the sign in his formula however,
because then every instance gets counted without using the condition,
because his formula multiplies the conditions together. So the first
array argument to filter by height limits the resultset, then the
second just counts each instance of the current-row age exceeding the
minimum age.

It's probably easier for people who think in matrices more than I do
to follow SUMPRODUCT, but when it returns to English I do all
right ;).

Thanks again for the help.

On Apr 16, 12:51 pm, wrote:
Yes, that's a very clear and concise explanation, thank you, and I've
been puzzling through the way the function works in the meantime
myself.

A couple other helpful links on the subject, for others who might
happen along:

thorough exp. of SUMPRODUCT hehttp://www.xldynamic.com/source/xld.SUMPRODUCT.html

good discussion of double unary ("--") use in sumproduct:http://www.eggheadcafe.com/software/...doubleneg.html

Still chipping away at the reverse (some would say inverse) rank, any
other pointers appreciated.

On Apr 16, 12:22 pm, Ron Coderre

wrote:
Hi, DW


Regarding:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1


This section: ($B$2:$B$7=B2) determines which Height categories to include
in the calculation. It returns 1 for each $B$2:$B$7 cell that matches B2.
Non-matches equate to zero. In the posted data, that section returns this
array {1,1,0,1,0,0}


(Technically, it returns boolean values (TRUE/FALSE). but when arithmetic
operations are applied to TRUE/FALSE values in Excel, they are converted to 1
and 0, respectively)


That array is multiplied times the Ages in $C$2:$C$7
So....{1,1,0,1,0,0} x {55,45,16,21,39,38}
={1,1,0,1,0,0} x {55,45,16,21,39,38}
={1x55,1x45,0x16,1x21,0x39,0x38}
={55,45,0,21,0,0}


The Age in C2 is then compared to each value in that array. Each age
greater than C2 returns 1, all others return 0.


The final array summed by SUMPRODUCT is
={0,0,0,0,0,0}
Totalling 0 (indicating that NO values are smaller than C2). 1 is added to
adjust the value.


The formula in D3 works with this net array
={1,0,0,0,0,0}
Which totals to 1......plus 1 is a rank of 2


Does that help?


(Time pressure is preventing me from addressing your Reverse Rank question
right now...sorry)


***********
Regards,
Ron


XL2002, WinXP


" wrote:
Yes, this works. I'm trying to understand it a little better,
though... I can see how it verifies that the height is in the
appropriate group, and then evaluates the age in the C-column range
via array position, but why the less than sign in C2<B range? What
does the "--" do exactly? Why does it evaluate to 0 for first place
(necessitating the 1)?


And what if I wanted to reverse the rank?


Sorry for the detail questions, but I have to apply this to some much
more complex criteria, and my hunting hasn't dug up a good explanatory
reference on sumproduct, array, and rank thus far.


Thanks for the help.


On Apr 12, 3:06 pm, Ron Coderre
wrote:
With your posted data list in A1:C7
Name Height Age Rank
Bill Short 55
Mary Short 45
Tom Tall 16
Rufus Short 21
Henrietta Tall 39
Henry Tall 38


Try this:
D2: =SUMPRODUCT(--(C2<($B$2:$B$7=B2)*$C$2:$C$7))+1
Copy that formula down through D7


Does that help?
***********
Regards,
Ron


XL2002, WinXP


" wrote:
I'm looking for a way to grab a rank in a single column where the set
of values ranked from--the second argument in the RANK wks function--
is conditional. Say I had this data


Name Height Age Rank
Bill Short 55 1
Mary Short 45 2
Tom Tall 16 3
Rufus Short 21 3
Henrietta Tall 39 1
Henry Tall 38 2


I want to be able to do this in a single-column, array-type formula:


IF(Height="Short",RankAgeAmongShortPeople,RankAgeA mongTallPeople)


Is this possible, or do I have to use several columns to get there?
(Chip's excellent page on ranking does not seem to cover this to me
http://www.cpearson.com/excel/rank.htm)


Thanks in advance.



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Conditional formatting with Rank Sarah Excel Discussion (Misc queries) 3 March 31st 07 12:52 AM
Can I use a conditional if with a range < Motaad Excel Worksheet Functions 3 September 6th 06 08:56 PM
conditional formula: sum a range if text present in another range NeedAdvice777 Excel Discussion (Misc queries) 10 August 29th 06 04:51 PM
Conditional Format Rank query Rich Excel Discussion (Misc queries) 3 June 12th 06 07:43 PM
Conditional Range w/Sum Vlad Excel Worksheet Functions 4 June 25th 05 03:50 AM


All times are GMT +1. The time now is 05:17 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"